
Tutorial Robot Autónomo: Parte III
Este sketch es un poco mas fácil de entender y no utiliza un motor shield si ese es tu caso.
Requisitos:
- Computadora (mac)
- Arduino UNO.
- Llantas (2)
- Motores DC (2)
- Sensor Ultrasonico
- Mini Servo
- Arduino IDE (https://www.arduino.cc/en/Main/Software)
Componentes

La única diferencia es que no usa el motor shield o sea que los motores se conectan directamente a la UNO. Veamos el código:
#include <Servo.h> #include <NewPing.h> //CONSTANTES #define LeftMotorForward 2 #define LeftMotorBackward 3 #define RightMotorForward 5 #define RightMotorBackward 4 #define USTrigger 8 #define USEcho 9 #define MaxDistance 100 #define LED 13 Servo servo; NewPing sonar(USTrigger, USEcho, MaxDistance); //VARIABLES unsigned int duration; unsigned int distance; unsigned int FrontDistance; unsigned int LeftDistance; unsigned int RightDistance; unsigned int Time; unsigned int CollisionCounter; void setup() { Serial.begin(9600); pinMode(LeftMotorForward, OUTPUT); //Modo de los pines pinMode(LeftMotorBackward, OUTPUT); pinMode(RightMotorForward, OUTPUT); pinMode(RightMotorBackward, OUTPUT); pinMode(LED, OUTPUT); servo.attach(6); //Servo en pin 6 } void loop(){ servo.write(90); //Ver frente scan(); //Mapear FrontDistance = distance; //Que tenemos al frente Serial.println("Distancia frontal = "); Serial.print(distance); if(FrontDistance > 40 || FrontDistance == 0) { moveForward(); //Si no hay nada, mover al frente } else { CollisionCounter = CollisionCounter + 1; moveStop(); //Detener navigate(); //Navegar } } void moveForward(){ Serial.println(""); Serial.println("Avanzando"); digitalWrite(LeftMotorBackward, LOW); digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorBackward, LOW); digitalWrite(RightMotorForward, HIGH); } void moveBackward(){ Serial.println(""); Serial.println("Retrocediendo"); digitalWrite(LeftMotorForward, LOW); digitalWrite(LeftMotorBackward, HIGH); digitalWrite(RightMotorForward, LOW); digitalWrite(RightMotorBackward, HIGH); } void moveLeft(){ Serial.println(""); Serial.println("Izquierda"); digitalWrite(LeftMotorForward, LOW); digitalWrite(LeftMotorBackward, HIGH); digitalWrite(RightMotorBackward, LOW); digitalWrite(RightMotorForward, HIGH); } void moveRight(){ Serial.println(""); Serial.println("Derecha"); digitalWrite(LeftMotorBackward, LOW); digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, LOW); digitalWrite(RightMotorBackward, HIGH); } void moveStop(){ Serial.println(""); Serial.println("Deteniendo marcha"); digitalWrite(LeftMotorBackward, LOW); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorForward, LOW); digitalWrite(RightMotorBackward, LOW); } void scan(){ Serial.println(""); Serial.println("Mapeando"); Time = sonar.ping(); distance = Time / US_ROUNDTRIP_CM; delay(500); } void navigate(){ Serial.println("PELIGRO!"); servo.write(167); //Mover servo a la izquierda delay(1000); scan(); LeftDistance = distance; Serial.println("Distancia Izquierda = "); Serial.print(distance); servo.write(0); //Mover servo a la derecha delay(1000); scan(); RightDistance = distance; Serial.println("Distancia Derecha = "); Serial.print(distance); if(abs(RightDistance - LeftDistance) < 5){ moveBackward(); delay(200); moveRight(); delay(100); }else if(RightDistance < LeftDistance){ moveLeft(); delay(100); }else if(LeftDistance < RightDistance){ moveRight(); delay(100); } }
Esperamos que te estes divirtiendo!