Orodha ya maudhui:

Rahisi na Smart Smart Robotic kutumia Arduino !!!: Hatua 5 (na Picha)
Rahisi na Smart Smart Robotic kutumia Arduino !!!: Hatua 5 (na Picha)

Video: Rahisi na Smart Smart Robotic kutumia Arduino !!!: Hatua 5 (na Picha)

Video: Rahisi na Smart Smart Robotic kutumia Arduino !!!: Hatua 5 (na Picha)
Video: Infrared Obstacle Avoidance module for Arduino with code 2024, Novemba
Anonim
Image
Image
Vitu Utakavyohitaji:
Vitu Utakavyohitaji:

Katika hii kufundisha nitakuwa nikifanya mkono rahisi wa roboti. Hiyo itadhibitiwa kwa kutumia mkono mkuu. Mkono kukumbuka hatua na kucheza katika mlolongo. Wazo sio mpya nilipata Wazo kutoka kwa "mkono mdogo wa roboti - na Stoerpeak" Nilitaka kuifanya hii kwa muda mrefu, lakini wakati huo nilikuwa kabisa noob na sikuwa na ujuzi juu ya programu. Sasa mwishowe ninajenga moja, Kuiweka rahisi, ya bei rahisi na kushiriki nanyi nyote.

Basi lets kuanza….

Hatua ya 1: Vitu utakavyohitaji: -

Vitu Utakavyohitaji:
Vitu Utakavyohitaji:
Vitu Utakavyohitaji:
Vitu Utakavyohitaji:

Hapa kuna orodha ya vitu utakavyohitaji: -

1. Servo motors x 5 Unganisha kwa US: - https://amzn.to/2OxbSH7Link kwa Uropa: -

2. Potentiometers x 5 (nimetumia 100k.) Kiungo kwa US: - https://amzn.to/2ROjhDMLink kwa Uropa: -

3. Arduino UNO. (Unaweza kutumia Arduino Nano pia) Kiungo cha Amerika: - https://amzn.to/2DBbENWLink kwa Uropa: -

4. Bodi ya mkate. (Ninashauri hii kit) Kiungo kwa Marekani: - https://amzn.to/2Dy86w4Wasiliana na Ulaya: -

5. Betri. (hiari, ninatumia adapta ya 5v)

6. Kadibodi / Mbao / Bodi ya jua / akriliki ni nini kinachopatikana au rahisi kupatikana.

Na utahitaji pia Arduino IDE iliyosanikishwa.

Hatua ya 2: Kutengeneza Silaha: -

Kutengeneza Jeshi:
Kutengeneza Jeshi:
Kutengeneza Jeshi:
Kutengeneza Jeshi:

Hapa nimetumia vijiti vya Popsicle kutengeneza mkono. Unaweza kutumia nyenzo zozote ambazo hupatikana kwako. Na unaweza kujaribu miundo tofauti ya mitambo kutengeneza mkono bora zaidi. muundo wangu sio thabiti sana.

Nilitumia mkanda wa pande mbili kushika servos kwenye fimbo ya Popsicle na kuzifunga kwa kutumia vis.

Kwa mkono wa Mwalimu niliunganisha potentiometers kwa vijiti vya popsicle na nikatengeneza mkono.

Akimaanisha picha zitakupa Wazo bora.

Nimeweka kila kitu kwenye bodi ya turubai ya ukubwa wa A4 inayotumiwa kama msingi.

Hatua ya 3: Kufanya Uunganisho: -

Kufanya Uunganisho:
Kufanya Uunganisho:
Kufanya Uunganisho:
Kufanya Uunganisho:
Kufanya Uunganisho:
Kufanya Uunganisho:

Katika hatua hii tutafanya viunganisho vyote muhimu, Rejea picha zilizo hapo juu.

  • Kwanza unganisha servos zote sambamba na usambazaji wa umeme (waya mwekundu kwenda na waya mweusi au mweusi kwa Gnd)
  • Ifuatayo unganisha waya za ishara yaani waya wa Njano au wa Chungwa kwa pini ya PWM ya arduino.
  • Sasa unganisha potentiometers na + 5v na Gnd ya arduino kwa usawa.
  • Unganisha kituo cha katikati na pini ya Analog ya ardunio.

Hapa Pini za Dijiti 3, 5, 6, 9 & 10 hutumiwa kudhibiti servos

Pini za Analog A0 hadi A4 hutumiwa kwa Ingizo kutoka kwa Potentiometers.

Servo iliyounganishwa na pini 3 itadhibitiwa na potentiometer iliyounganishwa na A0

