Turinys:

Gestais valdomas belaidis automobilis: 7 žingsniai
Gestais valdomas belaidis automobilis: 7 žingsniai

Video: Gestais valdomas belaidis automobilis: 7 žingsniai

Video: Gestais valdomas belaidis automobilis: 7 žingsniai
Video: Naujojo 2023 Audi Q5 Virtuali Apžiūra 2024, Lapkritis
Anonim
Gestais valdomas belaidis automobilis
Gestais valdomas belaidis automobilis

Šioje pamokoje mes sužinosime, kaip padaryti gestais valdomą automobilį ar bet kurį robotą. Šis projektas susideda iš dviejų dalių, viena dalis yra siųstuvas, o kita - imtuvas. Siųstuvas iš tikrųjų yra sumontuotas ant rankinių pirštinių, o imtuvas - automobilyje ar bet kokiame robote. Dabar atėjo laikas sukurti gražų automobilį. Eime!

1 žingsnis: Įranga

Siųstuvo blokas

1. „Arduino Nano“.

2. MPU6050 jutiklio modulis.

3. RF 433 MHz siųstuvas.

4. Bet kokio tipo 3 elementų, 11,1 volto baterija (čia aš naudoju monetos elementą).

5. „Vero-Board“.

6. Rankų pirštinės.

Imtuvo blokas

1. „Arduino Nano“arba „Arduino Uno“.

2. L298N variklio vairuotojo modulis.

3. 4 ratų roboto rėmas, įskaitant variklius.

4. RF 433 RF imtuvas.

5. 3 elementų, 11,1 volto Li-po baterija.

6. Vero-lenta.

Kiti

1. Klijų lazdelės ir pistoletas.

2. Jumper laidai.

3. Atsuktuvai

4. Litavimo rinkinys.

ir kt.

2 žingsnis: grandinės diagramos vaizdo failas

Grandinės schemos vaizdo failas
Grandinės schemos vaizdo failas

3 žingsnis: grandinės schemos fritzavimo failas

4 žingsnis: siųstuvo kodas

#įtraukti

#įtraukti

#įtraukti

MPU6050 mpu6050 (viela);

ilgas laikmatis = 0;

char *valdiklis;

negaliojanti sąranka ()

{Serial.begin (9600); Wire.begin (); mpu6050.begin (); mpu6050.calcGyroOffsets (tiesa); vw_set_ptt_inverted (tiesa); // vw_set_tx_pin (10); vw_setup (4000); // duomenų perdavimo greitis Kbps

}

tuštumos kilpa ()

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

mpu6050.update ();

jei (milis () - laikmatis> 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 "); laikmatis = milis (); }

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

if (mpu6050.getAccAngleX () 30) {controller = "X2"; vw_send ((uint8_t *) valdiklis, strlen (valdiklis)); vw_wait_tx (); // Palaukite, kol dings visas pranešimas Serial.println ("FORWARD"); } else if (mpu6050.getAccAngleY ()> 40) {controller = "Y1"; vw_send ((uint8_t *) valdiklis, strlen (valdiklis)); vw_wait_tx (); // Palaukite, kol dings visas pranešimas Serial.println ("LEFT"); } else if (mpu6050.getAccAngleY () <-40) {controller = "Y2"; vw_send ((uint8_t *) valdiklis, strlen (valdiklis)); vw_wait_tx (); // Palaukite, kol dings visas pranešimas Serial.println ("RIGHT"); } else if (mpu6050.getAccAngleX ()-10 && mpu6050.getAccAngleY ()-10) {controller = "A1"; vw_send ((uint8_t *) valdiklis, strlen (valdiklis)); vw_wait_tx (); // Palaukite, kol dings visas pranešimas Serial.println ("STOP"); }}

5 veiksmas: imtuvo kodas

#įtraukti

int LA = 3;

int LB = 11; int RA = 5; int RB = 6; void setup () {Serial.begin (9600); vw_set_ptt_inverted (tiesa); // Reikalingas DR3100 vw_set_rx_pin (12); vw_setup (4000); // Bitai per sekundę pinMode (13, OUTPUT); pinMode (LA, OUTPUT); pinMode (LB, OUTPUT); pinMode (RA, OUTPUT); pinMode (RB, OUTPUT); vw_rx_start (); // Paleiskite imtuvo PLL, kuriame veikia Serial.println ("Viskas gerai");

}

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

if (vw_get_message (buf, & buflen)) // Neblokuojantis

{if ((buf [0] == 'X') && (buf [1] == '1')) {Serial.println ("BACKWARD"); atgal (); vėlavimas (100); // išjungtas (); } else if ((buf [0] == 'X') && (buf [1] == '2')) {Serial.println ("FORWARD"); Persiųsti(); vėlavimas (100); // išjungtas (); }

kitaip jei ((buf [0] == 'Y') && (buf [1] == '1'))

{Serial.println („LEFT“); kairėje (); vėlavimas (100); // išjungtas (); }

kitaip jei ((buf [0] == 'Y') && (buf [1] == '2'))

{Serial.println („RIGHT“); dešinė (); vėlavimas (100); // išjungtas (); } else if ((buf [0] == 'A') && (buf [1] == '1')) {Serial.println ("STOP"); išjungtas (); vėlavimas (100); }} else {Serial.println ("Negautas signalas"); }}

negalioja pirmyn ()

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

negalioja atgal ()

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

tuščia liko ()

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

negaliojanti teisė ()

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

negalioja ()

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

6 žingsnis: INO failai

7 žingsnis: bibliotekų nuoroda

„Virtual Wire“biblioteka:

MPU6050_tockn Libraby:

Laidų biblioteka:

Rekomenduojamas: