Përmbajtje:

Çelësat Arduino dhe Thumbwheel: 9 hapa
Çelësat Arduino dhe Thumbwheel: 9 hapa

Video: Çelësat Arduino dhe Thumbwheel: 9 hapa

Video: Çelësat Arduino dhe Thumbwheel: 9 hapa
Video: 12V Bluetooth Relay to control AC or DC load using mobile Phone 2024, Nëntor
Anonim
Çelësat Arduino dhe Thumbwheel
Çelësat Arduino dhe Thumbwheel

Në këtë artikull ne shqyrtojmë përdorimin e çelsave të rrotave/rrotave të gishtit të madh me sistemet tona Arduino. Këtu janë disa shembuj të buruar nga PMD Way.

Hapi 1:

Imazhi
Imazhi

Për të pa inicuarit, çdo ndërprerës është një segment vertikal dhe ato mund të lidhen së bashku për të formuar madhësi të ndryshme. Ju mund të përdorni butonat për të zgjedhur nga shifrat nga zero në nëntë. Ka alternativa në dispozicion që kanë një rrotë që mund të lëvizni me gishtin tuaj të madh në vend të butonave të rritjes/uljes.

Para ditëve të ndërfaqeve të përdoruesve të zbukuruar, këto ndërprerës ishin metoda mjaft të njohura për vendosjen e futjes së të dhënave numerike. Sidoqoftë, ato janë ende në dispozicion sot, kështu që le të shohim se si funksionojnë dhe si mund t'i përdorim ato. Vlera e ndërruesit vihet në dispozicion nëpërmjet dhjetoreve të koduara binare ose dhjetore të drejtë. Konsideroni pjesën e pasme të ndërprerësit në formë BCD.

Hapi 2:

Imazhi
Imazhi

Ne kemi të përbashkët në të majtë, pastaj kontaktet për 1, 2, 4 dhe 8. Nëse aplikoni një tension të vogël (të themi 5V) në të zakonshmen, vlera e ndërprerësit mund të matet duke shtuar vlerat e kontakteve që janë në Gjendje e LARTE. Për shembull, nëse zgjidhni 3 - kontaktet 1 dhe 2 do të jenë në tension të përbashkët. Vlerat midis zero dhe nëntë mund të përfaqësohen si të tilla në tabelë.

Hapi 3:

Imazhi
Imazhi

Tani duhet të kuptoni se do të ishte e lehtë të lexoni vlerën e një ndërprerës - dhe keni të drejtë, është. Ne mund të lidhim 5V me të zakonshmet, daljet me kunjat e hyrjes dixhitale të bordeve tona Arduino, pastaj të përdorim digitalRead () për të përcaktuar vlerën e secilës dalje. Në skicë ne përdorim disa matematikë bazë për të kthyer vlerën BCD në një numër dhjetor. Pra, le ta bëjmë tani.

Nga pikëpamja e harduerit, ne duhet të marrim parasysh një gjë tjetër-ndërprerësi i timonit sillet elektrikisht si katër butona shtypi normalisht të hapur. Kjo do të thotë që ne duhet të përdorim rezistorë tërheqës në mënyrë që të kemi një ndryshim të qartë midis gjendjeve të larta dhe të ulëta. Pra, skema për një ndërprerës është siç tregohet më sipër.

Hapi 4:

Tani është një çështje e thjeshtë për të lidhur daljet e etiketuara 1, 2, 4 dhe 8 me (për shembull) kunjat dixhitale 8, 9, 10 dhe 11. Lidhni 5V me çelësin 'C', dhe GND me … GND. Tjetra, ne duhet të kemi një skicë që mund të lexojë hyrjet dhe të konvertojë daljen BCD në dhjetore. Merrni parasysh skicën e mëposhtme:

/ * Përdor mburojën numerike të ekranit SAA1064 https://www.gravitech.us/7segmentshield.html Përdor monitorin serik nëse nuk keni mburojën SAA1064 */#include "Wire.h" #define q1 8 #define q2 9 # # përcakto q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // bashkohu me autobusin i2c (adresa opsionale për master) vonesë (500); pinMode (q1, INPUT); // timoni i rrotës '1' pinMode (q2, HYRJA); // timoni i rrotës '2' pinMode (q4, HYRJA); // timoni i rrotës '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // dërgon 'Numër' të plotë në mburojën Gravitech SAA1064 {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Mijëra, Qindra, Dhjetëra, Baza; Wire.beginTransmetimi (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmetimi (0x38); Tela.shkruaj (1); Mijëra = Numëroni/1000; Qindra = (Numërimi- (Mijëra*1000))/100; Dhjetëra = (Numëroni-((Mijëra*1000)+(Qindra*100)))/10; Baza = Numërimi-((Mijëra*1000)+(Qindra*100)+(Dhjetëra*10)); Wire.write (lookup [Baza]); Wire.write (kërko [Dhjetëra]); Wire.write (kërko [Qindra]); Wire.write (kërko [Mijëra]); Wire.endTransmission (); vonesa (10); } int readSwitch () {int total = 0; nëse (digitalRead (q1) == LART) {total+= 1; } if (digitalRead (q2) == LART) {total+= 2; } if (digitalRead (q4) == HIGH) {total+= 4; } if (digitalRead (q8) == LART) {total+= 8; } totali i kthimit; } void loop () {dispSAA1064 (readSwitch ()); // dërgon vlerën e kalimit në mburojën e ekranit Serial.println (readSwitch ()); // dërgon vlerën e kalimit në kutinë e monitorimit serik}

Funksioni readSwitch () është çelësi. Ai llogarit vlerën e ndërprerësit duke shtuar përfaqësimin numerik të secilës dalje të ndërprerësit dhe e kthen totalin si rezultat i tij. Për këtë shembull ne përdorëm një mburojë numerike të ekranit që kontrollohet nga NXP SAA1064.

Hapi 5:

Image
Image

Funksioni readSwitch () është çelësi. Ai llogarit vlerën e ndërprerësit duke shtuar përfaqësimin numerik të secilës dalje të ndërprerësit dhe e kthen totalin si rezultat i tij. Për këtë shembull ne përdorëm një mburojë numerike të ekranit që kontrollohet nga NXP SAA1064.

Nëse nuk keni një, kjo është në rregull - rezultatet dërgohen gjithashtu në monitorin serik. Tani, le ta shohim në veprim në video.

Hapi 6:

Ok nuk duket shumë, por nëse keni nevojë për hyrje numerike kursen shumë hapësirë fizike dhe ofron një metodë të saktë të hyrjes.

Pra ja ku e keni. A do t'i përdorni këto në të vërtetë në një projekt? Për një shifër - po. Për katër? Ndoshta jo-mbase do të ishte më e lehtë të përdorni një tastierë me 12 shifra. Ka një ide…

Hapi 7: Çelësa të shumëfishtë

Imazhi
Imazhi

Tani ne do të shqyrtojmë se si të lexojmë katër shifra - dhe të mos humbim të gjitha ato kunjat dixhitale në proces. Në vend të kësaj, ne do të përdorim IC zgjerues të portit 16-bit Microchip MCP23017 që komunikon përmes autobusit I2C. Ka gjashtëmbëdhjetë kunja dixhitale të hyrjes/daljes që mund t'i përdorim për të lexuar statusin e secilit ndërprerës.

Para se të ecni përpara, ju lutemi vini re se disa njohuri të supozuara janë të nevojshme për këtë artikull - autobusi I2C (pjesët një dhe dy) dhe MCP23017. Së pari do të përshkruajmë lidhjet e harduerit, dhe më pas skicën Arduino. Kujtoni skemën e përdorur për shembullin e ndërprerësit të vetëm.

Kur kaloni ishte i lidhur drejtpërdrejt me Arduino, ne lexojmë statusin e secilës kunj për të përcaktuar vlerën e ndërprerësit. Ne do ta bëjmë këtë përsëri, në një shkallë më të madhe duke përdorur MCP23017. Konsideroni diagramin pinout:

Hapi 8:

Ne kemi 16 kunja, e cila lejon që katër ndërprerës të lidhen. Të zakonshmet për secilin ndërprerës akoma lidhen me 5V, dhe çdo kontakt ndërprerës ka akoma një rezistencë tërheqëse 10k në GND. Pastaj ne lidhim 1, 2, 4, 8 kunjat e shifrës një me GPBA0 ~ 3; shifra dy 1, 2, 4, 8 në GPA4 ~ 7; shifra tre, 1, 2, 4, 8 në GPB0 ~ 3 dhe shifra katër, 1, 2, 4, 8 në GPB4 ~ 7.