Servo iliyounganishwa na kubandika 5 itadhibitiwa na sufuria kwenye A1, na kadhalika….

Kumbuka: - Ingawa Servos haijawezeshwa na arduino, Hakikisha unganisha Gnd ya servos na arduino au sivyo mkono ambao haufanyi kazi.

Hatua ya 4: Kuandika: -

Kuandika:
Kuandika:

Mantiki ya nambari hii ni rahisi sana maadili ya potentiometers huhifadhiwa katika safu rekodi hizo zinapitishwa kwa kutumia kitanzi na servos hufanya hatua kulingana na maadili. Unaweza kuangalia mafunzo haya niliyotumia kwa kumbukumbu "Arduino Potentiometer Servo Control & Memory"

Nambari: - (Faili inayoweza kupakuliwa iliyoambatanishwa.)

Kwanza tutatangaza anuwai zote muhimu ulimwenguni ili tuweze kuzitumia wakati wote wa programu. Hakuna ufafanuzi maalum unahitajika kwa hii

# pamoja

// Vitu vya Servo Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Vitu vya Potentiometer int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Kubadilika kuhifadhi Nafasi ya Servo int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Kubadilika kuhifadhi maadili ya msimamo uliopita Int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Kubadilika kuhifadhi maadili ya nafasi ya sasa ndani ya Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // Duka la pembe int Servo_Namba; // Maduka hakuna ya Uhifadhi wa servo int [600]; // Safu ya kuhifadhi data (Kuongeza ukubwa wa safu kutatumia kumbukumbu zaidi) int Index = 0; // Faharisi ya safu huanza kutoka nafasi ya 0 data char = 0; // kutofautisha kuhifadhi data kutoka kwa uingizaji wa serial.

Sasa tutaandika kazi ya usanidi, ambapo tunaweka pini na kazi zao. Hii ndio kazi kuu inayofanya kwanza

kuanzisha batili ()

{Serial.begin (9600); // Kwa mawasiliano ya serial kati ya arduino na IDE. // Vitu vya Servo vimeambatanishwa na pini za PWM. Ambatisha Servo_0 (3); Ambatisha Servo_1 (5); Ambatisha Servo_2 (6); Ambatisha Servo_3 (9); Unganisha Servo_4 (10); // Servos zimewekwa kwenye nafasi 100 wakati wa kuanzisha. Andika Servo_0 (100); Andika (100). Andika Servo_2 (100); Andika Servo_3 (100); Andika Servo_4 (100); Serial.println ("Bonyeza 'R' Kurekodi na 'P' kucheza"); }

Sasa inabidi tusome maadili ya potentiometers kutumia pini za Kuingiza Analog na uziweke ramani kudhibiti servos. Kwa hili tutafafanua kazi na tutaipe jina la Map_Pot ();, unaweza kutaja kitu chochote unachotaka ni kazi iliyofafanuliwa na mtumiaji

Utupu Map_Pot ()

{/ * Servos huzunguka kwa digrii 180 lakini kuitumia kwa mipaka sio wazo nzuri kwani inafanya buzz ya servos kuendelea ambayo inakera kwa hivyo tunazuia servo kusonga kati ya: 1-179 * / Pot_0 = analogRead (A0); // Soma pembejeo kutoka kwenye sufuria na uihifadhi kwenye Pot_0 inayobadilika. Servo_0_Pos = ramani (Pot_0, 0, 1023, 1, 179); // Ramani servos kulingana na thamani kati ya 0 hadi 1023 Servo_0.write (Servo_0_Pos); // Hamisha servo kwenye nafasi hiyo. Pot_1 = AnalogSoma (A1); Servo_1_Pos = ramani (Pot_1, 0, 1023, 1, 179); Andika Servo_1 (Servo_1_Pos); Pot_2 = AnalogSoma (A2); Servo_2_Pos = ramani (Pot_2, 0, 1023, 1, 179); Andika Servo_2 (Servo_2_Pos); Pot_3 = AnalogSoma (A3); Servo_3_Pos = ramani (Pot_3, 0, 1023, 1, 179); Andika Servo_3 (Servo_3_Pos); Pot_4 = AnalogSoma (A4); Servo_4_Pos = ramani (Pot_4, 0, 1023, 1, 179); Andika Servo_4 (Servo_4_Pos); }

Sasa tutaandika kazi ya kitanzi:

kitanzi batili ()

{Ramani_Pot (); // Wito wa kazi kusoma maadili ya sufuria wakati (Serial.available ()> 0) {data = Serial.read (); ikiwa (data == 'R') Serial.println ("Kurekodi kunasogeza…"); ikiwa (data == 'P') Serial.println ("Inacheza Moves Recorded…"); } ikiwa (data == 'R') // Ikiwa 'R' imeingizwa, anza kurekodi. {// Hifadhi dhamana katika Prev_0_Pos inayobadilika = Servo_0_Pos; Prev_1_Pos = Servo_1_Pos; Prev_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Prev_4_Pos = Servo_4_Pos; Ramani_Pot (); // Kazi ya Ramani ilikumbuka kwa kulinganisha ikiwa (abs (Prev_0_Pos == Servo_0_Pos)) // thamani kamili inapatikana kwa kulinganisha {Servo_0.write (Servo_0_Pos); // Ikiwa maadili yanayolingana na servo yamewekwa tena ikiwa (Current_0_Pos! = Servo_0_Pos) // Ikiwa maadili hayalingani na {Storage [Index] = Servo_0_Pos + 0; // Thamani imeongezwa kwa safu ya Index ++; // Thamani ya kiashiria imeongezwa na 1} Sasa_0_Pos = Servo_0_Pos; } / * Vivyo hivyo kulinganisha thamani hufanywa kwa servos zote, + 100 huongezwa kila kwa kuingia kama thamani tofauti. * / if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); ikiwa (Current_1_Pos! = Servo_1_Pos) {Storage [Index] = Servo_1_Pos + 100; Kiashiria ++; } Sasa_1_Pos = Servo_1_Pos; } ikiwa (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); ikiwa (Sasa_2_Pos! = Servo_2_Pos) {Uhifadhi [Index] = Servo_2_Pos + 200; Kiashiria ++; } Sasa_2_Pos = Servo_2_Pos; } ikiwa (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); ikiwa (Sasa_3_Pos! = Servo_3_Pos) {Uhifadhi [Index] = Servo_3_Pos + 300; Kiashiria ++; } Sasa_3_Pos = Servo_3_Pos; } ikiwa (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); ikiwa (Sasa_4_Pos! = Servo_4_Pos) {Uhifadhi [Index] = Servo_4_Pos + 400; Kiashiria ++; } Sasa_4_Pos = Servo_4_Pos; } / * Thamani zimechapishwa kwenye mfuatiliaji wa serial, '\ t' ni ya kuonyesha maadili katika muundo wa tabular * / Serial.print (Servo_0_Pos); Serial.print ("\ t"); Printa ya serial (Servo_1_Pos); Serial.print ("\ t"); Printa ya serial (Servo_2_Pos); Serial.print ("\ t"); Printa ya serial (Servo_3_Pos); Serial.print ("\ t"); Serial.println (Servo_4_Pos); Serial.print ("Index ="); Serial.println (Kielelezo); kuchelewesha (50); } ikiwa (data == 'P') // IF 'P' imeingizwa, Anza kucheza hatua zilizorekodiwa. {for (int i = 0; i <Index; i ++) // Vuka safu kwa kutumia kitanzi {Servo_Number = Storage / 100; // Inapata idadi ya servo Servo_Position = Uhifadhi % 100; // Inapata nafasi ya kubadili servo (Servo_Number) {kesi 0: Servo_0.write (Servo_Position); kuvunja; kesi 1: Servo_1.write (Servo_Position); kuvunja; kesi 2: Servo_2.write (Servo_Position); kuvunja; kesi 3: Servo_3.write (Servo_Position); kuvunja; kesi 4: Servo_4.write (Servo_Position); kuvunja; } kuchelewa (50); }}}

Mara tu msimbo uko tayari, Sasa pakia kwenye ubao wa arduino

Mkono wa Smart uko tayari kufanya kazi. Kazi bado si laini kama ile iliyotengenezwa na Stoerpeak.

Ikiwa unaweza kufanya nambari iwe bora au uwe na maoni yoyote kwangu tafadhali nijulishe katika sehemu ya maoni.

Kwa kuwa imesemwa, Wacha tuendelee kupima….

Hatua ya 5: Upimaji: -

Baada ya kupakia nambari kwenye bodi kwa mafanikio, Fungua 'Serial Monitor' unaweza kuipata katika chaguo la Zana. Wakati mfuatiliaji wa serial unapoanza arduino itaweka upya. Sasa unaweza kudhibiti mkono wa roboti ukitumia mkono mkuu. Lakini hakuna kinachorekodiwa.

Kuanza kurekodi, Ingiza 'R' katika kifuatilia sasa unaweza kutekeleza hatua unazotaka kurekodi.

Baada ya hatua kufanywa lazima uingize 'P' ili kucheza hatua zilizorekodiwa. Servos itaendelea kufanya harakati ilimradi bodi haijawekwa upya.

Ilipendekeza: