Spisu treści:

Bezprzewodowy samochód sterowany gestami: 7 kroków
Bezprzewodowy samochód sterowany gestami: 7 kroków

Wideo: Bezprzewodowy samochód sterowany gestami: 7 kroków

Wideo: Bezprzewodowy samochód sterowany gestami: 7 kroków
Wideo: #policja ❤️ #kia #randka 2024, Listopad
Anonim
Bezprzewodowy samochód sterowany gestami
Bezprzewodowy samochód sterowany gestami

W tym samouczku nauczymy się, jak zrobić samochód sterowany gestami lub dowolnego robota. Ten projekt ma dwie części, jedna część to jednostka nadajnika, a druga to jednostka odbiornika. Jednostka nadawcza jest w rzeczywistości zamontowana na rękawicach, a jednostka odbiorcza jest umieszczona wewnątrz samochodu lub dowolnego robota. Teraz nadszedł czas na zrobienie ładnego samochodu. Chodźmy!

Krok 1: Sprzęt

Jednostka nadajnika

1. Arduino Nano.

2. Moduł czujnika MPU6050.

3. Nadajnik RF 433 MHz.

4. Dowolny typ 3-ogniwowej baterii 11,1 V (tutaj użyłem baterii pastylkowej).

5. Płyta Vero.

6. Rękawiczki ręczne.

Jednostka odbiorcza

1. Arduino Nano lub Arduino Uno.

2. Moduł sterownika silnika L298N.

3. 4-kołowa rama robota wraz z silnikami.

4. Odbiornik RF 433.

5. 3-ogniwowa bateria Li-po 11,1 V.

6. Płyta Vero.

Inni

1. Klej w sztyfcie i pistolet.

2. Przewody połączeniowe.

3. Śrubokręty

4. Zestaw lutowniczy.

itp.

Krok 2: Plik obrazu schematu obwodu

Plik obrazu schematu obwodu
Plik obrazu schematu obwodu

Krok 3: Fritzing File schematu obwodu

Krok 4: Kod nadajnika

#włączać

#włączać

#włączać

MPU6050 mpu6050 (drut);

długi zegar = 0;

char *kontroler;

pusta konfiguracja()

{ Szeregowy.początek(9600); Wire.początek(); mpu6050.begin(); mpu6050.calcGyroOffsets (prawda); vw_set_ptt_inverted (prawda); // vw_set_tx_pin(10); vw_setup(4000);// szybkość przesyłania danych Kbps

}

pusta pętla()

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

mpu6050.aktualizacja();

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"); zegar = mili(); }

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

if (mpu6050.getAccAngleX()30) { kontroler="X2"; vw_send((uint8_t *)kontroler, strlen(kontroler)); vw_wait_tx(); // Poczekaj, aż cała wiadomość zniknie Serial.println("FORWARD"); } else if (mpu6050.getAccAngleY()>40) { kontroler="Y1"; vw_send((uint8_t *)kontroler, strlen(kontroler)); vw_wait_tx(); // Poczekaj, aż cała wiadomość zniknie Serial.println("LEWO"); } else if (mpu6050.getAccAngleY()<-40) { controller="Y2"; vw_send((uint8_t *)kontroler, strlen(kontroler)); vw_wait_tx(); // Poczekaj, aż cała wiadomość zniknie Serial.println("PRAWO"); } else if (mpu6050.getAccAngleX()-10 && mpu6050.getAccAngleY()-10) { controller="A1"; vw_send((uint8_t *)kontroler, strlen(kontroler)); vw_wait_tx(); // Poczekaj, aż cała wiadomość zniknie Serial.println("STOP"); } }

Krok 5: Kod odbiorcy

#włączać

wewn LA = 3;

int LB = 11; int RA = 5; int RB = 6; void setup() { Serial.begin(9600); vw_set_ptt_inverted (prawda); // Wymagane dla DR3100 vw_set_rx_pin(12); vw_setup(4000); // Bity na sekundę pinMode(13, OUTPUT); pinMode(LA, WYJŚCIE); pinMode(LB, WYJŚCIE); pinMode(RA, WYJŚCIE); pinMode(RB, WYJŚCIE); vw_rx_start(); // Uruchom odbiornik PLL z programem Serial.println("Wszystko OK");

}

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

if (vw_get_message(buf, &buflen)) // Bez blokowania

{ if((buf[0]=='X')&&(buf[1]=='1')) { Serial.println("WSTECZ"); do tyłu(); opóźnienie (100); //wyłączony(); } else if((buf[0]=='X')&&(buf[1]=='2')) { Serial.println("DALEJ"); Naprzód(); opóźnienie (100); //wyłączony(); }

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

{ Serial.println("LEWO"); lewo(); opóźnienie (100); //wyłączony(); }

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

{ Serial.println("PRAWY"); Prawidłowy(); opóźnienie (100); //wyłączony(); } else if((buf[0]=='A')&&(buf[1]=='1')) { Serial.println("STOP"); wyłączony(); opóźnienie (100); } } else { Serial.println("Nie odebrano sygnału"); } }

nieważne do przodu()

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

nieważne wstecz ()

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

nieważne w lewo ()

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

nieważne prawo ()

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

unieważnienie ()

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

Krok 6: Pliki INO

Krok 7: Link do bibliotek

Wirtualna biblioteka przewodów:

MPU6050_tockn Biblioteka:

Biblioteka przewodów:

Zalecana: