Auto wireless controllata dai gesti: 7 passaggi
Auto wireless controllata dai gesti: 7 passaggi
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: