Tartalomjegyzék:

Gesztusvezérelt vezeték nélküli autó: 7 lépés
Gesztusvezérelt vezeték nélküli autó: 7 lépés

Videó: Gesztusvezérelt vezeték nélküli autó: 7 lépés

Videó: Gesztusvezérelt vezeték nélküli autó: 7 lépés
Videó: Gesztusvezérelt kiber-fizikai robotrendszer 2024, November
Anonim
Gesztusvezérelt vezeték nélküli autó
Gesztusvezérelt vezeték nélküli autó

Ebben az oktatóanyagban megtanuljuk, hogyan lehet gesztusvezérelt autót vagy bármilyen robotot készíteni. Ez a projekt két részből áll, az egyik rész az adóegység, a másik pedig a vevőegység. Az adóegységet valójában egy kézi kesztyűre szerelik fel, és a vevőegységet egy autóba vagy bármely robotba helyezik. Itt az ideje, hogy szép autót készítsen. Gyerünk!

1. lépés: Felszerelések

Adóegység

1. Arduino Nano.

2. MPU6050 érzékelő modul.

3. RF 433 MHz -es adó.

4. Bármilyen típusú 3 cellás, 11,1 voltos akkumulátor (itt használtam érmecellát).

5. Vero-Board.

6. Kézkesztyű.

Vevőegység

1. Arduino Nano vagy Arduino Uno.

2. L298N motorvezérlő modul.

3. négykerekű robotkeret motorokkal együtt.

4. RF 433 RF vevő.

5. 3 cellás, 11,1 voltos Li-po akkumulátor.

6. Vero-board.

Mások

1. Ragasztópálca és pisztoly.

2. Jumper vezetékek.

3. Csavarhúzók

4. Forrasztókészlet.

stb.

2. lépés: Áramköri diagram képfájl

Áramköri képfájl
Áramköri képfájl

3. lépés: Az áramkör diagramjának frizurálása

4. lépés: Adókód

#befoglalni

#befoglalni

#befoglalni

MPU6050 mpu6050 (huzal);

hosszú időzítő = 0;

char *vezérlő;

üres beállítás ()

{Serial.begin (9600); Wire.begin (); mpu6050.begin (); mpu6050.calcGyroOffsets (igaz); vw_set_ptt_inverted (igaz); // vw_set_tx_pin (10); vw_setup (4000); // az adatátvitel sebessége Kbps

}

üres hurok ()

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

mpu6050.update ();

ha (millis () - időzítő> 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 "); időzítő = millis (); }

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

if (mpu6050.getAccAngleX () 30) {controller = "X2"; vw_send ((uint8_t *) vezérlő, strlen (vezérlő)); vw_wait_tx (); // Várjon, amíg az egész üzenet eltűnik Serial.println ("FORWARD"); } else if (mpu6050.getAccAngleY ()> 40) {controller = "Y1"; vw_send ((uint8_t *) vezérlő, strlen (vezérlő)); vw_wait_tx (); // Várjon, amíg az egész üzenet eltűnik Serial.println ("LEFT"); } else if (mpu6050.getAccAngleY () <-40) {controller = "Y2"; vw_send ((uint8_t *) vezérlő, strlen (vezérlő)); vw_wait_tx (); // Várjon, amíg az egész üzenet eltűnik Serial.println ("RIGHT"); } else if (mpu6050.getAccAngleX ()-10 && mpu6050.getAccAngleY ()-10) {controller = "A1"; vw_send ((uint8_t *) vezérlő, strlen (vezérlő)); vw_wait_tx (); // Várjon, amíg az egész üzenet eltűnik Serial.println ("STOP"); }}

5. lépés: Vevő kód

#befoglalni

int LA = 3;

int LB = 11; int RA = 5; int RB = 6; void setup () {Serial.begin (9600); vw_set_ptt_inverted (igaz); // Kötelező a DR3100 -hoz vw_set_rx_pin (12); vw_setup (4000); // Bit per sec pinMode (13, OUTPUT); pinMode (LA, OUTPUT); pinMode (LB, OUTPUT); pinMode (RA, OUTPUT); pinMode (RB, OUTPUT); vw_rx_start (); // Indítsa el a vevő PLL -jét a Serial.println futtatásával ("Minden OK");

}

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

if (vw_get_message (buf, & buflen)) // Nem blokkoló

{if ((buf [0] == 'X') && (buf [1] == '1')) {Serial.println ("BACKWARD"); hátrafelé(); késleltetés (100); //ki(); } else if ((buf [0] == 'X') && (buf [1] == '2')) {Serial.println ("FORWARD"); előre(); késleltetés (100); //ki(); }

egyébként ha ((buf [0] == 'Y') && (buf [1] == '1'))

{Serial.println ("LEFT"); bal(); késleltetés (100); //ki(); }

egyébként ha ((buf [0] == 'Y') && (buf [1] == '2'))

{Serial.println ("RIGHT"); jobb(); késleltetés (100); //ki(); } else if ((buf [0] == 'A') && (buf [1] == '1')) {Serial.println ("STOP"); ki(); késleltetés (100); }} else {Serial.println ("Nincs jel"); }}

érvénytelen előre ()

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

üres vissza ()

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

üres bal ()

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

érvénytelen jog ()

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

érvénytelen ()

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

6. lépés: INO fájlok

7. lépés: Könyvtárak összekapcsolása

Virtuális vezetékes könyvtár:

MPU6050_tockn Libraby:

Drótkönyvtár:

Ajánlott: