- Linijos sekėjo roboto samprata
- Būtini komponentai
- Grandinės schema
- Linijos sekėjo roboto programavimas „Atmega16“
Čia mes sukursime dar vieną projektą su „ AVR Atmega16“ mikrovaldikliu. Jei dar nesinaudojote AVR mikrovaldikliais, galite kreiptis į ankstesnius AVR projektus ir pamokas.
Roboto sukūrimas visada yra jaudulys visiems elektronikos mėgėjams. Šį jaudulį galima padidinti, jei robotas gali automatiškai atlikti kai kuriuos veiksmus be jokių išorinių nurodymų. Vienas iš dažniausiai pradedančiųjų elektronikos robotų yra „ Line Follower“ robotas. Kaip rodo pavadinimas, robotas laikysis ant paviršiaus nubrėžtos linijos. Linija nebūtinai turi būti tiesi. Be to, linijos gali būti bet kokios spalvos.
Anksčiau mes kūrėme „Line Follower“ robotų projektus naudodami skirtingus valdiklius:
- Linijos sekėjo robotas, naudojant 8051 mikrovaldiklį
- Linijos sekėjo robotas, naudojant PIC mikrovaldiklį
- Linijos sekėjo robotas, naudojant „Arduino“
- Linijos sekėjo robotas, naudojant Raspberry Pi
- Linijos sekėjo robotas naudojant „MSP430 Launchpad“
Šiandien mes naudosime AVR mikrovaldiklį, kad sukurtume „Line follower“ robotą.
Dažniausiai IR jutikliai naudojami linijoms aptikti. IR jutikliai gerai aptinka baltus ar juodus paviršius. Nors galite naudoti kitus sudėtingus jutiklius, kurie galės aptikti visas spalvas ir pagaminti robotą, kuris gali sekti visas spalvų linijas. Robotas turėtų sugebėti aptikti liniją, net jei kelias pakeistas keičiant kampą, ir toliau laikytis linijos. Be to, jis turėtų sustoti visur, kur sustojimo zona yra linijoje.
Robotai, sekantys sekančius robotus, dabar plačiai naudojami gamybos pramonėje, medicinoje, buityje ir prekių sandėlyje. Robotai neapsiriboja tik šiomis programomis ir gali išplėsti jų taikymą daugelyje būsimų programų.
Linijos sekėjo roboto samprata
IR jutikliai yra pagrindinis šio projekto dalyvis. IR jutikliai dedami priekinėje roboto pusėje, kad būtų galima nubrėžti juodą liniją ir paviršių. Robotas dedamas tarp linijos ir IR jutiklių pagalba robotas seka liniją. IR jutikliai grįžta atgal į mikrovaldiklį ir, naudodamiesi IR skaitymu, mikrovaldiklis perkelia variklius į kairę ar dešinę pusę ir vėl nukreipia robotą į kelią.
Linijos sekimo robotas sugeba stebėti liniją IR jutiklio pagalba. Šis jutiklis turi IR siųstuvą ir IR imtuvą. IR siųstuvas (IR šviesos diodas) perduoda šviesą, o imtuvas (fotodiodas) laukia, kol perduodama šviesa grįš atgal. IR šviesa grįš atgal, tik jei ją atspindės paviršius. Visi paviršiai neatspindi IR šviesos, juos visiškai atspindi tik baltos spalvos paviršius, o juodos spalvos paviršius juos visiškai pastebės, kaip parodyta toliau pateiktame paveikslėlyje. Sužinokite daugiau apie IR jutiklio modulį čia.
Dabar naudosime du infraraudonųjų spindulių jutiklius, kad patikrintume, ar robotas eina su linija, ir dviem varikliais, kad ištaisytume robotą, jei jis pasislenka iš kelio. Šiems varikliams reikalinga didelė srovė ir jie turėtų būti dviejų krypčių; taigi mes naudojame variklio tvarkyklės modulį, pvz., L293D. Mums taip pat reikės mikrovaldiklio, tokio kaip „ ATmega16“, kad jis nurodytų variklius pagal IR jutiklio reikšmes. Toliau parodyta supaprastinta to paties bloko schema.
Šie du IR jutikliai bus išdėstyti po vieną iš abiejų linijos pusių. Jei nė vienas jutiklis neaptinka juodos linijos, AVR mikrovaldiklis nurodo varikliams judėti į priekį, kaip parodyta žemiau
Jei kairysis jutiklis atsiduria juodoje linijoje, mikrovaldiklis robotui nurodo pasukti į kairę, sukdamas tik dešinįjį ratą.
Jei dešinysis jutiklis yra juodoje linijoje, mikrovaldiklis robotui nurodo pasukti į dešinę, sukdamas kairįjį ratą.
Jei abu jutikliai atsiduria juodoje linijoje, robotas sustoja.
Tokiu būdu robotas galės sekti liniją neišlipęs iš trasos. Dabar pažiūrėkime, kaip atrodo grandinė ir kodas.
Būtini komponentai
- DC pavarų varikliai (2 vnt.)
- IR jutiklio modulis (2 vnt.)
- L293D modulis
- Belaidis maitinimo šaltinis (pvz., Akumuliatorius, maitinimo bankas)
- Robotų kalės
- „Atmega16“ mikrovaldiklio IC
- 16Mhz kristalinis osciliatorius
- Du 100nF kondensatoriai
- Du 22pF kondensatoriai
- Paspauskite mygtuką
- Šuolių laidai
- Bandomoji Lenta
- USBASP v2.0 (programuoti „Atmega16“)
Grandinės schema
Prijunkite visus komponentus, kaip parodyta žemiau grandinės schemoje
Linijos sekėjo roboto programavimas „Atmega16“
Čia „Atmega16“ užprogramuojamas naudojant USBASP ir „Atmel Studio7.0“. Jei nežinote, kaip „Atmega16“ galima užprogramuoti naudojant USBASP, apsilankykite nuorodoje. Visa programa pateikiama projekto pabaigoje, tiesiog įkelkite programą į „Atmega16“ naudodami „JTAG“ programuotoją ir „Atmel Studio 7.0“, kaip paaiškinta ankstesnėje pamokoje.
Mes stengėmės, kad kodas būtų kuo trumpesnis ir paprastesnis. Taigi šiame kode naudojame makrokomandas ir specialiųjų funkcijų registrus.
if (bit_is_clear (PINA , leftSen)) { // patikrinkite, ar kairysis jutiklis išjungtas
Šis teiginys patikrina, ar PA0, kur prijungtas kairysis jutiklis, yra LOW arba HIGH.
Jei norite sužinoti daugiau apie šį teiginį ir kitas makrokomandas, eikite į šią nuorodą
Yra keturios sąlygos, kurių laikomės skaitydami per IR jutiklius. IR jutikliai pavadinti pagal jų išdėstymą roboto priekyje. Kairysis IR yra kairysis jutiklis, o dešinysis IR yra dešinysis jutiklis. Šios sąlygos nulems roboto judėjimą.
Mes parašėme kodą pagal aukščiau nurodytas sąlygas. Vienintelis pokytis yra tas, kad abiem varikliams vairuoti naudojame tik du L293D įvesties kaiščius.
Visas kodas su demonstraciniu vaizdo įrašu pateikiamas žemiau.