Inhaltsverzeichnis:

Gestengesteuertes drahtloses Auto - Gunook
Gestengesteuertes drahtloses Auto - Gunook

Video: Gestengesteuertes drahtloses Auto - Gunook

Video: Gestengesteuertes drahtloses Auto - Gunook
Video: This is How i Control a RC Drift Car by Gesture Sensing 2024, November
Anonim
Gestengesteuertes drahtloses Auto
Gestengesteuertes drahtloses Auto

In diesem Tutorial werden wir lernen, wie man ein gestengesteuertes Auto oder einen Roboter baut. Dieses Projekt hat zwei Teile, ein Teil ist die Sendereinheit und der andere Teil ist die Empfängereinheit. Die Sendereinheit wird tatsächlich an Handschuhen montiert und die Empfängereinheit wird in einem Auto oder einem Roboter platziert. Jetzt ist es an der Zeit, ein schönes Auto zu bauen. Lass uns gehen!

Schritt 1: Ausrüstungen

Sendeeinheit

1. Arduino-Nano.

2. MPU6050 Sensormodul.

3. HF-Sender mit 433 MHz.

4. Jede Art von 3-Zellen, 11,1-Volt-Batterie (Hier habe ich eine Knopfzelle verwendet).

5. Vero-Board.

6. Handschuhe.

Empfängereinheit

1. Arduino Nano oder Arduino Uno.

2. L298N-Motortreibermodul.

3. 4-Rad-Roboterrahmen einschließlich Motoren.

4. RF 433 RF-Empfänger.

5. 3 Zellen, 11,1 Volt Li-Po-Akku.

6. Vero-Board.

Andere

1. Klebestifte und Pistole.

2. Jumperdrähte.

3. Schraubendreher

4. Lötkit.

usw.

Schritt 2: Bilddatei des Stromlaufplans

Bilddatei des Stromlaufplans
Bilddatei des Stromlaufplans

Schritt 3: Fritzing-Datei des Schaltplans

Schritt 4: Sendercode

#enthalten

#enthalten

#enthalten

MPU6050 mpu6050 (Draht);

langer Timer = 0;

char *Controller;

Void-Setup ()

{ Serial.begin (9600); Wire.begin(); mpu6050.begin(); mpu6050.calcGyroOffsets(true); vw_set_ptt_inverted (wahr); // vw_set_tx_pin(10); vw_setup(4000); // Geschwindigkeit der Datenübertragung Kbps

}

Leere Schleife ()

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

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"); Timer = Millis(); }

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

if (mpu6050.getAccAngleX()30) {controller="X2"; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Warten Sie, bis die gesamte Nachricht verschwunden ist Serial.println ("FORWARD"); aufrechtzuerhalten. Sonst if (mpu6050.getAccAngleY()>40) {controller="Y1"; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Warten Sie, bis die gesamte Nachricht verschwunden ist Serial.println ("LEFT"); aufrechtzuerhalten. Sonst if (mpu6050.getAccAngleY()<-40) { controller="Y2"; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Warten Sie, bis die gesamte Nachricht verschwunden ist Serial.println ("RIGHT"); } else if (mpu6050.getAccAngleX()-10 && mpu6050.getAccAngleY()-10) { controller="A1"; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Warten Sie, bis die gesamte Nachricht verschwunden ist Serial.println ("STOP"); } }

Schritt 5: Empfängercode

#enthalten

int LA = 3;

intLB = 11; intRA = 5; intRB = 6; Void setup () { Serial.begin (9600); vw_set_ptt_inverted (wahr); // Erforderlich für DR3100 vw_set_rx_pin (12); vw_setup(4000); // Bits pro Sekunde pinMode (13, OUTPUT); pinMode (LA, AUSGANG); pinMode (LB, AUSGANG); pinMode (RA, AUSGANG); pinMode (RB, AUSGANG); vw_rx_start(); // Starten Sie die Empfänger-PLL mit Serial.println ("Alles OK");

}

Void Schleife () { uint8_t buf [VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) // Nicht blockierend

{if ((buf[0]=='X')&&(buf[1]=='1')) {Serial.println("BACKWARD"); rückwärts(); Verzögerung (100); //aus(); aufrechtzuerhalten. Sonst if ((buf[0]=='X')&&(buf[1]=='2')) {Serial.println("FORWARD"); nach vorne(); Verzögerung (100); //aus(); }

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

{Serial.println("LINKS"); links(); Verzögerung (100); //aus(); }

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

{Serial.println ("RECHTS"); rechts(); Verzögerung (100); //aus(); aufrechtzuerhalten. Sonst if ((buf[0]=='A')&&(buf[1]=='1')) {Serial.println("STOP"); aus(); Verzögerung (100); } } else {Serial.println ("Kein Signal empfangen"); } }

nicht weiterleiten()

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

Void rückwärts ()

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

Leere links ()

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

ungültig rechts ()

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

nichtig aus ()

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

Schritt 6: INO-Dateien

Schritt 7: Verknüpfung von Bibliotheken

Virtual Wire Library:

MPU6050_tockn Libraby:

Drahtbibliothek:

Empfohlen: