Fast

ROB-55648

Автономный робот "Fast" выполнен на четырех колесной платформе с задним приводом. Элементы шасси робота вырезаны из оргстекла толщиной 3 мм на лазерном станке. Привод задний, два мотора модель HC02-48, 1::48 с редуктором. Управление двигателями осуществляется с помощью драйвера двигателя L298.
Рулевое управление переднее помощью стандартного сервопривода на 6 килограмм. 
Передний бампер вспененная резина.
Система управления на базе микропроцессора Arduino UNO. 
Драйвер двигателя L298.  
Цифровые датчики линии и датчики расстояния HC-SR04.
Питание робота 7,4В осуществляется  от двух аккумуляторов типа 18650 соединенных последовательно.

#include "Ultrasonic.h"
#include <Servo.h>
Ultrasonic L(10, 11); // Trig - first, Echo - second
Ultrasonic R(12, 13);
Servo myservo;
#define LS A0 // левый датчик
#define RS A1 // правый датчик
#define IN1 2 // мотор 1 
#define IN2 4 // мотор 1 
#define IN3 5 // мотор 2 
#define IN4 7 // мотор 2 
#define ENA 3 // мотор 1 
#define ENB 6 // мотор 2

void setup()
{
 myservo.attach(8);
 pinMode(IN1,OUTPUT);
 pinMode(IN2,OUTPUT);
 pinMode(IN3,OUTPUT);
 pinMode(IN4,OUTPUT);
 pinMode(ENA,OUTPUT);
 pinMode(ENB,OUTPUT);
 pinMode(LS,INPUT);
 pinMode(RS,INPUT);
 Serial.begin(9600);
}
void loop()
{
 float d_L = L.Ranging(CM);     // get distance
 float d_R = R.Ranging(CM);     // get distance
 int lsstatus = digitalRead(LS);
 int rsstatus = digitalRead(RS);
 /*Serial.print(d_L);
 Serial.println("cml, ");
 Serial.print(d_R);
 Serial.println("cmr, ");
 delay(500);*/
 int var = (d_L - d_R);
 Serial.println(var);
 if ((-10<=var)&&(var<=10)) // движение прямо
   {myservo.write(90);
   digitalWrite(IN1, 1); 
   digitalWrite(IN2, 0);
   digitalWrite(IN3, 1);
   digitalWrite(IN4, 0); 
   analogWrite(ENA, 100);
   analogWrite(ENB, 100);}
 if (var > 11)               // поворот налево
   {myservo.write(60); 
   digitalWrite(IN1, 1); 
   digitalWrite(IN2, 0);
   digitalWrite(IN3, 1);
   digitalWrite(IN4, 0); 
   analogWrite(ENA, 100);
   analogWrite(ENB, 100);}
 if (var < -11)              // поворот направо
   {myservo.write(120); 
   digitalWrite(IN1, 1); 
   digitalWrite(IN2, 0);
   digitalWrite(IN3, 1);
   digitalWrite(IN4, 0); 
   analogWrite(ENA, 100);
   analogWrite(ENB, 100);}
 if ((var < -70)||(var > 70))
    {if(digitalRead(LS) && digitalRead(RS)) // движение вперед
     {myservo.write(90);
     digitalWrite(IN1, 1); 
     digitalWrite(IN2, 0);
     digitalWrite(IN3, 1);
     digitalWrite(IN4, 0); 
     analogWrite(ENA, 100);
     analogWrite(ENB, 100);}
   if(!(digitalRead(LS)) && digitalRead(RS)) // поворачиваем направо
     {myservo.write(50);
     digitalWrite(IN1, 1); 
     digitalWrite(IN2, 0);
     digitalWrite(IN3, 1);
     digitalWrite(IN4, 0); 
     analogWrite(ENA, 100);
     analogWrite(ENB, 100);
     delay(500);}
   if(digitalRead(LS) && !(digitalRead(RS))) // поворачиваем налево
     {myservo.write(130);
     digitalWrite(IN1, 1); 
     digitalWrite(IN2, 0);
     digitalWrite(IN3, 1);
     digitalWrite(IN4, 0); 
     analogWrite(ENA, 100);
     analogWrite(ENB, 100);
     delay(500);}
   }
  /*/if ((-10<=var)&&(var<=10)) // стоп
   {if(!(digitalRead(LS)) && !(digitalRead(RS))) // остановка
   {myservo.write(90);
   analogWrite(ENA, 0);
   analogWrite(ENB, 0);}
   }*/
}