Macchinina evita oggetti

In questo progetto costruiremo una macchinina in grado, grazie al rilevatore ad ultrasuoni HC-SR04, di rilevare la presenza di oggetti e, se si andrebbe a scontrare con la macchina, farla curvare facendoglielo così evitare.

I componenti utilizzati sono:
-Arduino Uno
-Sensore ad ultrasuoni ​HC-SR04
-Mini breadbord
-Jumper
-Robot Chassis 2 ruote (io consiglio questo, se volete sceglierne un altro assicuratevi che contenga: base preforata, ruota folle autodirezionabile, 2 motoriduttori completi di ruote gommate e infine  bulloneria necessaria per assemblare tutto)

Per prima cosa montiamo il circuito come lo schema seguente

 ESCAPE='HTML'
 ESCAPE='HTML'

Dopo aver montato i componenti sulla breadboard e collegato il tutto non rimane che inserire lo sketch su Arduino tramite l`IDE aggiornato alla versione più recente. Il codice è il seguente:

#define M1r   3
#define M1b   5

#define M2r   10
#define M2b   11

#define SONAR_TRIGGER_PIN   6
#define SONAR_ECHO_PIN      7

void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);

 pinMode(SONAR_TRIGGER_PIN, OUTPUT);
 pinMode(SONAR_ECHO_PIN, INPUT);

 pinMode(M1r, OUTPUT);
 pinMode(M1b, OUTPUT);

 pinMode(M2r, OUTPUT);
 pinMode(M2b, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
 unsigned int ostacolo=measure_distance();
 Serial.println(ostacolo, DEC);

 if(ostacolo<10){                      //distanza alla quale gira (cm)
 fermo();
 destra();
 delay(1000);
 }else{
 avanti();
 }
}
unsigned int measure_distance(){
  digitalWrite(SONAR_TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(SONAR_TRIGGER_PIN, LOW);
  unsigned long pulse_lenght=pulseIn(SONAR_ECHO_PIN, HIGH);
  delay(50);
  return( (unsigned int) (pulse_lenght/58));
  // uS/58=cm or uS/148=inches
}

void avanti(){
digitalWrite(M1r,HIGH);
digitalWrite(M1b,LOW);
digitalWrite(M2r,HIGH);
digitalWrite(M2b,LOW);
}

void indietro(){
digitalWrite(M1r,LOW);
digitalWrite(M1b,HIGH);
digitalWrite(M2r,LOW);
digitalWrite(M2b,HIGH);
}

void destra(){
digitalWrite(M1r,HIGH);
digitalWrite(M1b,LOW);
digitalWrite(M2r,LOW);
digitalWrite(M2b,LOW);
}

void sinistra(){
digitalWrite(M1r,LOW);
digitalWrite(M1b,LOW);
digitalWrite(M2r,HIGH);
digitalWrite(M2b,LOW);
}

void fermo(){
digitalWrite(M1r,LOW);
digitalWrite(M1b,LOW);
digitalWrite(M2r,LOW);
digitalWrite(M2b,LOW);
}

 ESCAPE='HTML'