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
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);
}