Paso 1. Descargar e instalar Programa Mblock para programar por bloques el robot Seguidor de líneas.
Link de descarga Mblcok: https://dl.makeblock.com/mblock3/mBlock_win_V3.4.12.exe
Descarga de carpeta con código en Mblock y circuito eléctrico en fritzing
Utilizar driver CH340 solo en caso de que el Arduino Uno no se pueda programar con los drivers ya instalados por default en la computadora
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
float MotorDerechoA = 0;
float MotorIzquierdoA = 0;
float MotorIzquierdoB = 0;
float MotorDerechoB = 0;
float VelMotorDer = 0;
float VelMotorIzq = 0;
float SensorDerecho = 0;
float SensorIzquierdo = 0;
float BotonInicio = 0;
float LED = 0;
float getDistance(int trig,int echo){
pinMode(trig,OUTPUT);
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
pinMode(echo, INPUT);
return pulseIn(echo,HIGH,30000)/58.0;
}
void Retroceder (){
digitalWrite(MotorDerechoA,0);
analogWrite(MotorDerechoB,VelMotorDer);
digitalWrite(MotorIzquierdoA,0);
analogWrite(MotorIzquierdoB,VelMotorIzq);
}
void Variables (){
BotonInicio = 19;
LED = 3;
MotorDerechoA = 5;
MotorDerechoB = 6;
MotorIzquierdoA = 9;
MotorIzquierdoB = 10;
SensorDerecho = 0;
SensorIzquierdo = 0;
VelMotorDer = 200;
VelMotorIzq = 200;
digitalWrite(LED,1);
}
void GirarDerecha (){
analogWrite(MotorDerechoA,VelMotorDer);
digitalWrite(MotorDerechoB,0);
digitalWrite(MotorIzquierdoA,0);
analogWrite(MotorIzquierdoB,VelMotorIzq);
}
void GirarIzquierda (){
digitalWrite(MotorDerechoA,0);
analogWrite(MotorDerechoB,VelMotorDer);
analogWrite(MotorIzquierdoA,VelMotorIzq);
digitalWrite(MotorIzquierdoB,0);
}
void RutinaInicio (){
while(!(digitalRead(BotonInicio) == 0.000000))
{
_loop();
}
for(int count=0;count<5;count++){
digitalWrite(LED,0);
_delay(0.5);
digitalWrite(LED,1);
_delay(0.5);
}
}
void Detenerse (){
digitalWrite(MotorDerechoA,0);
digitalWrite(MotorDerechoB,0);
digitalWrite(MotorIzquierdoA,0);
digitalWrite(MotorIzquierdoB,0);
}
void Avanzar (){
analogWrite(MotorDerechoA,VelMotorDer);
digitalWrite(MotorDerechoB,0);
analogWrite(MotorIzquierdoA,VelMotorIzq);
digitalWrite(MotorIzquierdoB,0);
}
void _delay(float seconds) {
long endTime = millis() + seconds * 1000;
while(millis() < endTime) _loop();
}
void setup() {
pinMode(MotorDerechoA,OUTPUT);
pinMode(MotorDerechoB,OUTPUT);
pinMode(MotorIzquierdoA,OUTPUT);
pinMode(MotorIzquierdoB,OUTPUT);
pinMode(LED,OUTPUT);
pinMode(BotonInicio,INPUT);
Variables();
Detenerse();
RutinaInicio();
GirarDerecha();
_delay(2);
while(1) {
SensorIzquierdo = getDistance(17,16);
SensorDerecho = getDistance(15,14);
_delay(0.2);
if(((SensorIzquierdo < 50) && (SensorIzquierdo > 0)) && ((SensorDerecho < 50) && (SensorDerecho > 0))){
Avanzar();
_delay(1);
}
if((((SensorIzquierdo > 50) || (SensorIzquierdo == 0.000000))) && ((SensorDerecho < 50) && (SensorDerecho > 0))){
GirarDerecha();
_delay(0.2);
Avanzar();
_delay(0.2);
}
if(((SensorIzquierdo < 50) && (SensorIzquierdo > 0)) && (((SensorDerecho > 50) || (SensorDerecho == 0.000000)))){
GirarIzquierda();
_delay(0.2);
Avanzar();
_delay(0.2);
}
if(((SensorIzquierdo < 1) && (SensorDerecho < 1)) || ((SensorIzquierdo > 100) && (SensorDerecho > 100))){
GirarDerecha();
_delay(0.2);
GirarIzquierda();
_delay(0.2);
}
_loop();
}
}
void _loop() {
}
void loop() {
_loop();
}