Satura rādītājs:
- 1. darbība:
- 2. darbība:
- 3. darbība:
- 4. solis:
- 5. darbība:
- 6. darbība
- 7. solis: vairāki slēdži
- 8. darbība
- 9. darbība
Video: Arduino un īkšķa slēdži: 9 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:55
Šajā rakstā mēs aplūkojam stūres rata/īkšķa slēdžu izmantošanu mūsu Arduino sistēmās. Šeit ir daži piemēri, kas iegūti no PMD Way.
1. darbība:
Nezinātājiem katrs slēdzis ir viens vertikāls segments, un tos var savienot kopā, veidojot dažādus izmērus. Varat izmantot pogas, lai atlasītu ciparus no nulles līdz deviņiem. Ir pieejamas alternatīvas, kurām ir ritenis, kuru var pārvietot ar īkšķi, nevis palielināt/samazināt.
Pirms iedomātā lietotāja interfeisa laikiem šie slēdži bija diezgan populāras metodes ciparu datu ievades iestatīšanai. Tomēr tie joprojām ir pieejami arī šodien, tāpēc apskatīsim, kā tie darbojas un kā mēs tos varam izmantot. Slēdža vērtība ir pieejama, izmantojot bināri kodētu decimāldaļu vai taisnu decimāldaļu. Apsveriet slēdža aizmuguri BCD formā.
2. darbība:
Mums ir kopīgs kreisajā pusē, tad kontakti 1, 2, 4 un 8. Ja kopējam pievienojat nelielu spriegumu (teiksim 5 V), slēdža vērtību var izmērīt, pievienojot kontaktos esošās vērtības HIGH stāvoklis. Piemēram, ja izvēlaties 3 - kontakti 1 un 2 būs pie kopējā sprieguma. Tabulā var attēlot vērtības no nulles līdz deviņām.
3. darbība:
Tagad jums vajadzētu saprast, ka būtu viegli nolasīt slēdža vērtību - un jums ir taisnība. Mēs varam savienot 5V ar kopējo, izejas uz mūsu Arduino plates digitālās ieejas tapām, pēc tam izmantot digitalRead (), lai noteiktu katras izejas vērtību. Skicē mēs izmantojam dažus matemātikas pamatus, lai BCD vērtību pārvērstu par decimāldaļu. Tāpēc darīsim to tagad.
No aparatūras viedokļa mums jāņem vērā vēl viena lieta-stūres riteņa slēdzis darbojas elektriski kā četras parasti atvērtas spiedpogas. Tas nozīmē, ka mums ir jāizmanto nolaižamie rezistori, lai būtu skaidra atšķirība starp augstu un zemu stāvokli. Tātad viena slēdža shēma ir tāda, kā parādīts iepriekš.
4. solis:
Tagad ir vienkārši savienot izejas ar apzīmējumu 1, 2, 4 un 8 ar (piemēram) digitālajām tapām 8, 9, 10 un 11. Pievienojiet 5V slēdža “C” punktam, bet GND -… GND. Tālāk mums ir jābūt skicei, kas var nolasīt ieejas un pārvērst BCD izvadi decimālā. Apsveriet šādu skici:
/ * Izmanto SAA1064 ciparu displeja vairogu https://www.gravitech.us/7segmentshield.html Izmanto seriālo monitoru, ja jums nav vairoga SAA1064 */#iekļauj "Wire.h" #define q1 8 #define q2 9 # definēt q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // pievienoties i2c kopnei (adrese nav obligāta galvenajam) kavēšanās (500); pinMode (q1, INPUT); // īkšķa ritenis '1' pinMode (q2, INPUT); // īkšķa ritenis '2' pinMode (q4, INPUT); // īkšķa ritenis '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // nosūta veselu skaitli 'Count' uz Gravitech SAA1064 vairogu {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Tūkstošiem, simtiem, desmitiem, bāzes; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Tūkstošiem = skaits/1000; Simtiem = (Skaits- (Tūkstošiem*1000))/100; Desmitiem = (skaits-((tūkstošiem*1000)+(simtiem*100)))/10; Bāze = skaits-((tūkstošiem*1000)+(simtiem*100)+(desmitiem*10)); Wire.write (lookup [Base]); Wire.write (uzmeklēšana [desmitiem]); Wire.write (uzmeklēt [Simtiem]); Wire.write (uzmeklēt [Tūkstošiem]); Wire.endTransmission (); kavēšanās (10); } int readSwitch () {int kopā = 0; ja (digitalRead (q1) == HIGH) {kopā+= 1; } ja (digitalRead (q2) == HIGH) {kopā+= 2; } ja (digitalRead (q4) == HIGH) {kopā+= 4; } ja (digitalRead (q8) == HIGH) {kopā+= 8; } atgriešanās kopā; } void loop () {dispSAA1064 (readSwitch ()); // nosūta slēdža vērtību, lai parādītu vairogu Serial.println (readSwitch ()); // nosūta slēdža vērtību seriālā monitora lodziņam}
Funkcija readSwitch () ir atslēga. Tas aprēķina slēdža vērtību, pievienojot katras slēdža izejas skaitlisko attēlojumu, un tā rezultātā atgriež kopsummu. Šajā piemērā mēs izmantojām ciparu displeja vairogu, ko kontrolē NXP SAA1064.
5. darbība:
Funkcija readSwitch () ir atslēga. Tas aprēķina slēdža vērtību, pievienojot katras slēdža izejas skaitlisko attēlojumu, un tā rezultātā atgriež kopsummu. Šajā piemērā mēs izmantojām ciparu displeja vairogu, ko kontrolē NXP SAA1064.
Ja jums tāda nav, tas ir labi - rezultāti tiek nosūtīti arī uz seriālo monitoru. Tagad redzēsim to darbībā videoklipā.
6. darbība
Labi, tas neizskatās daudz, bet, ja jums ir nepieciešama ciparu ievadīšana, tas ietaupa daudz fiziskās vietas un piedāvā precīzu ievades metodi.
Tātad, jums tas ir. Vai jūs tiešām tos izmantotu projektā? Par vienu ciparu - jā. Par četriem? Droši vien nē-varbūt būtu vieglāk izmantot 12 ciparu tastatūru. Ir ideja…
7. solis: vairāki slēdži
Tagad mēs pārbaudīsim, kā nolasīt četrus ciparus, un šajā procesā netērēsim visas šīs digitālās tapas. Tā vietā mēs izmantosim Microchip MCP23017 16 bitu portu paplašinātāju IC, kas sazinās, izmantojot I2C kopni. Tam ir sešpadsmit digitālās ievades/izvades tapas, kuras mēs varam izmantot, lai nolasītu katra slēdža statusu.
Pirms virzīties uz priekšu, lūdzu, ņemiet vērā, ka šim rakstam ir nepieciešamas zināmas zināšanas - I2C kopne (pirmā un otrā daļa) un MCP23017. Vispirms mēs aprakstīsim aparatūras savienojumus un pēc tam Arduino skici. Atgādiniet shematisko shēmu, kas izmantota viena slēdža piemērā.
Kad slēdzis bija tieši savienots ar Arduino, mēs nolasījām katras tapas statusu, lai noteiktu slēdža vērtību. Mēs to darīsim vēlreiz, plašākā mērogā, izmantojot MCP23017. Apsveriet pinout diagrammu:
8. darbība
Mums ir 16 tapas, kas ļauj savienot četrus slēdžus. Katra slēdža kopīgie joprojām ir savienoti ar 5V, un katram slēdža kontaktam joprojām ir 10k nolaižamais rezistors GND. Tad mēs pievienojam 1, 2, 4, 8 viena ciparu tapas ar GPBA0 ~ 3; ciparu divi 1, 2, 4, 8 līdz GPA4 ~ 7; trīsciparu skaitļi 1, 2, 4, 8 līdz GPB0 ~ 3 un ceturtie cipari 1, 2, 4, 8 līdz GPB4 ~ 7.
Tagad kā mēs lasām slēdžus? Visi šie vadi var likt jums domāt, ka tas ir grūti, taču skice ir pavisam vienkārša. Izlasot GPBA un B vērtību, katrai bankai tiek atgriezts viens baits, vispirms ievadot visnozīmīgāko bitu. Katrs četrs bits atbilst slēdža iestatījumam, kas savienots ar atbilstošajām I/O tapām. Piemēram, ja mēs pieprasām datus par abām IO bankām un slēdži ir iestatīti uz 1 2 3 4 - banka A atgriezīs 0010 0001, bet banka B - 0100 0011.
Mēs izmantojam dažas bitu nobīdes darbības, lai atdalītu katru četru bitu atsevišķā mainīgajā - kas atstāj mums katra cipara vērtību. Piemēram, lai atdalītu ceturtā slēdža vērtību, mēs pārvietojam bitus no bankas B >> 4. Tas izspiež slēdža trīs vērtību, un tukšie biti kreisajā pusē kļūst par nulli.
Lai atdalītu trīs slēdža vērtību, mēs izmantojam saliktu bitu un -, kas atstāj trešā slēdža vērtību. Attēlā ir parādīts bināro slēdžu vērtību sadalījums - tas parāda neapstrādātas GPIOA un B baitu vērtības, pēc tam katra cipara bināro vērtību un decimālo vērtību.
9. darbība
Tātad, aplūkosim demonstrācijas skici:
/ * 40a piemērs-nolasiet četrus riteņa BCD slēdžus, izmantojot MCP23017, displeju uz SAA1064/4 ciparu 7 segmentu LED displeju */// MCP23017 piespraudes 15 ~ 17 līdz GND, I2C kopnes adrese ir 0x20 // SAA1064 I2C kopnes adrese 0x38 # iekļaut "Wire.h" // LED ciparu definīcijām int ciparos [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; baits GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA izeja, bez cipariem tukšs Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // palaišana I2C kopne initSAA1064 (); } void loop () {// lasīt bankas A Wire ievades datus.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // šajā baitā ir slēdža dati par cipariem 1 un 2 // nolasiet bankas B Wire ievadi.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // šajā baitā ir slēdža dati par cipariem 3 un 4 // ekstrakta vērtība katram slēdzim // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // nosūtīt visus GPIO un atsevišķus slēdža datus uz seriālo monitoru // atkļūdošanas un interešu labad Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Sērijas.println (); Serial.print ("cipars 1 ="); Serial.println (dig1, BIN); Serial.print ("cipars 2 ="); Serial.println (dig2, BIN); Serial.print ("cipars 3 ="); Serial.println (dig3, BIN); Serial.print ("cipars 4 ="); Serial.println (dig4, BIN); Sērijas.println (); Serial.print ("cipars 1 ="); Serial.println (dig1, DEC); Serial.print ("cipars 2 ="); Serial.println (dig2, DEC); Serial.print ("cipars 3 ="); Serial.println (dig3, DEC); Serial.print ("cipars 4 ="); Serial.println (dig4, DEC); Sērijas.println (); // nosūtīt slēdža vērtību uz LED displeju, izmantojot SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (cipari [dig4]); Wire.write (cipari [dig3]); Wire.write (cipari [dig2]); Wire.write (cipari [dig1]); Wire.endTransmission (); kavēšanās (10); kavēšanās (1000); }
Un neticīgajiem… video demonstrācija.
Tātad, jums tas ir. Četri cipari viena vietā un virs I2C kopnes, saglabājot Arduino digitālās I/O tapas. Izmantojot astoņus MCP23017, jūs varētu nolasīt 32 ciparus vienlaikus. Priecājieties to darīt!
Jūs varat pasūtīt gan BCD, gan decimālos slēdžus dažādos izmēros no PMD Way, ar bezmaksas piegādi visā pasaulē.
Šo ziņu jums sniedza pmdway.com - viss veidotājiem un elektronikas entuziastiem ar bezmaksas piegādi visā pasaulē.
Ieteicams:
Kā piesiet īkšķa piedziņas vāciņu: 3 soļi (ar attēliem)
Kā piesiet īkšķa piedziņas vāciņu: Mana Corsair GTX īkšķa piedziņa ir ļoti izturīga ierīce ar cietu alumīnija ārpusi. Tomēr starp vāciņu un īkšķa piedziņas korpusu nav nekādu stiprinājumu, tāpēc vāciņa pazaudēšana ir ļoti reāla iespēja. Šajā īsajā pamācībā es
Šokējoša īkšķa cīņa: apgaismojuma īkšķa uzvara (V.O.L.T.): 6 soļi
Šokējoša īkšķa cīņa: Gaismas īkšķa uzvara (V.O.L.T.): Dit apparaat geeft duimpje badtelen een nieuwe twist: de verliezer krijgt een schok! Daarnaast telt het apparaat zelf af tot 3, zodat je nooit meer vals kan spelen
LED īkšķa lasīšana: 6 soļi (ar attēliem)
Lasīšanas LED īkšķis: Kā jūs zināt, ir lapas turētājs / lasīšanas gredzens, ko cilvēki var lasīt ar vienu roku. Es to nekad neesmu izmantojis, tāpēc es vēlos, lai man būtu tāds, kas 1) funkcionētu līdzīgi, bet ļautu 2) pirms gulētiešanas lasīt tumsā; tam arī jābūt 3) izslēgtam
Īkšķa pulkstenis - uzminēsim laiku: 5 soļi (ar attēliem)
Īkšķa pulkstenis - uzminēsim laiku: Sveiki visiem, šeit ir mana pirmā pamācība, tāpēc es ceru, ka tā būs laba. Turklāt mans angļu valodas līmenis ir diezgan slikts, tāpēc ceru, ka nepieļaušu pārāk daudz kļūdu! Šī projekta mērķis ir atkārtoti izmantot dažus " Thumbwheels " izglābts no vecas laboratorijas
Uzlauzt bezvadu durvju zvanu bezvadu trauksmes slēdzī vai ieslēgšanas/izslēgšanas slēdzī: 4 soļi
Uzlauzt bezvadu durvju zvanu bezvadu trauksmes slēdzī vai ieslēgšanas/izslēgšanas slēdzī: es nesen izveidoju signalizācijas sistēmu un uzstādīju to savā mājā. Es izmantoju magnētiskos slēdžus uz durvīm un vadu tos caur bēniņiem. Logi bija cits stāsts, un cieta elektroinstalācija nebija risinājums. Man vajadzēja bezvadu risinājumu, un tas ir