Mündəricat:
Video: Arduino və Ayar Təkərləri: 9 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Bu yazıda Arduino sistemlərimizdə təkər/baş dönmə açarlarının istifadəsini araşdırırıq. PMD Way -dən qaynaqlanan bəzi nümunələr.
Addım 1:
Təcrübəsizlər üçün hər bir keçid bir şaquli seqmentdir və müxtəlif ölçüləri yaratmaq üçün bir -birinə bağlana bilər. Sıfırdan doqquzadək rəqəmləri seçmək üçün düymələrdən istifadə edə bilərsiniz. Artım/azalma düymələri yerinə baş barmağınızla hərəkət edə biləcəyiniz təkərli alternativlər var.
Zərif istifadəçi interfeysi günlərindən əvvəl bu açarlar rəqəmsal məlumatların daxil edilməsi üçün olduqca populyar üsullar idi. Ancaq bu gün hələ də mövcuddur, buna görə necə işlədiyini və onlardan necə istifadə edəcəyimizi görək. Keçidin dəyəri ikili kodlu onlu və ya düz ondalık vasitəsi ilə verilir. Açarın arxasını BCD şəklində düşünün.
Addım 2:
Solda ortaqlarımız var, sonra 1, 2, 4 və 8 üçün kontaktlar var. Ümumi olaraq kiçik bir gərginlik (5V deyək) tətbiq etsəniz, açarın dəyəri kontaktların dəyərlərini əlavə etməklə ölçülə bilər. YÜKSƏK dövlət. Məsələn, 3 seçsəniz - 1 və 2 kontaktları ümumi gərginlikdə olacaq. Sıfır ilə doqquz arasındakı dəyərlər cədvəldə belə göstərilə bilər.
Addım 3:
İndiyə qədər bir açarın dəyərini oxumağın asan olacağını başa düşməlisiniz - və haqlısınız. 5V -ni Arduino lövhələrimizin ümumi girişinə, çıxışlarını rəqəmsal giriş pinlərinə bağlaya bilərik, sonra hər bir çıxışın dəyərini təyin etmək üçün digitalRead () istifadə edə bilərik. Eskizdə BCD dəyərini ondalık rəqəmə çevirmək üçün bəzi əsas riyaziyyatdan istifadə edirik. Buna görə də indi bunu edək.
Avadanlıq baxımından bir şeyi də nəzərə almalıyıq-təkər açarı elektriklə normal olaraq açıq olan dörd düymə kimi davranır. Bu o deməkdir ki, yüksək və aşağı vəziyyətlər arasında aydın bir fərqə sahib olmaq üçün açılan rezistorlardan istifadə etməliyik. Beləliklə, bir keçid üçün sxem yuxarıda göstərildiyi kimidir.
Addım 4:
1, 2, 4 və 8 etiketli çıxışları (məsələn) 8, 9, 10 və 11 rəqəmsal pinlərə bağlamaq sadə bir işdir. 5V -ni 'C' nöqtəsinə, GND -ni isə … GND -ə bağlayın. Sonra, girişləri oxuya bilən və BCD çıxışını onluğa çevirə bilən bir eskizə sahib olmalıyıq. Aşağıdakı eskizi nəzərdən keçirin:
/ * SAA1064 sayısal ekran qalxanından istifadə edir https://www.gravitech.us/7segmentshield.html SAA1064 qalxanınız yoxdursa serial monitordan istifadə edir */#include "Wire.h" #define q1 8 #define q2 9 # q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // i2c avtobusuna qoşul (master üçün isteğe bağlı) gecikmə (500); pinMode (q1, GİRİŞ); // thumbwheel '1' pinMode (q2, INPUT); // thumbwheel '2' pinMode (q4, INPUT); // thumbwheel '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // "Count" tam ədədini Gravitech SAA1064 qalxanına göndərir {const int searchup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Minlərlə, Yüzlərlə, Onlarla, Baza; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Minlərlə = Say/1000; Yüzlər = (Say- (Minlərlə*1000))/100; Onlarla = (Say-((Min*1000)+(Yüz*100)))/10; Baza = Say-((Minlərlə*1000)+(Yüzlərlə*100)+(Onlarla*10)); Wire.write ([Base] axtarın); Wire.write (axtarış [Onlarla]); Wire.write (axtarış [Yüzlərlə]); Wire.write (axtarış [Minlərlə]); Wire.endTransmission (); gecikmə (10); } int readSwitch () {int total = 0; if (digitalRead (q1) == YÜKSEK) {cəmi+= 1; } if (digitalRead (q2) == YÜKSEK) {cəmi+= 2; } if (digitalRead (q4) == YÜKSEK) {cəmi+= 4; } if (digitalRead (q8) == YÜKSEK) {cəmi+= 8; } ümumi qaytarma; } boşluq döngəsi () {dispSAA1064 (readSwitch ()); // keçid dəyərini Serial.println (readSwitch ()) ekranını göstərmək üçün göndərir; // keçid dəyərini serial monitor qutusuna göndərir}
ReadSwitch () funksiyası əsasdır. Hər bir keçid çıxışının ədədi təsvirini əlavə edərək açarın dəyərini hesablayır və nəticəni cəmi qaytarır. Bu nümunə üçün NXP SAA1064 tərəfindən idarə olunan ədədi ekran qalxanı istifadə etdik.
Addım 5:
ReadSwitch () funksiyası əsasdır. Hər bir keçid çıxışının ədədi təsvirini əlavə edərək açarın dəyərini hesablayır və nəticəni cəmi qaytarır. Bu nümunə üçün NXP SAA1064 tərəfindən idarə olunan ədədi bir ekran qalxanı istifadə etdik.
Biriniz yoxdursa, bu yaxşıdır - nəticələr də serial monitoruna göndərilir. İndi bunu videoda necə işlədiyini görək.
Addım 6:
Tamam o qədər də görünmür, amma rəqəmsal girişə ehtiyacınız varsa, çox fiziki yer saxlayır və dəqiq bir giriş üsulu təklif edir.
Deməli orda var. Əslində bunları bir layihədə istifadə edərdinizmi? Bir rəqəm üçün - bəli. Dörd üçün? Yəqin ki, yox-bəlkə də 12 rəqəmli klaviatura istifadə etmək daha asan olardı. Bir fikir var…
Addım 7: Birdən çox açar
İndi dörd rəqəmi necə oxuyacağımızı araşdıracağıq və bu müddətdə bütün rəqəmsal pinləri israf etməyəcəyik. Bunun əvəzinə, I2C avtobusu ilə əlaqə quran Microchip MCP23017 16 bitlik port genişləndiricisini istifadə edəcəyik. Hər bir keçidin vəziyyətini oxumaq üçün istifadə edə biləcəyimiz on altı rəqəmsal giriş/çıxış pininə malikdir.
İrəli getməzdən əvvəl, bu məqalə üçün I2C avtobusu (birinci və ikinci hissələr) və MCP23017 üçün bəzi ehtimal olunan biliklərin lazım olduğunu unutmayın. Əvvəlcə hardware əlaqələrini, sonra Arduino eskizini təsvir edəcəyik. Tək keçid nümunəsi üçün istifadə olunan sxemləri xatırlayın.
Şalter birbaşa Arduino -ya qoşulduqda, açarın dəyərini təyin etmək üçün hər pinin vəziyyətini oxuyuruq. Bunu MCP23017 istifadə edərək daha geniş miqyasda edəcəyik. Bağlama diaqramını nəzərdən keçirin:
Addım 8:
Dörd açarın bağlanmasına imkan verən 16 sancağımız var. Hər bir keçid üçün ortaqlar hələ də 5V-ə qoşulur və hər bir keçid kontaktında hələ də GND-ə qədər 10k aşağıya doğru müqavimət var. Sonra 1 rəqəminin 1, 2, 4, 8 sancağını GPBA0 ~ 3 -ə bağlayırıq; iki rəqəmin 1, 2, 4, 8 -dən GPA4 ~ 7 -ə qədər; üç rəqəmi 1, 2, 4, 8 GPB0 ~ 3 və dörd rəqəmi 1, 2, 4, 8 üçün GPB4 ~ 7.
İndi açarları necə oxuyaq? Bütün bu tellər çətin olduğunu düşünməyinizə səbəb ola bilər, ancaq eskiz olduqca sadədir. GPBA və B-nin dəyərini oxuduğumuzda, hər bank üçün bir bayt qaytarılır, ən önəmli bit əvvəlcə. Hər dörd bit, uyğun gələn I/O pinlərinə bağlı olan açarın parametrinə uyğun olacaq. Məsələn, həm IO banklar üçün məlumat istəsək və açarlar 1 2 3 4 olaraq təyin olunarsa - A bankı 0010 0001, B bankı isə 0100 0011 qaytarar.
Hər biti ayrı bir dəyişənə ayırmaq üçün bəzi bitshift əməliyyatlarından istifadə edirik - bu da bizi hər bir rəqəmin dəyərini tərk edir. Məsələn, dördüncü açarın dəyərini ayırmaq üçün bitləri B bankı 4 -dən köçürürük. Bu, üç açarın dəyərini itələyir və soldakı boş bitlər sıfıra çevrilir.
Üçüncü keçidin dəyərini ayırmaq üçün, bit olaraq & birləşməsindən istifadə edirik ki, bu da üç keçid dəyərini tərk edir. Şəkil ikili keçid dəyərlərinin parçalanmasını göstərir - xam GPIOA və B bayt dəyərlərini, sonra hər bir rəqəmin ikili dəyərini və ondalık dəyərini göstərir.
Addım 9:
Beləliklə, nümayiş eskizinə baxaq:
/ * Nümunə 40a-MCP23017 vasitəsilə dörd təkərli BCD keçidini oxuyun, SAA1064/4-rəqəmli 7-seqmentli LED displeydə göstərin */// MCP23017 pinləri 15 ~ 17-dən GND-ə qədər, I2C avtobus ünvanı 0x20 // SAA1064 I2C avtobus ünvanı 0x38 # "Wire.h" daxil edin // LED rəqəm tərifləri üçün int rəqəmləri [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; bayt GPIOA, GPIOB, dig1, dig2, dig3, dig4; etibarsız initSAA1064 () {// quraşdırma 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA çıxışı, rəqəm boşluğu yoxdur Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // I2C avtobusunun işə salınması initSAA1064 (); } void loop () {// A Wire.beginTransmission bankının girişlərini oxuyun (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // bu bayt 1 və 2 rəqəmləri üçün keçid məlumatlarını ehtiva edir // bankın Wire.beginTransmission (0x20) girişlərini oxuyun; Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // bu bayt 3 və 4 rəqəmləri üçün keçid məlumatlarını ehtiva edir // hər bir keçid üçün çıxarış dəyəri // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // bütün GPIO və fərdi keçid məlumatlarını serial monitoruna göndərin // ayıklama və maraq naminə Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("rəqəm 1 ="); Serial.println (dig1, BIN); Serial.print ("rəqəm 2 ="); Serial.println (dig2, BIN); Serial.print ("rəqəm 3 ="); Serial.println (dig3, BIN); Serial.print ("rəqəm 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("rəqəm 1 ="); Serial.println (dig1, DEC); Serial.print ("rəqəm 2 ="); Serial.println (dig2, DEC); Serial.print ("rəqəm 3 ="); Serial.println (dig3, DEC); Serial.print ("rəqəm 4 ="); Serial.println (dig4, DEC); Serial.println (); // SAA1064 Wire.beginTransmission (0x38) vasitəsilə LED ekranına keçid dəyərini göndərin; Wire.write (1); Wire.write (rəqəmlər [dig4]); Wire.write (rəqəmlər [dig3]); Wire.write (rəqəmlər [dig2]); Wire.write (rəqəmlər [dig1]); Wire.endTransmission (); gecikmə (10); gecikmə (1000); }
İnanmayanlar üçün… video nümayiş.
Deməli orda var. Arduino rəqəmsal I/O sancaqlarını qoruyan I2C avtobusu üzərində bir əvəzinə dörd rəqəm. Səkkiz MCP23017 istifadə edərək bir anda 32 rəqəmi oxuya bilərsiniz. Bunu etməklə əylənin!
Dünyada pulsuz çatdırılma ilə PMD Way -dən müxtəlif ölçülərdə həm BCD, həm də ondalık açarları sifariş edə bilərsiniz.
Bu yazı pmdway.com tərəfindən sizə gətirildi - istehsalçılar və elektronika həvəskarları üçün hər şey, bütün dünyada pulsuz çatdırılma.
Tövsiyə:
Oğlumun 2 -ci Doğum Günü üçün RC Power Təkərləri!: 13 Addım (Şəkillərlə)
Oğlumun 2-ci Doğum Günü üçün RC Power Təkərləri!: Təxminən 10 yaşımdan bəri RC-ify Power Wheel ilə bağlı bir xəyalım var. Bir neçə ay əvvəl bir dostum mənə çeynəmək kimi istifadə olunan köhnə bir döyülmə oyuncağı verdi. Bir uşaqlıq xəyalını gerçəkləşdirmək qərarına gəldim və bu işi tamamilə yenidən qurdum
Arduino RC Avtomobil Təkərləri: 9 addım (şəkillərlə birlikdə)
Arduino RC Avtomobil Təkərləri: Bu, Arduino -nun avtomatik olaraq getdiyi istiqamətə nəzarət edərək təkər rolunu oynaya bilməsi üçün ucuz bir RCcar götürdüyüm Arduino RC avtomobil Təkərinin təlimatçısıdır. Arduino RC avtomobil Təkərləri, prou mənim ilk orijinal Arduino dizaynımdır
Karton və Kraft Kağızdan RC Avtomobil Təkərləri Necə Hazırlanır: 9 Addım (Şəkillərlə birlikdə)
Karton və Kraft Kağızdan RC Avtomobil Təkərləri Necə Hazırlanır: RC təkərləri bütün RC avtomobilləri üçün vacib hissələrdir. RC təkərlərinin müxtəlif kateqoriyalar və növləri var və təkər seçimini düzgün etmək bu avtomobillərlə məşğul olarkən ən vacib amillərdən biridir. RC avtomobillərini DIY etməyə başladığımda ən vacib
LED Lit Skateboard Təkərləri: 6 addım
LED Lit Skeytbord Təkərləri: Mən buna dövrə lövhəm deyirəm. Velosipedimdəki kimi köhnə bir quyruq bağladım və skeytbordum üçün yenidən təyin etdim. Çox uğurlu çıxdı
BÖYÜK RC MONSTER KAMYONU - Golf Arabası Təkərləri - Moped Motoru - Uzaqdan idarə olunan: 10 addım
BÖYÜK RC MONSTER KAMYONU - Golf Arabası Təkərləri - Moped Motoru - Uzaqdan idarə olunan: Böyük RC Canavar Yük maşını qurmaq üçün bir DIY var. Bir qaynaqçıya ehtiyacınız olacaq. Son bir neçə onillikdə uzaqdan idarə olunan yük maşınlarının uzun bir yol keçdiyini görməkdən zövq aldım. Hətta onlardan bir neçəsinə sahib olmuşam