Elektronikada kompyuterli modellash
Modul turli sifatlarda ishlatilishi
Download 200.52 Kb. Pdf ko'rish
|
RGB led
Modul turli sifatlarda ishlatilishi mumkin - bu robotning yuragi (yoki
boshi), u qurilmaning asosi, shuningdek, mikrokontrollerlar bilan ishlashni o'zlashtirish uchun qulay konstruktor va boshqalar. Yuqorida biz allaqachon modulning kompyuterga ulanishini tekshirish uchun oddiy dasturlardan foydalanganmiz. Ba'zilar uchun ular juda oddiy va shuning uchun qiziq emasdek tuyulishi mumkin, ammo har qanday murakkab dasturlar biz allaqachon uchrashganlarga o'xshash oddiyroq qismlardan iborat. Keling, eng oddiy Blink LED dasturi bizga nima haqida aytib berishini ko'rib chiqaylik. int ledPin = 13; pinMode (ledPin, OUTPUT); digitalWrite (ledPin, HIGH); digitalWrite (ledPin, LOW); Birinchidan, LED nima ekanligini eslaylik.Aslida, bu oddiy diod bo'lib, uning dizayni tufayli oqim oldinga yo'nalishda oqganda, o'tish porlashni boshlaydi. Ya'ni, LEDning porlashi uchun u orqali oqim o'tishi kerak va shuning uchun LEDga kuchlanish qo'llanilishi kerak. Va oqim ruxsat etilgan qiymatdan oshmasligi uchun rezistorni LED bilan ketma-ket ulash kerak, bu oqim cheklovchi qarshilik deb ataladi (qarang A ilovasi, raqamli chiqish). Voltaj LEDga Arduino modulining asosini tashkil etuvchi mikrokontroller tomonidan qo'llaniladi.Mikrokontroller, bizning buyruqlarimizni bajaradigan protsessorga qo'shimcha ravishda, bir yoki bir nechta kiritish-chiqarish portlariga ega. Muayyan port qurilmasini hisobga olmagan holda, aytaylik - port pin chiqishi sifatida ishlaganda, uni ikkita holatga ega bo'lgan raqamli mikrosxemaning chiqishi sifatida ko'rish mumkin, yoqilgan va o'chirilgan (chiqishda kuchlanish mavjud, chiqishda kuchlanish yo'q). Lekin bir xil port pin ham kirish vazifasini bajarishi mumkin. Bunday holda, u, masalan, raqamli mikrosxemaning kirishi sifatida ifodalanishi mumkin - kirishga yuqori yoki past mantiqiy daraja qo'llaniladi (qarang A ilovasi, raqamli kirish). LEDni qanday miltillashtiramiz: Port chiqish pinini yoqing.Port chiqishini o'chirib qo'ying. Ammo protsessor juda tez ishlaydi.Miltillovchini sezishga vaqtimiz bo'lmaydi.Bu miltillashni sezish uchun biz pauza qo'shishimiz kerak. Ya'ni: Port chiqish pinini yoqing.1 soniya pauza qiling. Port chiqishini o'chirib qo'ying. 1 soniya pauza qiling. Bu bizning dasturimiz. Protsessor birinchi buyruqni o'qiydi va pinni yoqadi, LED yonadi. Keyin protsessor pauza qiladi va chiqishni o'chiradi, LED o'chadi. Ammo u faqat bir marta ko'z qisib qo'ydi. Jarayon yoki ko'rsatmalar to'plamining takrorlanishi dasturlashda tsikl deb ataladi.Har xil turdagi tsikllar qo'llaniladi. Belgilangan sonli marta ishlaydigan tsikl mavjud. Bu for tsikli.Ayrim shartlar bajarilgunga qadar davom etadigan tsikllar mavjud bo'lib, ular tsiklning til konstruktsiyasining bir qismidir.Va agar shart hech qachon bajarilmasa, u holda tsikl cheksiz ko'p marta bajariladi. Bu cheksiz halqa. Menimcha, mikrokontrollerlar yuqorida ko'rsatilgan dasturlar bilan ishlatilmaydi. Ya'ni, bir nechta buyruqlar bir marta bajariladi va boshqaruvchi endi ishlamaydi. Qoidaga ko'ra, u ta'minot kuchlanishi qo'llanilishi bilanoq uzluksiz ishlaydi.Bu shuni anglatadiki, mikrokontroller cheksiz tsiklda ishlashi kerak. Bu void loop () funksiyasi haqida gapiradi, loop - bu tsikl, yopiq tsikl. Tsiklni tugatish uchun hech qanday shart yo'q va shuning uchun uni tugatish uchun hech qanday shart yo'q. Bundan tashqari, biz Arduino moduliga chiqish (OUTPUT) yoki kirish (INPUT) uchun qaysi port pinini va qanday foydalanmoqchi ekanligimizni aytishimiz kerak. Ushbu maqsadga Arduino tili uchun majburiy bo'lgan void setup () funksiyasi, agar u ishlatilmasa ham va pinning ishlash rejimini o'rnatish uchun pinMode () buyrug'i xizmat qiladi. pinMode (ledPin, OUTPUT); Shuningdek, til konstruktsiyasi pin raqamini aniqlash uchun o'zgaruvchilardan foydalanadi: int ledPin = 13; O'zgaruvchilardan foydalanish qulay.13-pinni emas, balki 12-ni ishlatmaslikka qaror qilib, o'zgartirishni faqat bitta qatorda amalga oshirasiz. Bu, ayniqsa, to'g'ri keladi katta dasturlar O'zgaruvchi nomini xohlaganingizcha tanlashingiz mumkin, lekin qoida tariqasida, u faqat ramziy bo'lishi kerak va ko'pincha belgilar soni cheklangan. Agar o'zgaruvchi nomini noto'g'ri o'rnatgan bo'lsangiz, kompilyator sizni tuzatadi deb o'ylayman. DigitalWrite (ledPin, HIGH) funktsiyasi belgilangan pinni baland qilib qo'yadi, ya'ni pinni yoqadi. Va kechikish (1000), siz allaqachon tushunganingizdek, 1000 millisekund yoki 1 soniya pauza degan ma'noni anglatadi. Int, void kabi prefikslar nimani anglatishini tushunish qoladi.Har qanday qiymatlar, har qanday o'zgaruvchilar dastur buyruqlari kabi xotirada joylashgan.Ko'pincha 8 bitli raqamlar xotira katakchalariga yoziladi.Bu bayt.Lekin baytlar 0 dan 255 gacha bo'lgan raqamlardir.Katta raqamlar ikki yoki undan ko'p baytni, ya'ni ikki yoki undan ortiq xotira joyini talab qiladi.Protsessorga raqamni qanday topish kerakligini tushunish uchun har xil turdagi raqamlar turli xil nomlarga ega.Shunday qilib, bayt deb nomlangan raqam bitta katakni egallaydi, int (butun) kattaroqdir.Bundan tashqari, dasturlash tillarida ishlatiladigan funktsiyalar ham raqamlarni qaytaradi.Funksiya qaysi son turini qaytarishi kerakligini aniqlash uchun bu turdagi qaytaruvchi raqam funksiya oldiga yoziladi. Ammo ba'zi funktsiyalar raqamlarni qaytarmasligi mumkin, bunday funktsiyalardan oldin bekor belgilar mavjud (qarang A ilovasi, o'zgaruvchilar). Umid qilamanki, siz bularning barchasi haqida ilovada o'qiysiz.Keling, faqat tilning imkoniyatlaridan allaqachon bilgan narsamizdan foydalangan holda bir nechta oddiy tajribalar qilaylik.Birinchidan, xotirada juda ko'p joy egallagan int tipidagi o'zgaruvchini bayt - bir joy, bitta xotira katakchasi bilan almashtiramiz.Keling, nima olishimizni ko'rib chiqaylik. bayt ledPin = 13; pinMode (ledPin, OUTPUT); digitalWrite (ledPin, HIGH); digitalWrite (ledPin, LOW); Dasturni kompilyatsiya qilish va modulga yuklaganimizdan so'ng, dastur ishida hech qanday o'zgarishlarni sezmaymiz. Yaxshi.Keyin dasturni ishidagi o'zgarishlarni sezish uchun o'zgartiramiz. Buning uchun biz kechikish (1000) funksiyasidagi raqamni my_del nomli o‘zgaruvchiga almashtiramiz.Bu o'zgaruvchi butun son bo'lishi kerak, ya'ni int. int my_del = 5000; Har bir buyruqni nuqta-vergul bilan tugatishni unutmang. Dasturga o'zgartirishlar kiriting, uni kompilyatsiya qiling va modulga yuklang. Keyin o'zgaruvchini o'zgartiring va qayta kompilyatsiya qiling va yuklang: bayt my_del = 5000; Ishonchim komilki, farq sezilarli bo'ladi. Keling, pauza muddatini o'zgartirish bo'yicha yana bir tajriba qilaylik. Biz pauzalarning davomiyligini, aytaylik, besh marta qisqartirishimiz mumkin. Keling, 2 soniya pauza qilaylik va keyin besh marta kattalashtiramiz. Yana 2 soniya pauza qilaylik. Belgilangan ko'p marta bajariladigan sikl for tsikli deb ataladi va quyidagicha yoziladi: uchun (int i = 0; i<5; i++) for tsiklida bajariladigan narsa Loopni bajarish uchun unga o'zgaruvchi kerak, bizda i bor, o'zgaruvchini biz unga tayinlagan boshlang'ich qiymat bilan o'rnatish kerak. Keyin siklning tugash sharti kelib chiqadi, bizda i 5 dan kam bo'ladi. Va i ++ belgisi o'zgaruvchini birga oshirishning C tilidagi belgi uchun xarakterlidir. Jingalak qavslar for tsiklida bajarilishi mumkin bo'lgan buyruqlar to'plamini cheklaydi.Boshqa dasturlash tillarida funktsiya kodlari blokini ajratish uchun boshqa chegaralovchilar bo'lishi mumkin. Loop ichida biz avvalgidek qilamiz, bir nechta kichik o'zgarishlar bilan: uchun (int i = 0; i<5; i++) digitalWrite (ledPin, HIGH); digitalWrite (ledPin, LOW); my_del = mening_del - 100; Biz yuqorida pauza yozuvini o'zgartirish haqida gapirgan edik va pauzaning o'zini o'zgartirishga o'zgaruvchini 100 ga kamaytirish orqali erishiladi. Ikkinchi tsikl uchun biz bir xil kod blokini yozamiz, lekin pauza davomiyligi o'zgaruvchisini 100 ga oshiramiz. uchun (int i = 0; i<5; i++) digitalWrite (ledPin, HIGH); digitalWrite (ledPin, LOW); Siz pauzani kamaytirish va pauzani oshirishni yozish boshqacha ko'rinishini sezasiz. Bu ham C tilining o'ziga xos xususiyati.Aniqlik uchun faqat minus belgisini ortiqcha ga o'zgartirib, ushbu yozuvni takrorlash kerak edi. Shunday qilib, biz shunday dasturni olamiz: int ledPin = 13; int my_del = 1000; pinMode (ledPin, OUTPUT); uchun (int i = 0; i<5; i++) digitalWrite (ledPin, HIGH); digitalWrite (ledPin, LOW); uchun (int i = 0; i<5; i++) digitalWrite (ledPin, HIGH); digitalWrite (ledPin, LOW); Dasturimizning kodini Arduino dasturiga ko'chirib, kompilyatsiya qilamiz va modulga yuklaymiz. Pauzalar davomiyligining o'zgarishi sezilarli.Va bu yanada sezilarli bo'ladi, agar for tsikli, aytaylik, 8 marta bajarilsa, sinab ko'ring. Biz hozir qilgan ishimizni ham professional dasturchilar bajaradi - tayyor dasturga ega bo'lgan holda, uni o'z ehtiyojlaringiz yoki xohishingizga mos ravishda osongina o'zgartirishingiz mumkin.Shuning uchun ular o'zlarining barcha dasturlarini saqlaydilar.Buni sizga ham qilishni maslahat beraman. Tajribamizda nimani o'tkazib yubordik?Biz ishimiz haqida hech qanday izoh bermadik. Izoh qo'shish uchun ikkita "oldinga" chiziq yoki bitta, lekin yulduzcha bilan belgilang (A ilovasiga qarang). Men buni o'zingiz qilishingizni maslahat beraman, chunki bir muncha vaqt o'tgach, dasturga qaytganingizdan so'ng, dasturda u yoki bu joyda nima qilayotganingiz haqida tushuntirishlar mavjud bo'lsa, buni osonroq tushunasiz.Shuningdek, men har bir dastur bilan papkada uning tavsifini har qanday matn muharririda yaratilgan oddiy tilda saqlashni maslahat beraman. Eng oddiy dastur "LEDni miltillash" yana o'nlab tajribalar uchun xizmat qilishi mumkin (hatto bitta LED bilan ham). Menimcha, ishning bu qismi, siz yana nima qilish mumkinligi haqida o'ylash, eng qiziqarlisi. Agar dasturlash tilini tavsiflovchi ilovaga "dasturni boshqarish" bo'limiga murojaat qilsangiz, for tsiklini boshqa turdagi tsikl bilan almashtirishingiz mumkin.Va tsiklning boshqa turlari qanday ishlashini sinab ko'ring. Mikrokontroller protsessori, har qanday boshqa kabi, hisob-kitoblarni amalga oshirishi mumkin bo'lsa-da (buning uchun u ixtiro qilingan) va bu, masalan, qurilmalarda qo'llaniladi, ammo mikrokontroller uchun eng xarakterli operatsiya port chiqishini o'rnatish bo'ladi. tashqi hodisalarga reaktsiya sifatida yuqori yoki past holatga, ya'ni "LEDni miltillash". Mikrokontroller tashqi hodisalarni asosan kirish holatiga qarab bilib oladi.Portning pinlarini raqamli kirish sifatida sozlaganimizdan so'ng, biz uni kuzatishimiz mumkin. Agar kirishning boshlang'ich holati yuqori bo'lsa va hodisa kirishning past holatga o'tishini qo'zg'atsa, biz ushbu hodisaga javoban biror narsa qilishimiz mumkin. Eng oddiy misol - kiraverishdagi tugma.Tugma bosilmasa, kirish yuqori holatda bo'ladi. Agar biz tugmani bossak, u holda kirish past holatga o'tadi va biz chiqishda LEDni "yoqishimiz" mumkin. Keyingi safar tugma bosilganda, LEDni o'chirish mumkin. Bu yana oddiy dastur misoli. Hatto boshlang'ich uchun ham bu qiziq emas.Biroq, bu oddiy dastur juda foydali ilovalarni topishi mumkin. Men bitta misol keltiraman: tugmani bosgandan so'ng biz LEDni yoqmaymiz, balki miltillaymiz (ma'lum bir tarzda). Keling, infraqizil nurlanish bilan LEDni olaylik.Natijada biz boshqaruv panelini olamiz.Mana oddiy dastur. Dasturning turli versiyalarida misollar ro'yxatida farqlar mavjud. Lekin kiritish bilan ishlash uchun misol va dastur diagrammasi ("ilova" deb nomlangan misol bo'limi) mavjud bo'lgan ilovadagi til qo'llanmasiga murojaat qilishingiz mumkin. Men dasturni nusxalayman: int ledPin = 13; pinMode (ledPin, OUTPUT); pinMode (inPin, INPUT); agar (digitalRead (inPin) == YUQORI) digitalWrite (ledPin, HIGH); digitalWrite (ledPin, LOW); Ko'rib turganingizdek, biz eskisini o'zgartirish orqali butunlay yangi dasturga ega bo'lamiz.Endi LED faqat tugma bosilganda yonadi, u 2-pinga ulanadi. 2-pin 10 kŌ qarshilik orqali umumiy simga (tuproq, GND) ulanadi. Tugma bir uchida + 5V kuchlanish kuchlanishiga, ikkinchi uchida esa 2-pinga ulangan. Dasturda biz dasturni boshqarish bo'limidan if yangi til konstruktsiyasiga duch kelamiz. U shunday o'qiladi: agar shart (qavs ichiga olingan) bajarilsa, u holda jingalak qavslar ichiga olingan dastur bloki bajariladi. E'tibor bering, (digitalRead (inPin) == HIGH) shartida kiritishning yuqori holatga tengligi ikkita teng belgi yordamida amalga oshiriladi! Ko'pincha, shoshilinch ravishda, bu unutiladi va vaziyat noto'g'ri bo'lib chiqadi. Dasturni nusxalash va Arduino moduliga yuklash mumkin. Biroq, dasturning ishlashini sinab ko'rish uchun siz modul dizayniga ba'zi o'zgarishlar kiritishingiz kerak bo'ladi.Biroq, bu modul turiga bog'liq.Asl modulda kengaytirish platalariga ulanish uchun rozetkalar mavjud. Bunday holda, kerakli konnektor joylariga mos bir yadroli simlarni kiritishingiz mumkin.Mening modulimda kengaytirish platalariga ulanish uchun pichoq kontaktlari mavjud.Men mos ulagichni izlashim mumkin yoki arzonroq, DIP paketidagi IC uchun mos rozetkadan foydalanishim mumkin. Ikkinchi savol - dasturda qo'llaniladigan modulning xulosalarini qanday topish mumkin? Men saytdan olingan rasm buni tushunishga yordam beradi: http://robocraft.ru/. Guruch. 4.1. Kontroller va Arduino modulining pinlarining joylashuvi va maqsadi Mening CraftDuino modulimdagi barcha pinlar teglangan, shuning uchun kerakli pinni topish oson. Siz tugma va rezistorni ulashingiz va dasturning ishlashini tekshirishingiz mumkin. Aytgancha, yuqorida aytib o'tilgan RoboCraft saytida butun jarayon rasmlarda ko'rsatiladi (lekin dastur aynan bir xil xulosalardan foydalanmaydi!).Men sizga qarashni maslahat beraman. Ko'pgina mikrokontrollerlar qo'shimcha apparat qurilmalarini o'z ichiga oladi.Shunday qilib, Arduino moduli yig'ilgan Atmega168 seriyali ma'lumotlar almashinuvi yordamida boshqa qurilmalar bilan aloqa qilish uchun o'rnatilgan UART blokiga ega.Masalan, MAQOMOTI porti orqali kompyuter bilan.Yoki o'rnatilgan UART blokidan foydalangan holda boshqa mikrokontroller bilan.Analog-raqamli konvertor ham mavjud.Va impuls kengligi modulyatsiyasi drayveri. Ikkinchisidan foydalanish men RoboCraft veb-saytidan nusxa ko'chiradigan dastur bilan tasvirlangan.Lekin dasturni ilovadan ham olish mumkin.Va, ehtimol, bu Arduino misollarida. // BARRAGAN tomonidan o'chadigan LED int qiymati = 0; // kerakli qiymatni saqlash uchun o'zgaruvchi int ledpin = 9; // LED raqamli pin 9 ga ulangan // PinMode funksiyasini chaqirish shart emas uchun (qiymati = 0; qiymat<= 255; value+=5) // постепеннозажигаемсветодиод analogWrite (ledpin, qiymat); // chiqish qiymati (0 dan 255 gacha) kechikish (30); // kuting 🙂 uchun (qiymat = 255; qiymat> = 0; qiymat- = 5) // LEDni asta-sekin o'chiring analogWrite (ledpin, qiymat); Agar oldingi dasturda raqamli kiritishni o'qish uchun digitalRead (inPin) funksiyasi biz uchun yangi bo'lsa, bu dasturda analogWrite (ledpin, qiymat) funksiyasi biz uchun yangi, garchi bu funksiyaning parametrlari allaqachon tanish o'zgaruvchilar bo'lsa-da. Analog kiritishdan foydalanish, ADC (analog-raqamli konvertor) dan foydalanish haqida keyinroq gaplashamiz.Endi umumiy dasturlash masalalariga qaytaylik. Dasturlash hamma uchun mavjud bo'lgan narsa, lekin dasturlashni ham, istalgan dasturlash tilini ham o'zlashtirish uchun vaqt kerak bo'ladi. Bugungi kunda dasturlashni o'zlashtirishga yordam beradigan bir qancha dasturlar mavjud.Va ulardan biri bevosita Arduino moduli bilan bog'liq. U Arduino uchun Scratch yoki qisqacha S4A deb ataladi. Siz ushbu dasturni quyidagi manzilda topishingiz va yuklab olishingiz mumkin: http://seaside.citilab.eu/scratch/arduino. Dasturning nomi qanday tarjima qilinganini bilmayman, lekin "to start from nol" "noldan boshlash" deb tarjima qilinadi. S4A loyihasi saytida Windows va Linux uchun versiyalar mavjud, ammo so'nggi operatsion tizim uchun Debian tarqatish versiyasida o'rnatishga tayyor dastur mavjud. Uni boshqa Linux distributivlari bilan ishlatib bo'lmaydi, demoqchi emasman, lekin avval Windows-dagi Arduino moduli bilan dasturda qanday ishlashni ko'rib chiqamiz. Dasturni odatiy tarzda o'rnatganingizdan so'ng, til o'zgartirgich yordamida interfeysni rus tiliga sozlashingiz mumkin. |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling