Talaan ng mga Nilalaman:
- Hakbang 1:
- Hakbang 2:
- Hakbang 3:
- Hakbang 4:
- Hakbang 5:
- Hakbang 6:
- Hakbang 7: Maramihang Mga switch
- Hakbang 8:
- Hakbang 9:
Video: Mga switch ng Arduino at Thumbwheel: 9 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Sa artikulong ito sinusuri namin ang paggamit ng mga switch ng push-wheel / thumbwheel sa aming mga system ng Arduino. Narito ang ilang mga halimbawa na nagmula sa PMD Way.
Hakbang 1:
Para sa hindi nakakaalam, ang bawat switch ay isang patayong segment at maaari silang maiugnay nang magkasama upang bumuo ng iba't ibang laki. Maaari mong gamitin ang mga pindutan upang pumili mula sa mga digit na zero hanggang siyam. Mayroong mga kahalili na magagamit na mayroong isang gulong maaari mong ilipat sa iyong hinlalaki sa halip na ang mga pindutan ng pagtaas / pagbaba.
Bago ang mga araw ng magarbong mga interface ng gumagamit ang mga switch na ito ay medyo popular na pamamaraan para sa pagtatakda ng bilang ng data entry. Gayunpaman magagamit pa rin sila ngayon, kaya't tingnan natin kung paano ito gumagana at kung paano natin magagamit ang mga ito. Ang halaga ng switch ay ginawang magagamit sa pamamagitan ng binary-code na decimal o tuwid na decimal. Isaalang-alang ang likuran ng switch sa form na BCD.
Hakbang 2:
Mayroon kaming karaniwan sa kaliwa, pagkatapos ay ang mga contact para sa 1, 2, 4 at 8. Kung mag-apply ka ng isang maliit na boltahe (sabihin na 5V) sa karaniwan, ang halaga ng switch ay maaaring masukat sa pamamagitan ng pagdaragdag ng mga halaga ng mga contact na nasa TAAS na estado. Halimbawa, kung pipiliin mo ang 3 - ang mga contact na 1 at 2 ay nasa boltahe na katulad. Ang mga halaga sa pagitan ng zero at siyam ay maaaring kinatawan tulad ng sa talahanayan.
Hakbang 3:
Sa ngayon dapat mong mapagtanto na madali na basahin ang halaga ng isang switch - at tama ka, totoo. Maaari naming ikonekta ang 5V sa karaniwan, ang mga output sa digital input pin ng aming Arduino boards, pagkatapos ay gamitin ang digitalRead () upang matukoy ang halaga ng bawat output. Sa sketch ay gumagamit kami ng ilang pangunahing matematika upang i-convert ang halaga ng BCD sa isang decimal number. Kaya't gawin natin ito ngayon.
Mula sa isang pananaw sa hardware, kailangan nating isaalang-alang ang isa pang bagay - ang switch ng push-wheel ay kumikilos electrically tulad ng apat na normal na bukas na mga pindutan ng push. Nangangahulugan ito na kailangan naming gumamit ng mga pull-down resistor upang magkaroon ng isang malinaw na pagkakaiba sa pagitan ng mataas at mababang estado. Kaya ang eskematiko para sa isang switch ay tulad ng ipinakita sa itaas.
Hakbang 4:
Ngayon ito ay isang simpleng bagay upang ikonekta ang mga output na may label na 1, 2, 4, at 8 sa (halimbawa) mga digital na pin na 8, 9, 10 at 11. Ikonekta ang 5V sa switch na 'C' point, at GND sa… GND. Susunod, kailangan nating magkaroon ng isang sketch na maaaring basahin ang mga input at i-convert ang output ng BCD sa decimal. Isaalang-alang ang sumusunod na sketch:
/ * Gumagamit ng SAA1064 na numerong display shield https://www.gravitech.us/7segmentshield.html Gumagamit ng serial monitor kung wala kang SAA1064 na kalasag * / # isama ang "Wire.h" #define q1 8 # tukuyin ang q2 9 # tukuyin ang q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // sumali sa i2c bus (opsyonal sa address para sa master) pagkaantala (500); pinMode (q1, INPUT); // thumbwheel '1' pinMode (q2, INPUT); // thumbwheel '2' pinMode (q4, INPUT); // thumbwheel '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // nagpapadala ng integer na 'Count' sa Gravitech SAA1064 kalasag {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; Int Libu-libo, Daan-daang, Sampu, Base; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Libu-libo = Bilang / 1000; Daan-daang = (Bilang- (Libu-libo * 1000)) / 100; Sampu = (Bilang - ((Libu-libo * 1000) + (Daan-daang * 100))) / 10; Base = Bilang - ((Libu-libo * 1000) + (Daan-daang * 100) + (Sampu * 10)); Wire.write (lookup [Base]); Wire.write (lookup [Sampu]; Wire.write (lookup [Daan-daang]); Wire.write (lookup [Libu-libo]); Wire.endTransmission (); antala (10); } int readSwitch () {int total = 0; kung (digitalRead (q1) == TAAS) {total + = 1; } kung (digitalRead (q2) == TAAS) {total + = 2; } kung (digitalRead (q4) == TAAS) {total + = 4; } kung (digitalRead (q8) == TAAS) {total + = 8; } kabuuang pagbalik; } void loop () {dispSAA1064 (readSwitch ()); // nagpapadala ng halaga ng paglipat upang ipakita ang kalasag Serial.println (readSwitch ()); // nagpapadala ng halaga ng switch sa serial monitor box}
Ang pagpapaandar na readSwitch () ay ang susi. Kinakalkula nito ang halaga ng switch sa pamamagitan ng pagdaragdag ng bilang na representasyon ng bawat output ng switch at ibabalik ang kabuuan bilang resulta nito. Para sa halimbawang ito, gumamit kami ng isang numerong display na kalasag na kinokontrol ng NXP SAA1064.
Hakbang 5:
Ang pagpapaandar na readSwitch () ay ang susi. Kinakalkula nito ang halaga ng switch sa pamamagitan ng pagdaragdag ng bilang na representasyon ng bawat output ng switch at ibabalik ang kabuuan bilang resulta nito. Para sa halimbawang ito, gumamit kami ng isang numerong display na kalasag na kinokontrol ng NXP SAA1064.
Kung wala ka, ok lang iyon - ipinapadala din ang mga resulta sa serial monitor. Ngayon, tingnan natin ito sa pagkilos sa video.
Hakbang 6:
Ok hindi ito maganda, ngunit kung kailangan mo ng numerong pagpasok ay nakakatipid ito ng maraming pisikal na puwang at nag-aalok ng isang tumpak na paraan ng pagpasok.
Kaya ayan mayroon ka nito. Gagamitin mo ba talaga ang mga ito sa isang proyekto? Para sa isang digit - oo. Para sa apat? Marahil ay hindi - marahil ay mas madali itong gumamit ng isang 12-digit na keypad. Mayroong isang ideya …
Hakbang 7: Maramihang Mga switch
Ngayon ay susuriin namin kung paano basahin ang apat na digit - at hindi sayangin ang lahat ng mga digital na pin sa proseso. Sa halip, gagamitin namin ang Microchip MCP23017 16-bit port expander IC na nakikipag-usap sa pamamagitan ng I2C bus. Mayroon itong labing-anim na digital input / output pin na maaari naming magamit upang mabasa ang katayuan ng bawat switch.
Bago sumulong, mangyaring tandaan na ang ilang ipinapalagay na kaalaman ay kinakailangan para sa artikulong ito - ang I2C bus (mga bahagi isa at dalawa) at ang MCP23017. Una naming ilalarawan ang mga koneksyon sa hardware, at pagkatapos ay ang Arduino sketch. Alalahanin ang iskematikong ginamit para sa iisang halimbawa ng paglipat.
Kapag ang switch ay direktang konektado sa Arduino, binasa namin ang katayuan ng bawat pin upang matukoy ang halaga ng switch. Gagawin namin itong muli, sa isang mas malaking sukat gamit ang MCP23017. Isaalang-alang ang diagram ng pinout:
Hakbang 8:
Mayroon kaming 16 na mga pin, na nagpapahintulot sa apat na mga switch na maiugnay. Ang mga commons para sa bawat switch ay kumonekta pa rin sa 5V, at ang bawat contact sa switch ay mayroon pa ring 10k pull-down na risistor sa GND. Pagkatapos ay ikonekta namin ang 1, 2, 4, 8 na mga pin ng digit na isa sa GPBA0 ~ 3; digit two ng 1, 2, 4, 8 sa GPA4 ~ 7; digit three ng 1, 2, 4, 8 hanggang GPB0 ~ 3 at digit na apat na 1, 2, 4, 8 hanggang GPB4 ~ 7.
Ngayon paano natin babasahin ang mga switch? Ang lahat ng mga wires na iyon ay maaaring mag-isip sa iyo na mahirap ito, ngunit ang sketch ay medyo simple. Kapag nabasa namin ang halaga ng GPBA at B, isang byte ang naibalik para sa bawat bangko, na may pinakamahalagang bit muna. Ang bawat apat na piraso ay tutugma sa setting ng switch na konektado sa pagtutugma ng mga pin na I / O. Halimbawa, kung hihilingin namin ang data para sa parehong mga bangko ng IO at ang mga switch ay nakatakda sa 1 2 3 4 - ang bank A ay babalik 0010 0001 at ang bank B ay babalik sa 0100 0011.
Gumagamit kami ng ilang mga pagpapatakbo ng bitshift upang paghiwalayin ang bawat apat na piraso sa isang hiwalay na variable - na nag-iiwan sa amin ng halaga ng bawat digit. Halimbawa, upang paghiwalayin ang halaga ng paglipat ng apat, inililipat namin ang mga piraso mula sa bangko B >> 4. Itinutulak nito ang halaga ng paglipat ng tatlong palabas, at ang mga blangko na bit sa kaliwa ay naging zero.
Upang paghiwalayin ang halaga para sa paglipat ng tatlo, gumagamit kami ng isang tambalang paunti at - na nag-iiwan ng halaga ng paglipat ng tatlo. Ipinapakita ng imahe ang isang pagkasira ng mga halaga ng binary switch - ipinapakita nito ang hilaw na halaga ng GPIOA at B byte, pagkatapos ay ang halagang binary ng bawat digit, at ang decimal na halaga.
Hakbang 9:
Tingnan natin ang sketch ng demonstrasyon:
/ * Halimbawa 40a - Basahin ang apat na switch ng pushwheel BCD sa pamamagitan ng MCP23017, ipakita sa SAA1064 / 4-digit na 7-segment LED display * / // MCP23017 pin 15 ~ 17 hanggang GND, ang address ng bus ng I2C ay 0x20 // SAA1064 I2C bus address 0x38 # isama ang "Wire.h" // para sa mga LED digit na kahulugan ng int digit [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 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA output, walang digit na blanking Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // start up I2C bus initSAA1064 (); } void loop () {// basahin ang mga input ng bank A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // ang byte na ito ay naglalaman ng data ng paglipat para sa mga digit na 1 at 2 // basahin ang mga input ng bank B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // ang byte na ito ay naglalaman ng data ng paglipat para sa mga digit na 3 at 4 // halaga ng pagkuha para sa bawat switch // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // send all GPIO and individual switch data to serial monitor // for debug and interest's sake Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("digit 1 ="); Serial.println (dig1, BIN); Serial.print ("digit 2 ="); Serial.println (dig2, BIN); Serial.print ("digit 3 ="); Serial.println (dig3, BIN); Serial.print ("digit 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("digit 1 ="); Serial.println (dig1, DEC); Serial.print ("digit 2 ="); Serial.println (dig2, DEC); Serial.print ("digit 3 ="); Serial.println (dig3, DEC); Serial.print ("digit 4 ="); Serial.println (dig4, DEC); Serial.println (); // magpadala ng halaga ng switch sa LED display sa pamamagitan ng SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (mga digit [dig4]); Wire.write (mga digit [dig3]); Wire.write (mga digit [dig2]); Wire.write (mga digit [dig1]); Wire.endTransmission (); antala (10); pagkaantala (1000); }
At para sa mga hindi naniniwala … isang pagpapakita ng video.
Kaya ayan mayroon ka nito. Apat na mga digit sa halip na isa, at higit sa I2C bus na pinapanatili ang Arduino digital I / O na mga pin. Gamit ang walong MCP23017s maaari mong mabasa ang 32 na beses nang sabay-sabay. Magsaya sa paggawa nito!
Maaari kang mag-order ng parehong mga switch ng BCD at decimal sa iba't ibang laki mula sa PMD Way, na may libreng paghahatid sa buong mundo.
Ang post na ito ay dinala sa iyo ng pmdway.com - lahat para sa mga tagagawa ng tagahanga at electronics, na may libreng paghahatid sa buong mundo.
Inirerekumendang:
Mga Laruang Switch-Adapt: Mga Paglalakad sa Tubig na Lumalakad sa Tubig na Naa-access !: 7 Mga Hakbang (na may Mga Larawan)
Mga Laruang Switch-Adapt: Mga Paglalakad sa Tubig na Lumalakad sa Dragon na Naa-access !: Ang pagbagay ng laruan ay nagbubukas ng mga bagong paraan at na-customize na solusyon upang payagan ang mga bata na may limitadong mga kakayahan sa motor o mga kapansanan sa pag-unlad na makipag-ugnay sa mga laruan nang nakapag-iisa. Sa maraming mga kaso, ang mga bata na nangangailangan ng inangkop na mga laruan ay hindi maaring
Switch Adapt a Toy: WolVol Train Ginawang Pag-access ng Switch !: 7 Mga Hakbang
Switch Adapt a Toy: WolVol Train Made Switch Accessible !: Ang pagbagay ng laruan ay nagbubukas ng mga bagong paraan at na-customize na solusyon upang payagan ang mga bata na may limitadong kakayahan sa motor o mga kapansanan sa pag-unlad na makipag-ugnay sa mga laruan nang nakapag-iisa. Sa maraming mga kaso, ang mga bata na nangangailangan ng inangkop na mga laruan ay hindi maaring
Tuchless Switch para sa Home Appliances -- Kontrolin ang Iyong Mga Kagamitan sa Bahay Nang Walang Tuch Any Switch: 4 Hakbang
Tuchless Switch para sa Home Appliances || Kontrolin ang Iyong Mga Kagamitan sa Bahay Nang Walang Tuch Any Switch: Ito ay Isang Tuchless Switch Para sa Mga Home Appliances. Magagamit Mo Ito Sa Anumang Lugar Pampubliko Kaya Makakatulong Iyon upang Labanan ang Anumang Virus. Ang Circuit Batay Sa Dark Sensor Circuit na Ginawa Ng Op-Amp At LDR. Pangalawang Mahalagang Bahagi Ng Ito Circuit SR Flip-Flop With Sequencell
Bluetooth Remote Controlled Light Switch - Retrofit. Gumagana pa rin ang Light Switch, Walang Dagdag na Pagsulat .: 9 Mga Hakbang (na may Mga Larawan)
Bluetooth Remote Controlled Light Switch - Retrofit. Gumagana Pa rin ang Light Switch, Walang Extra Writing: Update 25 Nobyembre 2017 - Para sa isang bersyon ng Mataas na Kapangyarihan ng proyektong ito na makokontrol ang kilowatts ng pag-load tingnan ang Retrofit BLE Control sa Mga Mataas na Load ng Kuryente - Walang Kinakailangan na Dagdag na Mga Kable sa Update Nobyembre 15, 2017 - Ang ilang mga board na BLE / software ay nagtatampok ng deli
Thumbwheel Clock - Hulaan Natin ang Oras: 5 Hakbang (na may Mga Larawan)
Thumbwheel Clock - Hulaan Natin ang Oras: Kamusta sa lahat, narito ang aking unang Mga Tagubilin, kaya't sana maging mabuti ito. Bukod dito, ang antas ng aking Ingles ay medyo mahirap kaya't sana hindi ako makakagawa ng masyadong maraming mga pagkakamali! Ang layunin ng proyektong ito ay muling gamitin ang ilang " Thumbwheels " nai-salvage mula sa isang lumang lab e