Arduino Robot
xy241
c_cpp
13 days ago
3.5 kB
8
Indexable
#include <Arduino.h> #include <Servo.h> // for servo motor Servo servo; // PWM on pin 9,10 are taken away, use pin 3,5,6 and 11 instead int SERVO_PIN = 2; // can be any digital pin // for ultrasonic sensor const float SPEED_OF_SOUND = 0.0345; int TRIG_PIN = 13; int ECHO_PIN = 12; // for motor int MOTOR_FRONT_FORWARD_PIN = 11; int MOTOR_BACK_FORWARD_PIN = 10; int MOTOR_FRONT_BACKWARD_PIN = 9; int MOTOR_BACK_BACKWARD_PIN = 8; // launch the ball void launch() { Serial.println("Launching the ball"); for(int i = 0; i < 130; i++) { servo.write(i); delay(5); } } /** * @brief Measures distance using ultrasonic sensor * @return Distance in centimeters, or -1 if reading failed */ float distanceAway() { // tell the sensor to send the signal to obtain the distance away digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); // delay 10 micro-seconds for the sensor to send the signal digitalWrite(TRIG_PIN, LOW); // read the signal from the sensor to calculate the distance unsigned long microSecs = pulseIn(ECHO_PIN, HIGH); float cms = microSecs * SPEED_OF_SOUND / 2; return cms; } void moveForward() { // move the motor forward digitalWrite(MOTOR_FRONT_FORWARD_PIN, HIGH); digitalWrite(MOTOR_BACK_FORWARD_PIN, HIGH); // turn off the backward motor digitalWrite(MOTOR_FRONT_BACKWARD_PIN, LOW); digitalWrite(MOTOR_BACK_BACKWARD_PIN, LOW); } void moveBackward() { // move the motor backward digitalWrite(MOTOR_FRONT_BACKWARD_PIN, HIGH); digitalWrite(MOTOR_BACK_BACKWARD_PIN, HIGH); // turn off the forward motor digitalWrite(MOTOR_FRONT_FORWARD_PIN, LOW); digitalWrite(MOTOR_BACK_FORWARD_PIN, LOW); } void stopMotor() { // turn off the forward motor digitalWrite(MOTOR_FRONT_FORWARD_PIN, LOW); digitalWrite(MOTOR_BACK_FORWARD_PIN, LOW); // turn off the backward motor digitalWrite(MOTOR_FRONT_BACKWARD_PIN, LOW); digitalWrite(MOTOR_BACK_BACKWARD_PIN, LOW); } void setup() { // for servo motor servo.attach(SERVO_PIN); // bigger than 500 and less than 2500 servo.write(0); // start from 0 degree // for ultrasonic sensor // the smallest distance the sensor can measure is 3cm pinMode(TRIG_PIN, OUTPUT); digitalWrite(TRIG_PIN, LOW); // to make sure the sensor is off pinMode(ECHO_PIN, INPUT); // to read the signal from the sensor // for motor pinMode(MOTOR_FRONT_FORWARD_PIN, OUTPUT); // to move the motor forward digitalWrite(MOTOR_FRONT_FORWARD_PIN, LOW); // to make sure the motor is off pinMode(MOTOR_BACK_FORWARD_PIN, OUTPUT); // to move the motor forward digitalWrite(MOTOR_BACK_FORWARD_PIN, LOW); // to make sure the motor is off pinMode(MOTOR_FRONT_BACKWARD_PIN, OUTPUT); // to move the motor backward digitalWrite(MOTOR_FRONT_BACKWARD_PIN, LOW); // to make sure the motor is off pinMode(MOTOR_BACK_BACKWARD_PIN, OUTPUT); // to move the motor backward digitalWrite(MOTOR_BACK_BACKWARD_PIN, LOW); // to make sure the motor is off moveForward(); // Start moving forward!!! Serial.begin(9600); // for debugging purposes } boolean launched = false; void loop() { float distance = distanceAway(); // we should stop robot to launch the ball if (distance < 10 && !launched) { // this 10cm is just a placeholder, we need to adjust it // stop & launch the ball stopMotor(); launch(); delay(1000); // wait for the ball to be launched launched = true; // mission accomplished! } if (launched) { moveBackward(); // keep moving forward } }
Editor is loading...
Leave a Comment