Kazalo:

Brezžični avtomobil s krmiljenjem z gestami: 7 korakov
Brezžični avtomobil s krmiljenjem z gestami: 7 korakov

Video: Brezžični avtomobil s krmiljenjem z gestami: 7 korakov

Video: Brezžični avtomobil s krmiljenjem z gestami: 7 korakov
Video: NEW BMW XM (653 hp) - POV drive & full walkaround! 2024, November
Anonim
Brezžični avtomobil z gestami
Brezžični avtomobil z gestami

V tej vadnici se bomo naučili, kako narediti avtomobil, ki ga upravlja gesta, ali katerega koli robota. Ta projekt ima dva dela, en del je oddajna enota, drugi del pa sprejemna enota. Oddajniška enota je dejansko nameščena na ročne rokavice, sprejemna enota pa v avto ali kateri koli robot. Zdaj je čas, da naredimo lep avto. Pojdimo!

1. korak: Oprema

Enota oddajnika

1. Arduino Nano.

2. Senzorski modul MPU6050.

3. Oddajnik RF 433 MHz.

4. Katera koli vrsta 3 -celične, 11,1 -voltne baterije (tukaj sem uporabil gumbno celico).

5. Vero-Board.

6. Rokavice za roke.

Sprejemna enota

1. Arduino Nano ali Arduino Uno.

2. Modul gonilnika motorja L298N.

3. 4 -kolesni okvir robota, vključno z motorji.

4. RF 433 RF sprejemnik.

5. 3-celična, 11,1-voltna Li-po baterija.

6. Vero-tabla.

Drugi

1. Lepilne palice in pištola.

2. Mostične žice.

3. Vijačni vijaki

4. Komplet za spajkanje.

itd.

2. korak: slikovna datoteka vezja

Slikovna datoteka vezja
Slikovna datoteka vezja

Korak 3: Filtriranje datoteke vezja

4. korak: Koda oddajnika

#vključi

#vključi

#vključi

MPU6050 mpu6050 (žica);

dolg časovnik = 0;

krmilnik char *;

void setup ()

{Serial.begin (9600); Wire.begin (); mpu6050.begin (); mpu6050.calcGyroOffsets (true); vw_set_ptt_inverted (true); // vw_set_tx_pin (10); vw_setup (4000); // hitrost prenosa podatkov Kbps

}

void loop ()

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

mpu6050.update ();

if (millis () - časovnik> 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 = millis (); }

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

if (mpu6050.getAccAngleX () 30) {controller = "X2"; vw_send ((uint8_t *) krmilnik, strlen (krmilnik)); vw_wait_tx (); // Počakajte, da izgine celotno sporočilo Serial.println ("NAPREJ"); } else if (mpu6050.getAccAngleY ()> 40) {controller = "Y1"; vw_send ((uint8_t *) krmilnik, strlen (krmilnik)); vw_wait_tx (); // Počakajte, da izgine celotno sporočilo Serial.println ("LEFT"); } else if (mpu6050.getAccAngleY () <-40) {controller = "Y2"; vw_send ((uint8_t *) krmilnik, strlen (krmilnik)); vw_wait_tx (); // Počakajte, da izgine celotno sporočilo Serial.println ("RIGHT"); } else if (mpu6050.getAccAngleX ()-10 && mpu6050.getAccAngleY ()-10) {controller = "A1"; vw_send ((uint8_t *) krmilnik, strlen (krmilnik)); vw_wait_tx (); // Počakajte, da izgine celotno sporočilo Serial.println ("STOP"); }}

5. korak: Koda sprejemnika

#vključi

int LA = 3;

int LB = 11; int RA = 5; int RB = 6; void setup () {Serial.begin (9600); vw_set_ptt_inverted (true); // Zahtevano za DR3100 vw_set_rx_pin (12); vw_setup (4000); // bitov na sekundo pinMode (13, OUTPUT); pinMode (LA, OUTPUT); pinMode (LB, OUTPUT); pinMode (RA, OUTPUT); pinMode (RB, OUTPUT); vw_rx_start (); // Zaženite sprejemnik PLL z zagonom Serial.println ("Vse v redu");

}

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

if (vw_get_message (buf, & buflen)) // Ne blokira

{if ((buf [0] == 'X') && (buf [1] == '1')) {Serial.println ("NAZAJ"); nazaj (); zamuda (100); // izklop (); } else if ((buf [0] == 'X') && (buf [1] == '2')) {Serial.println ("FORWARD"); naprej (); zamuda (100); // izklop (); }

sicer če ((buf [0] == 'Y') && (buf [1] == '1'))

{Serial.println ("LEFT"); levo (); zamuda (100); // izklop (); }

sicer če ((buf [0] == 'Y') && (buf [1] == '2'))

{Serial.println ("DESNO"); prav(); zamuda (100); // izklop (); } else if ((buf [0] == 'A') && (buf [1] == '1')) {Serial.println ("STOP"); off (); zamuda (100); }} else {Serial.println ("No Signal Received"); }}

void forward ()

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

void backward ()

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

praznina levo ()

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

void right ()

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

void off ()

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

Korak 6: Datoteke INO

7. korak: Povezava knjižnic

Knjižnica navideznih žic:

MPU6050_tockn Libraby:

Knjižnica Wire:

Priporočena: