- Com construir un robot per evitar obstacles amb un sensor d'ultrasons
- Components necessaris
- Esquema de connexions
- Robot per evitar obstacles amb Arduino-Code
El robot per evitar obstacles és un dispositiu intel·ligent que pot detectar automàticament l’obstacle que hi ha davant i evitar-los girant-se en una altra direcció. Aquest disseny permet al robot navegar en un entorn desconegut evitant col·lisions, que és un requisit primordial per a qualsevol robot mòbil autònom. L’aplicació del robot Evitant obstacles que s’utilitzen no és limitada i s’utilitza ara a la majoria de les organitzacions militars, cosa que ajuda a realitzar moltes tasques arriscades que cap soldat pot fer.
Prèviament, vam construir el robot per evitar obstacles amb Raspberry Pi i amb microcontrolador PIC. Aquesta vegada construirem un robot per evitar obstacles amb un sensor d'ultrasons i Arduino. Aquí s’utilitza un sensor d’ultrasons per detectar els obstacles del recorregut calculant la distància entre el robot i l’obstacle. Si el robot troba algun obstacle, canvia la direcció i continua movent-se.
Com construir un robot per evitar obstacles amb un sensor d'ultrasons
Abans d’anar a construir el robot, és important entendre com funciona el sensor d’ultrasons perquè aquest sensor tindrà un paper important en la detecció d’obstacles. El principi bàsic darrere del funcionament del sensor d'ultrasons és anotar el temps que ha passat el sensor per transmetre els feixos d'ultrasons i rebre els feixos d'ultrasons després de tocar la superfície. A continuació, es calcula la distància mitjançant la fórmula. En aquest projecte, s'utilitza el sensor d'ultrasons HC-SR04, àmpliament disponible. Per utilitzar aquest sensor, es seguirà un enfocament similar explicat anteriorment.

Per tant, el pin Trig de l’HC-SR04 s’eleva per almenys 10 us. Un feix sonor es transmet amb 8 impulsos de 40 KHz cadascun.

El senyal toca a la superfície i torna cap enrere i és capturat pel receptor Echo pin de l'HC-SR04. El pin Echo ja havia augmentat en el moment de l'enviament.

El temps que triga el feix a tornar enrere es guarda en variable i es converteix en distància mitjançant càlculs adequats com a continuació
Distància = (Temps x Velocitat del so a l’aire (343 m / s)) / 2
Hem utilitzat el sensor d'ultrasons en molts projectes per obtenir més informació sobre el sensor d'ultrasons i consultar altres projectes relacionats amb el sensor d'ultrasons.
Es poden trobar fàcilment els components d’aquest robot que evita obstacles. Per fabricar xassís, es pot utilitzar qualsevol xassís de joguina o es pot fer a mida.
Components necessaris
- Arduino NANO o Uno (qualsevol versió)
- Sensor d'ultrasons HC-SR04
- Mòdul de controlador de motor LM298N
- Motors de 5 V CC
- Bateria
- Rodes
- Xassís
- Jumper Wires
Esquema de connexions
A continuació es mostra el diagrama complet del circuit d’aquest projecte, ja que podeu veure que utilitza un nano Arduino. Però també podem crear un obstacle que evita el robot que utilitza Arduino UNO amb el mateix circuit (segueix el mateix pinout) i el mateix codi.

Un cop el circuit estigui a punt, hem de construir el nostre obstacle per evitar el cotxe muntant el circuit damunt d’un xassís robòtic, tal com es mostra a continuació.

Robot per evitar obstacles amb Arduino-Code
El programa complet amb un vídeo de demostració es presenta al final d’aquest projecte. El programa inclourà configurar el mòdul HC-SR04 i enviar els senyals als pins del motor per moure la direcció del motor en conseqüència. No s’utilitzaran biblioteques en aquest projecte.
Primer definiu el trig i el ressò de l'HC-SR04 al programa. En aquest projecte, el pin de connexió està connectat a GPIO9 i el pin de ressò està connectat a GPIO10 d'Arduino NANO.
int trigPin = 9; // pin pin de HC-SR04 int echoPin = 10; // Pin de ressò de HC-SR04
Definiu els pins per a l'entrada del mòdul de controlador de motor LM298N. El LM298N té 4 pins d'entrada de dades utilitzats per controlar la direcció del motor connectat a ell.
int revleft4 = 4; // Moviment invers del motor esquerre int fwdleft5 = 5; // Moviment ForWarD del motor esquerre esquerre revright6 = 6; // Moviment invers del motor dret int fwdright7 = 7; // Moviment ForWarD del motor dret

A la funció setup () , definiu la direcció de les dades dels pins GPIO utilitzats. Els quatre pins del motor i el pin Trig es configuren com a SORTIDA i el pin Echo com a entrada.
pinMode (revleft4, OUTPUT); // Estableix els pins del motor com a pinMode de sortida (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // estableix el pin de sortida com a pin pin Mode (echoPin, INPUT); // estableix el pin de ressò com a entrada per capturar ones reflectides
A la funció loop () , obteniu la distància de HC-SR04 i, segons la distància, moveu la direcció del motor. La distància mostrarà la distància de l'objecte davant del robot. La distància es pren rebentant un feix d'ultrasons de fins a 10 us i rebent-la després de 10us. Per obtenir més informació sobre la mesura de la distància mitjançant el sensor d'ultrasons i Arduino, seguiu l'enllaç.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // enviar ones per 10 us delayMicroseconds (10); durada = pulseIn (echoPin, HIGH); // rebre ones reflectides distància = durada / 58,2; // convertir a retard de distància (10);
Si la distància és superior a la distància definida significa que no hi ha cap obstacle al seu pas i es mourà en direcció endavant.
if (distància> 19) { digitalWrite (fwdright7, HIGH); // avançar digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Si la distància és inferior a la distància definida per evitar obstacles significa que hi ha algun obstacle per davant. Així doncs, en aquesta situació, el robot s’aturarà una estona i es desplaçarà cap enrere després, tornarà a parar-se una estona i després girarà cap a una altra direcció.
if (distància <18) { digitalWrite (fwdright7, LOW); // Atura digitalWrite (revright6, BAIX); digitalWrite (fwdleft5, BAIX); digitalWrite (revleft4, LOW); retard (500); digitalWrite (fwdright7, BAIX); // movebackword digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, BAIX); digitalWrite (revleft4, HIGH); retard (500); digitalWrite (fwdright7, BAIX); // Atura digitalWrite (revright6, BAIX); digitalWrite (fwdleft5, BAIX); digitalWrite (revleft4, LOW); retard (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, BAIX); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, BAIX); retard (500); }
Així doncs, és així com un robot pot evitar obstacles al seu pas sense quedar-se atrapat enlloc. Trobeu el codi complet i el vídeo a continuació.