Tani si i lexojmë çelsat? Të gjitha ato tela mund t'ju bëjnë të mendoni se është e vështirë, por skica është mjaft e thjeshtë. Kur lexojmë vlerën e GPBA dhe B, një bajt kthehet për secilën bankë, me bitin më domethënës së pari. Çdo katër bite do të përputhen me cilësimin e ndërprerësit të lidhur me kunjat që përputhen me I/O. Për shembull, nëse kërkojmë të dhënat për të dy bankat IO dhe çelsat vendosen në 1 2 3 4 - banka A do të kthejë 0010 0001 dhe banka B do të kthejë 0100 0011.

Ne përdorim disa operacione bitshift për të ndarë çdo katër bit në një ndryshore të veçantë - e cila na lë me vlerën e secilës shifër. Për shembull, për të ndarë vlerën e ndërprerësit katër, ne i zhvendosim bitët nga banka B >> 4. Kjo e shtyn vlerën e ndërprerësit tre jashtë dhe bitët bosh në të majtë bëhen zero.

Për të ndarë vlerën për ndërprerësin tre, ne përdorim një përbërje bitwise & - e cila lë vlerën e kalimit tre. Imazhi tregon një ndarje të vlerave të ndërruesit binar - tregon vlerat e papërpunuara të bajtit GPIOA dhe B, pastaj vlerën binare të secilës shifër dhe vlerën dhjetore.

Hapi 9:

Pra, le të shohim skicën e demonstrimit:

/ * Shembulli 40a-Lexoni katër ndërprerës BCD me timon përmes MCP23017, shfaqeni në SAA1064/ekran LED me 4 shifra 7-segmentësh */// MCP23017 kunjat 15 ~ 17 në GND, adresa e autobusit I2C është 0x20 // Adresa e autobusit SAA1064 I2C 0x38 # përfshijnë "Wire.h" // për përkufizimet e shifrave LED në shifrat [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; byte GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// konfigurimi 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // Dalje 12mA, pa shifra të zbrazëta Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // filloni autobusin I2C initSAA1064 (); } void loop () {// lexoni inputet e bankës A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Tela. Kërkohet Nga (0x20, 1); GPIOA = Wire.read (); // ky bajt përmban të dhënat e kalimit për shifrat 1 dhe 2 // lexoni hyrjet e bankës B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Tela. Kërkohet Nga (0x20, 1); GPIOB = Wire.read (); // ky bajt përmban të dhënat e kalimit për shifrat 3 dhe 4 // nxjerr vlerën për secilin ndërprerës // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // dërgoni të gjitha të dhënat e ndërruesve GPIO dhe individualë në monitorin serik // për debug dhe interesin Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("shifra 1 ="); Serial.println (dig1, BIN); Serial.print ("shifra 2 ="); Serial.println (dig2, BIN); Serial.print ("shifra 3 ="); Serial.println (dig3, BIN); Serial.print ("shifra 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("shifra 1 ="); Serial.println (dig1, DEC); Serial.print ("shifra 2 ="); Serial.println (dig2, DEC); Serial.print ("shifra 3 ="); Serial.println (dig3, DEC); Serial.print ("shifra 4 ="); Serial.println (dig4, DEC); Serial.println (); // dërgoni vlerën e kalimit në ekranin LED përmes SAA1064 Wire.beginTransmission (0x38); Tela.shkruaj (1); Wire.write (shifrat [dig4]); Wire.write (shifrat [dig3]); Wire.write (shifrat [dig2]); Wire.write (shifrat [dig1]); Wire.endTransmission (); vonesa (10); vonesa (1000); }

Dhe për jo-besimtarët … një video demonstrim.

Pra ja ku e keni. Katër shifra në vend të një, dhe mbi autobusin I2C që ruan kunjat dixhitale të hyrjes/daljes Arduino. Duke përdorur tetë MCP23017 ju mund të lexoni 32 shifra në të njëjtën kohë. Argëtohu duke e bërë këtë!

Ju mund të porosisni çelsin BCD dhe dhjetor në madhësi të ndryshme nga PMD Way, me shpërndarje falas në të gjithë botën.

Ky postim ju është sjellë nga pmdway.com - gjithçka për prodhuesit dhe entuziastët e elektronikës, me shpërndarje falas në të gjithë botën.

Recommended: