Sommario:

Auto wireless controllata dai gesti: 7 passaggi
Auto wireless controllata dai gesti: 7 passaggi

Video: Auto wireless controllata dai gesti: 7 passaggi

Video: Auto wireless controllata dai gesti: 7 passaggi
Video: GUARDARE VIDEO SU MERCEDES CLASSE A - Recensione CarPlay box wireless per tutte le auto 2024, Novembre
Anonim
Auto wireless controllata da gesti
Auto wireless controllata da gesti

In questo tutorial impareremo come realizzare un'auto controllata da gesti o qualsiasi robot. Questo progetto ha due parti, una parte è l'unità di trasmissione e l'altra parte è l'unità di ricezione. L'unità del trasmettitore è effettivamente montata su un guanto e l'unità del ricevitore è posizionata all'interno di un'auto o di un robot. Ora è il momento di fare una bella macchina. Andiamo!

Passaggio 1: attrezzature

Trasmettitore

1. Arduino nano.

2. Modulo sensore MPU6050.

3. Trasmettitore RF 433 MHz.

4. Qualsiasi tipo di batteria a 3 celle, 11,1 volt (qui ho usato una pila a bottone).

5. Vero-Board.

6. Guanti per le mani.

Unità di ricezione

1. Arduino Nano o Arduino Uno.

2. Modulo driver motore L298N.

3. Telaio del robot a 4 ruote inclusi i motori.

4. Ricevitore RF 433 RF.

5. Batteria Li-Po a 3 celle, 11,1 volt.

6. Vero-board.

Altri

1. Stick di colla e pistola.

2. Ponticelli.

3. Cacciaviti

4. Kit di saldatura.

eccetera.

Passaggio 2: file immagine del diagramma del circuito

File immagine schema circuitale
File immagine schema circuitale

Passaggio 3: file fritzing dello schema elettrico

Passaggio 4: codice trasmettitore

#includere

#includere

#includere

MPU6050 mpu6050 (cavo);

timer lungo = 0;

char *controllore;

configurazione nulla()

{ Serial.begin(9600); Wire.begin(); mpu6050.begin(); mpu6050.calcGyroOffsets(true); vw_set_ptt_inverted(true); // vw_set_tx_pin(10); vw_setup(4000); // velocità di trasferimento dati Kbps

}

ciclo vuoto()

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

mpu6050.update();

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

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

if (mpu6050.getAccAngleX()30) { controller="X2"; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Attendi che l'intero messaggio scompaia Serial.println("FORWARD"); } else if (mpu6050.getAccAngleY()>40) { controller="Y1"; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Attendi che l'intero messaggio scompaia Serial.println("LEFT"); } else if (mpu6050.getAccAngleY()<-40) { controller="Y2"; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Attendi che l'intero messaggio scompaia Serial.println("RIGHT"); } else if (mpu6050.getAccAngleX()-10 && mpu6050.getAccAngleY()-10) { controller="A1"; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Attendi che l'intero messaggio scompaia Serial.println("STOP"); } }

Passaggio 5: codice ricevitore

#includere

int LA = 3;

int LB = 11; int RA = 5; intRB = 6; void setup() { Serial.begin(9600); vw_set_ptt_inverted(true); // Richiesto per DR3100 vw_set_rx_pin(12); vw_setup(4000); // Bit per sec pinMode(13, OUTPUT); pinMode(LA, OUTPUT); pinMode(LB, USCITA); pinMode(RA, USCITA); pinMode(RB, USCITA); vw_rx_start(); // Avvia il PLL del ricevitore eseguendo Serial.println("All OK");

}

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

if (vw_get_message(buf, &buflen)) // Non bloccante

{ if((buf[0]=='X')&&(buf[1]=='1')) { Serial.println("BACKWARD"); indietro(); ritardo(100); //spento(); } else if((buf[0]=='X')&&(buf[1]=='2')) { Serial.println("AVANTI"); inoltrare(); ritardo(100); //spento(); }

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

{ Serial.println("SINISTRA"); sinistra(); ritardo(100); //spento(); }

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

{ Serial.println("DESTRA"); Giusto(); ritardo(100); //spento(); } else if((buf[0]=='A')&&(buf[1]=='1')) { Serial.println("STOP"); spento(); ritardo(100); } } else { Serial.println("Nessun segnale ricevuto"); } }

vuoto in avanti()

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

vuoto indietro()

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

vuoto a sinistra()

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

vuoto a destra()

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

annulla()

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

Passaggio 6: file INO

Passaggio 7: collegamento delle biblioteche

Libreria Virtual Wire:

MPU6050_tockn Libraby:

Libreria Wire:

Consigliato: