Sommario:

Auto robotica per evitare ostacoli: 9 passaggi
Auto robotica per evitare ostacoli: 9 passaggi

Video: Auto robotica per evitare ostacoli: 9 passaggi

Video: Auto robotica per evitare ostacoli: 9 passaggi
Video: Costruiamo una macchinina smart! || Parte 3 - sensore ultrasuoni evita ostacoli 2024, Dicembre
Anonim
Ostacolo che evita l'automobile robotica
Ostacolo che evita l'automobile robotica
Ostacolo che evita l'automobile robotica
Ostacolo che evita l'automobile robotica

Come costruire un robot per evitare gli ostacoli

Passaggio 1: scatola nera

Scatola nera
Scatola nera

il primo passo ho usato una scatola nera come base per il mio robot.

Passaggio 2: Arduino

Arduino
Arduino

L'Arduino è il cervello di tutto il sistema e orchestra i nostri motori

Passaggio 3: collegare Arduino a Blackbox

Collegare Arduino a Blackbox
Collegare Arduino a Blackbox

Ho attaccato l'arduino alla scatola nera usando la colla a caldo

Passaggio 4: sensore a ultrasuoni

Sensore ultrasonico
Sensore ultrasonico

Per realizzare un robot in grado di muoversi da solo abbiamo bisogno di una sorta di input, un sensore che si adatti al nostro obiettivo. Un sensore a ultrasuoni è uno strumento che misura la distanza da un oggetto utilizzando onde sonore ultrasoniche. Un sensore a ultrasuoni utilizza un trasduttore per inviare e ricevere impulsi ultrasonici che trasmettono informazioni sulla vicinanza di un oggetto

Passaggio 5: collegamento breadboard del sensore ad Arduino

Collegamento breadboard del sensore ad Arduino
Collegamento breadboard del sensore ad Arduino
Collegamento breadboard del sensore ad Arduino
Collegamento breadboard del sensore ad Arduino

Ho usato i fili per collegare la breadboard a arduino.

Fai attenzione che il tuo sensore ping potrebbe avere una disposizione dei pin diversa, ma dovrebbe avere un pin di tensione, un pin di terra, un pin di attivazione e un pin di eco.

Passaggio 6: protezione motore

Scudo motore
Scudo motore

Le schede Arduino non possono controllare da sole i motori cc, perché le correnti che stanno generando sono troppo basse. Per risolvere questo problema utilizziamo gli schermi motore. Lo schermo motore ha 2 canali, che consentono il controllo di due motori CC, o 1 motore passo-passo. … Indirizzando questi pin è possibile selezionare un canale motore da avviare, specificare la direzione del motore (polarità), impostare la velocità del motore (PWM), arrestare e avviare il motore e monitorare l'assorbimento di corrente di ciascun canale

Passaggio 7: collegamento di Motor Shield ad Arduino

Collegamento di Motor Shield ad Arduino
Collegamento di Motor Shield ad Arduino

Basta collegare lo scudo del motore all'arduino con i fili del sensore schiacciati dentro

Passaggio 8: collegamento dei 4 motori e delle batterie allo schermo

Collegamento dei 4 motori e delle batterie allo schermo
Collegamento dei 4 motori e delle batterie allo schermo

Ogni Motor Shield ha (almeno) due canali, uno per i motori e uno per una fonte di alimentazione, collegarli l'uno rispetto all'altro

Passaggio 9: programmare il robot

esegui questo codice

#include #include

NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);

AF_DCMotore motore1(1, MOTOR12_1KHZ); AF_DCMotore motore2(2, MOTOR12_1KHZ); AF_DCMotore motore3(3, MOTOR34_1KHZ); AF_DCMotore motore4(4, MOTOR34_1KHZ); Servo mio servo;

#definire TRIG_PIN A2 #definire ECHO_PIN A3 #definire MAX_DISTANCE 150 #definire MAX_SPEED 100 #definire MAX_SPEED_OFFSET 10

booleano goesForward=false; distanza int = 80; int speedSet = 0;

void setup() {

mioservo.attach(10); mioservo.write(115); ritardo (2000); distanza = readPing(); ritardo(100); distanza = readPing(); ritardo(100); distanza = readPing(); ritardo(100); distanza = readPing(); ritardo(100); }

void loop() { int distanzaR = 0; distanza intL = 0; ritardo(40); if(distanza<=15) { moveStop(); ritardo(50); tornare indietro(); ritardo(150); moveStop(); ritardo(100); distanzaR = lookRight(); ritardo(100); distanzaL = lookLeft(); ritardo(100);

if(distanzaR>=distanzaL) { turnRight(); moveStop(); }else { turnLeft(); moveStop(); } }else { moveForward(); } distanza = readPing(); }

int lookRight() { mioservo.write(50); ritardo(250); int distanza = readPing(); ritardo(50); mioservo.write(100); distanza di ritorno; }

int lookLeft() { myservo.write(120); ritardo(300); int distanza = readPing(); ritardo(100); mioservo.write(115); distanza di ritorno; ritardo(100); }

int readPing() { delay(70); int cm = sonar.ping_cm(); if(cm==0) {cm = 200; } restituisce cm; }

void moveStop() { motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); } void moveForward() {

if(!goesForward) { goesForward=true; motore1.run(AVANTI); motore2.run(AVANTI); motore3.run(AVANTI); motor4.run(AVANTI); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet); motor3.setSpeed(speedSet); motor4.setSpeed(speedSet); ritardo(5); } } }

void moveBackward() { goesForward=false; motore1.run(INDIETRO); motore2.run(INDIETRO); motore3.run(INDIETRO); motor4.run(BACKWARD); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet); motor3.setSpeed(speedSet); motor4.setSpeed(speedSet); ritardo(5); } void turnLeft() { motor1.run(BACKWARD); motore2.run(INDIETRO); motore3.run(AVANTI); motor4.run(AVANTI); ritardo (500); motore1.run(AVANTI); motore2.run(AVANTI); motore3.run(AVANTI); motor4.run(AVANTI); }

void turnLeft() { motor1.run(BACKWARD); motore2.run(INDIETRO); motore3.run(AVANTI); motor4.run(AVANTI); ritardo (500); motore1.run(AVANTI); motore2.run(AVANTI); motore3.run(AVANTI); motor4.run(AVANTI); }

Consigliato: