Cuprins:

Mașină fără fir controlată prin gesturi: 7 pași
Mașină fără fir controlată prin gesturi: 7 pași

Video: Mașină fără fir controlată prin gesturi: 7 pași

Video: Mașină fără fir controlată prin gesturi: 7 pași
Video: Mașină cu detectie de gesturi Telecomandă Mașină cascadorie 360° Drift general Urban Trends 2024, Noiembrie
Anonim
Mașină fără fir controlată prin gesturi
Mașină fără fir controlată prin gesturi

În acest tutorial vom învăța cum să facem o mașină controlată prin gesturi sau orice robot. Acest proiect are două părți, o parte este unitatea emițător și cealaltă parte este unitatea receptor. Unitatea transmițătoare este montată de fapt pe mănuși de mână și unitatea receptor este plasată în interiorul unei mașini sau al oricărui robot. Acum este timpul să faci o mașină frumoasă. Să mergem!

Pasul 1: Echipamente

Unitate emițător

1. Arduino Nano.

2. Modulul senzor MPU6050.

3. Transmițător RF 433 MHz.

4. Orice tip de baterie cu 3 celule, 11,1 volți (aici am folosit celule cu monede).

5. Vero-Board.

6. Mănuși de mână.

Unitate receptor

1. Arduino Nano sau Arduino Uno.

2. Modulul driverului de motor L298N.

3. Cadru robot cu 4 roți, inclusiv motoare.

4. Receptor RF 433 RF.

5. Baterie Li-po cu 3 celule, 11,1 volți.

6. Vero-bord.

Alții

1. Lipiți bastoane și pistol.

2. Sârme de jumper.

3. Șurubelnițe

4. Set de lipit.

etc.

Pasul 2: Fișier imagine cu diagramă de circuit

Fișier imagine cu diagramă de circuit
Fișier imagine cu diagramă de circuit

Pasul 3: Fișierul Fritzing al schemei de circuite

Pasul 4: Codul emițătorului

#include

#include

#include

MPU6050 mpu6050 (Sârmă);

cronometru lung = 0;

controler char *;

configurare nulă ()

{Serial.begin (9600); Wire.begin (); mpu6050.begin (); mpu6050.calcGyroOffsets (adevărat); vw_set_ptt_inverted (adevărat); // vw_set_tx_pin (10); vw_setup (4000); // viteza transferului de date Kbps

}

bucla nulă ()

{ ////////////////////////////////////////////////////////////////////////////////////////////////

mpu6050.update ();

if (milis () - temporizator> 1000)

{Serial.println ("============================================= =========== "); Serial.print ("temp:"); Serial.println (mpu6050.getTemp ()); Serial.print ("accX:"); Serial.print (mpu6050.getAccX ()); Serial.print ("\ taccY:"); Serial.print (mpu6050.getAccY ()); Serial.print ("\ taccZ:"); Serial.println (mpu6050.getAccZ ()); Serial.print ("gyroX:"); Serial.print (mpu6050.getGyroX ()); Serial.print ("\ tgyroY:"); Serial.print (mpu6050.getGyroY ()); Serial.print ("\ tgyroZ:"); Serial.println (mpu6050.getGyroZ ()); Serial.print ("accAngleX:"); Serial.print (mpu6050.getAccAngleX ()); Serial.print ("\ taccAngleY:"); Serial.println (mpu6050.getAccAngleY ()); Serial.print ("gyroAngleX:"); Serial.print (mpu6050.getGyroAngleX ()); Serial.print ("\ tgyroAngleY:"); Serial.print (mpu6050.getGyroAngleY ()); Serial.print ("\ tgyroAngleZ:"); Serial.println (mpu6050.getGyroAngleZ ()); Serial.print ("angleX:"); Serial.print (mpu6050.getAngleX ()); Serial.print ("\ tangleY:"); Serial.print (mpu6050.getAngleY ()); Serial.print ("\ tangleZ:"); Serial.println (mpu6050.getAngleZ ()); Serial.println ("============================================== ========== / n "); timer = milis (); }

/////////////////////////////////////////////////////////////////////////////////////

if (mpu6050.getAccAngleX () 30) {controller = "X2"; vw_send ((uint8_t *) controller, strlen (controller)); vw_wait_tx (); // Așteptați până când întregul mesaj dispare Serial.println ("FORWARD"); } else if (mpu6050.getAccAngleY ()> 40) {controller = "Y1"; vw_send ((uint8_t *) controller, strlen (controller)); vw_wait_tx (); // Așteptați până când întregul mesaj dispare Serial.println ("STÂNGA"); } else if (mpu6050.getAccAngleY () <- 40) {controller = "Y2"; vw_send ((uint8_t *) controller, strlen (controller)); vw_wait_tx (); // Așteptați până când întregul mesaj dispare Serial.println („DREAPTA”); } else if (mpu6050.getAccAngleX () - 10 && mpu6050.getAccAngleY () - 10) {controller = "A1"; vw_send ((uint8_t *) controller, strlen (controller)); vw_wait_tx (); // Așteptați până când întregul mesaj dispare Serial.println ("STOP"); }}

Pasul 5: Cod receptor

#include

int LA = 3;

int LB = 11; int RA = 5; int RB = 6; void setup () {Serial.begin (9600); vw_set_ptt_inverted (adevărat); // Obligatoriu pentru DR3100 vw_set_rx_pin (12); vw_setup (4000); // Bits per sec pinMode (13, OUTPUT); pinMode (LA, OUTPUT); pinMode (LB, OUTPUT); pinMode (RA, OUTPUT); pinMode (RB, OUTPUT); vw_rx_start (); // Porniți receptorul PLL rulând Serial.println („Toate OK”);

}

bucla void () {uint8_t buf [VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message (buf, & buflen)) // Non-blocare

{if ((buf [0] == 'X') && (buf [1] == '1')) {Serial.println ("BACKWARD"); înapoi(); întârziere (100); // off (); } else if ((buf [0] == 'X') && (buf [1] == '2')) {Serial.println ("FORWARD"); redirecţiona(); întârziere (100); // off (); }

else if ((buf [0] == 'Y') && (buf [1] == '1'))

{Serial.println („STÂNGA”); stânga(); întârziere (100); // off (); }

else if ((buf [0] == 'Y') && (buf [1] == '2'))

{Serial.println („DREAPTA”); dreapta(); întârziere (100); // off (); } else if ((buf [0] == 'A') && (buf [1] == '1')) {Serial.println ("STOP"); off (); întârziere (100); }} else {Serial.println ("Fără semnal primit"); }}

nul înainte ()

{analogWrite (LA, 70); analogWrite (LB, 0); analogWrite (RA, 70); analogWrite (RB, 0); }

nul înapoi ()

{analogWrite (LA, 0); analogWrite (LB, 70); analogWrite (RA, 0); analogWrite (RB, 70); }

gol stâng ()

{analogWrite (LA, 0); analogWrite (LB, 70); analogWrite (RA, 70); analogWrite (RB, 0); }

nul drept ()

{analogWrite (LA, 70); analogWrite (LB, 0); analogWrite (RA, 0); analogWrite (RB, 70); }

anulează ()

{analogWrite (LA, 0); analogWrite (LB, 0); analogWrite (RA, 0); analogWrite (RB, 0); }

Pasul 6: fișiere INO

Pasul 7: Legătura bibliotecilor

Biblioteca de fire virtuale:

MPU6050_tockn Libraby:

Biblioteca de sârmă:

Recomandat: