Introducció a la robòtica en trenta-una classes/Vuitè dia: mesurar distàncies amb ultrasons
Avui hem emprat un circuït de mesura de distància per ultrasons, que ja inclou emissor i
receptor. En el nostre cas, hem fet servir un HC-SR04.
Aquest circuït, ens dóna un senyal durant el temps que viatja el so. O sigui, que si
mesurem el temps que ens està donant senyal, sabrem quan ha trigat el so en anar fins a
l’objecte i tornar. Funciona molt bé si l’objecte és pla i rígid, i malament si l’objecte no
presenta una cara plana o és de roba, per exemple. Això té tot el sentit, ja que el que
necessita el sensor és que torni la major part del so, i que no sigui esmorteït per
l’objecte. Ja que és ultrasò, uns 40KHz, no el sentirem funcionar.
Sabem que el so viatja a uns 340 metres per segon. L’arduino ens donarà el temps en
microsegons. Per tant, si volem que ens doni la resposta en mm, haurem de multiplicar x
365, i dividir per mil. Això ens dirà quants de mm ha viatjat el so, sumant anada i tornada.
Com que volem saber a quant es troba l’objecte, dividirem el resultat per dos. El resultat
el treurem pel monitor sèrie.
Per a fer el programa ens documentem, i ens diu que li hem de donar un pols de deu
microsegons en el pin de trigger, i que llavors ell ens treurà un 1 pel pin echo durant el
temps que trigui el so en tornar. El programa ens ha quedat:
void setup() {
pinMode(11,OUTPUT); // preparem pin 11 per a sortida
Serial.begin(115200); // configurem el port sèrie a 115200
}
void loop() {
digitalWrite(11,0); // assegurem que estigui el trigger apagat
delayMicroseconds(2); // esperem un temps per a estabilitzar
digitalWrite(11,1); // donem sortida de trigger
delayMicroseconds(10); // esperem el temps que ens diu el fabricant
digitalWrite(11,0); // aturem la sortida de trigger
long durada=pulseIn(12,1); // preparem el pin 12 per mesurar el temps
long distancia=durada*340/1000/2; // calculem distància
Serial.print(“distancia=”); // posem un títol
Serial.println(distancia); // donem el resultat
delay(1000); // esperem un segon
}