Taula de continguts:

Cotxe sense fils controlat per gest: 7 passos
Cotxe sense fils controlat per gest: 7 passos

Vídeo: Cotxe sense fils controlat per gest: 7 passos

Vídeo: Cotxe sense fils controlat per gest: 7 passos
Vídeo: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, De novembre
Anonim
Cotxe sense fils controlat per gestos
Cotxe sense fils controlat per gestos

En aquest tutorial aprendrem, com fer un cotxe controlat per gestos o qualsevol robot. Aquest projecte té dues parts, una part és unitat transmissora i una altra part és unitat receptora. La unitat transmissora s’instal·la en guants de mà i la unitat receptora es col·loca dins d’un cotxe o qualsevol robot. Ara és hora de fer un bon cotxe. Som-hi!

Pas 1: equipaments

Unitat transmissora

1. Arduino Nano.

2. Mòdul de sensor MPU6050.

3. Transmissor RF 433 MHz.

4. Qualsevol tipus de bateria de 3 cel·les, 11,1 volts (aquí he utilitzat cel·la de moneda).

5. Vero-Junta.

6. Guants de mà.

Unitat receptora

1. Arduino Nano o Arduino Uno.

2. Mòdul de controlador de motor L298N.

3. Bastidor de robot de 4 rodes amb motors.

4. Receptor RF 433 RF.

5. Bateria Li-po de 3 cel·les, 11,1 volts.

6. Vero-tauler.

Altres

1. Enganxar pals i pistola.

2. Cables de pont.

3. Tornavisos

4. Kit de soldadura.

etc.

Pas 2: fitxer d'imatges del diagrama de circuits

Fitxer d’imatges del diagrama de circuits
Fitxer d’imatges del diagrama de circuits

Pas 3: fitxer Fritzing del diagrama de circuits

Pas 4: Codi del transmissor

#incloure

#incloure

#incloure

MPU6050 mpu6050 (Cable);

temporitzador llarg = 0;

controlador char *;

configuració nul·la ()

{Serial.begin (9600); Wire.begin (); mpu6050.begin (); mpu6050.calcGyroOffsets (true); vw_set_ptt_inverted (cert); // vw_set_tx_pin (10); vw_setup (4000); // velocitat de transferència de dades a Kbps

}

bucle buit ()

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

mpu6050.update ();

if (millis () - temporitzador> 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 "); temporitzador = millis (); }

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

if (mpu6050.getAccAngleX () 30) {controlador = "X2"; vw_send ((uint8_t *) controlador, strlen (controlador)); vw_wait_tx (); // Espereu fins que desaparegui tot el missatge Serial.println ("FORWARD"); } else if (mpu6050.getAccAngleY ()> 40) {controlador = "Y1"; vw_send ((uint8_t *) controlador, strlen (controlador)); vw_wait_tx (); // Espereu fins que desaparegui tot el missatge Serial.println ("ESQUERRA"); } else if (mpu6050.getAccAngleY () <- 40) {controlador = "Y2"; vw_send ((uint8_t *) controlador, strlen (controlador)); vw_wait_tx (); // Espereu fins que desaparegui tot el missatge Serial.println ("DRETA"); } else if (mpu6050.getAccAngleX () - 10 && mpu6050.getAccAngleY () - 10) {controlador = "A1"; vw_send ((uint8_t *) controlador, strlen (controlador)); vw_wait_tx (); // Espereu fins que desaparegui tot el missatge Serial.println ("STOP"); }}

Pas 5: Codi del receptor

#incloure

int LA = 3;

int LB = 11; int RA = 5; int RB = 6; configuració nul·la () {Serial.begin (9600); vw_set_ptt_inverted (cert); // Obligatori per a DR3100 vw_set_rx_pin (12); vw_setup (4000); // Bits per segon pinMode (13, OUTPUT); pinMode (LA, OUTPUT); pinMode (LB, OUTPUT); pinMode (RA, OUTPUT); pinMode (RB, OUTPUT); vw_rx_start (); // Inicieu el PLL del receptor amb Serial.println ("Tot bé");

}

bucle buit () {uint8_t buf [VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message (buf, & buflen)) // No bloqueja

{if ((buf [0] == 'X') && (buf [1] == '1')) {Serial.println ("BACKWARD"); cap enrere (); retard (100); // off (); } else if ((buf [0] == 'X') && (buf [1] == '2')) {Serial.println ("FORWARD"); endavant (); retard (100); // off (); }

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

{Serial.println ("ESQUERRA"); left (); retard (100); // off (); }

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

{Serial.println ("DRETA"); dret(); retard (100); // off (); } else if ((buf [0] == 'A') && (buf [1] == '1'))) {Serial.println ("STOP"); off (); retard (100); }} else {Serial.println ("No s'ha rebut cap senyal"); }}

void forward ()

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

buit cap enrere ()

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

buit a l'esquerra ()

{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); }

anul·lar ()

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

Pas 6: fitxers INO

Pas 7: enllaç de biblioteques

Biblioteca de cables virtual:

MPU6050_tockn Libraby:

Biblioteca de cables:

Recomanat: