Sadržaj:
Video: Arduino i prekidači s papučicom: 9 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
U ovom članku istražujemo upotrebu prekidača s gumenim kotačićima/zakretnim kotačićem u našim Arduino sustavima. Evo nekoliko primjera iz PMD Way.
Korak 1:
Za neupućene, svaka je sklopka jedan okomiti segment i mogu se povezati zajedno u različite veličine. Pomoću gumba možete birati od znamenki od nule do devet. Dostupne su alternative koje imaju kotačić kojim se možete pomicati palcem umjesto gumba za povećanje/smanjenje.
Prije dana modernih korisničkih sučelja ti su prekidači bili prilično popularna metoda za postavljanje numeričkog unosa podataka. Međutim, oni su i danas dostupni, pa da vidimo kako djeluju i kako ih možemo koristiti. Vrijednost prekidača dostupna je putem binarno kodiranog decimalnog ili ravnog decimalnog broja. Razmotrite stražnju stranu prekidača u BCD obliku.
Korak 2:
S lijeve strane imamo zajedničke, zatim kontakte za 1, 2, 4 i 8. Ako na zajednički primijenite mali napon (recimo 5V), vrijednost prekidača može se mjeriti zbrajanjem vrijednosti kontakata koji su u VISOKO stanje. Na primjer, ako odaberete 3 - kontakti 1 i 2 bit će na zajedničkom naponu. Vrijednosti između nule i devet mogu se kao takve prikazati u tablici.
3. korak:
Do sada biste trebali shvatiti da bi bilo lako pročitati vrijednost prekidača - i u pravu ste, jest. Možemo spojiti 5V na zajedničke, izlaze na digitalne ulazne pinove naših Arduino ploča, a zatim pomoću digitalRead () odrediti vrijednost svakog izlaza. U skici koristimo neke osnovne matematike za pretvaranje BCD vrijednosti u decimalni broj. Pa učinimo to sada.
Iz hardverske perspektive, moramo uzeti u obzir još jednu stvar-prekidač s kotačićem ponaša se električno poput četiri normalno otvorena tipke. To znači da moramo koristiti padajuće otpornike kako bismo imali jasnu razliku između visokog i niskog stanja. Dakle, shema za jedan prekidač je kao što je prikazano gore.
Korak 4:
Sada je jednostavno spojiti izlaze s oznakama 1, 2, 4 i 8 na (na primjer) digitalne pinove 8, 9, 10 i 11. Spojite 5V na prekidač ‘C’ točku, a GND na … GND. Zatim moramo imati skicu koja može čitati ulaze i pretvarati BCD izlaz u decimalni. Razmotrite sljedeću skicu:
/ * Koristi štitnik za numerički zaslon SAA1064 https://www.gravitech.us/7segmentshield.html Koristi serijski monitor ako nemate štitnik SAA1064 */#uključuje "Wire.h" #define q1 8 #define q2 9 # define q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // pridruživanje i2c sabirnici (adresa neobavezna za glavnog) kašnjenje (500); pinMode (q1, INPUT); // kotačić '1' pinMode (q2, INPUT); // kotačić '2' pinMode (q4, INPUT); // kotačić '4' pinMode (q8, INPUT); // kotačić '8'} void dispSAA1064 (int Count) // šalje cijeli broj 'Count' u Gravitech SAA1064 štit {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Tisuće, stotine, desetke, baza; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Tisuće = Broj/1000; Stotine = (Broj- (Tisuće*1000))/100; Deseci = (Broj-((Tisuće*1000)+(Stotine*100)))/10; Baza = Broj-((Tisuće*1000)+(Stotine*100)+(Desetke*10)); Wire.write (traženje [Baza]); Wire.write (pretraživanje [desetke]); Wire.write (traženje [stotine]); Wire.write (traženje [Tisuće]); Wire.endTransmission (); kašnjenje (10); } int readSwitch () {int ukupno = 0; if (digitalRead (q1) == HIGH) {ukupno+= 1; } if (digitalRead (q2) == HIGH) {ukupno+= 2; } if (digitalRead (q4) == HIGH) {ukupno+= 4; } if (digitalRead (q8) == HIGH) {ukupno+= 8; } ukupan povrat; } void loop () {dispSAA1064 (readSwitch ()); // šalje vrijednost prekidača na zaslon za zaštitu Serial.println (readSwitch ()); // šalje vrijednost prekidača u okvir serijskog monitora}
Ključna je funkcija readSwitch (). Izračunava vrijednost sklopke dodavanjem numeričkog prikaza svakog izlaza sklopke i vraća ukupnu vrijednost kao rezultat. U ovom primjeru koristili smo numerički štitnik zaslona kojim upravlja NXP SAA1064.
5. korak:
Ključna je funkcija readSwitch (). Izračunava vrijednost sklopke dodavanjem numeričkog prikaza svakog izlaza sklopke i vraća ukupnu vrijednost kao rezultat. U ovom primjeru koristili smo numerički zaslon koji kontrolira NXP SAA1064.
Ako ga nemate, to je u redu - rezultati se šalju i na serijski monitor. Sada, pogledajmo to na djelu u videu.
Korak 6:
U redu, ne izgleda puno, ali ako vam je potreban numerički unos, štedi mnogo fizičkog prostora i nudi precizan način unosa.
Pa eto ga. Biste li ih zapravo koristili u nekom projektu? Za jednu znamenku - da. Za četvoricu? Vjerojatno ne-možda bi bilo lakše koristiti 12-znamenkasti tipkovnicu. Postoji ideja…
Korak 7: Više prekidača
Sada ćemo ispitati kako čitati četiri znamenke - i pritom ne potrošiti sve te digitalne pinove. Umjesto toga, koristit ćemo Microchip MCP23017 16-bitni IC proširivač portova koji komunicira putem I2C sabirnice. Ima šesnaest digitalnih ulazno/izlaznih pinova koje možemo koristiti za čitanje statusa svake sklopke.
Prije nego što krenete naprijed, imajte na umu da je za ovaj članak potrebno neko pretpostavljeno znanje - sabirnica I2C (prvi i drugi dio) i MCP23017. Prvo ćemo opisati hardverske veze, a zatim Arduino skicu. Prisjetite se sheme korištene za primjer pojedinačnog prekidača.
Kad je prekidač izravno spojen na Arduino, čitamo status svakog pina kako bismo odredili vrijednost prekidača. Ponovit ćemo to, u većim razmjerima, koristeći MCP23017. Razmotrite dijagram iscrtavanja:
Korak 8:
Imamo 16 pinova, što omogućuje povezivanje četiri prekidača. Zajedničko za svaki prekidač i dalje je spojeno na 5V, a svaki kontakt prekidača i dalje ima 10k pull-down otpornika na GND. Zatim spojimo 1, 2, 4, 8 pinova znamenke jedan na GPBA0 ~ 3; znamenke dva 1, 2, 4, 8 do GPA4 ~ 7; znamenke tri 1, 2, 4, 8 do GPB0 ~ 3 i znamenke četiri 1, 2, 4, 8 do GPB4 ~ 7.
Kako sada čitamo prekidače? Sve te žice mogu vas natjerati da pomislite da je teško, ali skica je vrlo jednostavna. Kad očitamo vrijednost GPBA i B, za svaku banku se vraća po jedan bajt, s prvim najznačajnijim bitom. Svaka četiri bita će odgovarati postavci prekidača spojenog na odgovarajuće I/O pinove. Na primjer, ako zatražimo podatke za obje IO banke, a prekidači su postavljeni na 1 2 3 4 - banka A vratit će 0010 0001, a banka B 0100 0011.
Koristimo neke operacije bitshift -a za odvajanje svaka četiri bita u zasebnu varijablu - što nam ostavlja vrijednost svake znamenke. Na primjer, da bismo odvojili vrijednost prekidača četiri, pomaknuli smo bitove iz banke B >> 4. Time se vrijednost prekidača tri gura van, a prazni bitovi s lijeve strane postaju nula.
Da bismo odvojili vrijednost za prekidač tri, koristimo složeno bito & - koje ostavlja vrijednost prekidača tri. Slika prikazuje raščlambu vrijednosti binarnog prekidača - prikazuje sirove vrijednosti GPIOA i B bajtova, zatim binarnu vrijednost svake znamenke i decimalnu vrijednost.
Korak 9:
Pogledajmo skicu demonstracije:
/ * Primjer 40a-Pročitajte četiri BCD sklopke s zakretnim kotačem preko MCP23017, prikaz na SAA1064/4-znamenkasti 7-segmentni LED zaslon */// MCP23017 pinovi 15 ~ 17 prema GND, adresa sabirnice I2C je 0x20 // adresa SAA1064 sabirnice I2C 0x38 # uključuje "Wire.h" // za definicije LED znamenki int znamenke [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; bajt GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// postavljanje 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA izlaz, žica bez prikrivanja znamenki.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // pokretanje I2C sabirnice initSAA1064 (); } void loop () {// čitanje ulaza banke A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // ovaj bajt sadrži podatke prekidača za znamenke 1 i 2 // očitavanje ulaza banke B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // ovaj bajt sadrži podatke prekidača za znamenke 3 i 4 // izdvaja vrijednost za svaki prekidač // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // pošaljite sve podatke GPIO -a i pojedinačne preklopnike na serijski monitor // radi otklanjanja pogrešaka i interesa Serial.print ("GPIOA ="); Serijski.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serijski.println (GPIOB, BIN); Serial.println (); Serial.print ("znamenka 1 ="); Serial.println (dig1, BIN); Serial.print ("znamenka 2 ="); Serial.println (dig2, BIN); Serial.print ("znamenka 3 ="); Serial.println (dig3, BIN); Serial.print ("znamenka 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("znamenka 1 ="); Serial.println (dig1, DEC); Serial.print ("znamenka 2 ="); Serial.println (dig2, DEC); Serial.print ("znamenka 3 ="); Serial.println (dig3, DEC); Serial.print ("znamenka 4 ="); Serial.println (dig4, DEC); Serial.println (); // šalje vrijednost prekidača na LED zaslon putem SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (znamenke [dig4]); Wire.write (znamenke [dig3]); Wire.write (znamenke [dig2]); Wire.write (znamenke [dig1]); Wire.endTransmission (); kašnjenje (10); kašnjenje (1000); }
A za nevjernike … video demonstracija.
Pa eto ga. Četiri znamenke umjesto jedne i preko I2C sabirnice čuvaju Arduino digitalne U/I pinove. Koristeći osam MCP23017, mogli ste čitati 32 znamenke odjednom. Uživajte u tome!
Možete naručiti i BCD i decimalne sklopke u različitim veličinama s PMD Way -a, uz besplatnu dostavu po cijelom svijetu.
Ovaj post vam donosi pmdway.com - sve za proizvođače i ljubitelje elektronike, uz besplatnu dostavu diljem svijeta.
Preporučeni:
Zvono na vratima s 3D printanom papučicom: 3 koraka
Zvono na vratima s 3D printanom papučicom: Ja sam u posljednjih nekoliko mjeseci dosta naručivao od Amazona. Dostavljači koji ispunjavaju sve ove narudžbe izloženi su stalnom riziku jer u jednom tjednu zvone na stotine zvona i kucaju na bezbroj vrata. Da bih vam pomogao u tome, moram
Nadogradnja svjetala s daljinskim upravljačem - postojeći zidni prekidači nastavljaju s radom: 8 koraka
Nadogradnja svjetla s daljinskim upravljačem - postojeći zidni prekidači nastavljaju s radom: ažuriranje 4. listopada 2017. - pogledajte Prekidač svjetla s daljinskim upravljanjem - nadogradnja. Prekidač svjetla i dalje radi, nema dodatnog pisanja za poboljšanu Bluetooth niskoenergetsku (BLE) verziju. Ažurirajte 8. studenog 2016. - Ažurirano s promjenama u projektu Retrofitted Fan Timers
Robotski prekidači za kućište: 4 koraka
Robotski prekidači za kućište: Trebam glavni prekidač za zaključavanje za napajanje i dva trenutna prekidača za isključivanje računala. Također mi je potreban kabel za punjenje baterije sa LED -om za potvrdu punjenja i SMA priključak za WIFI. Svi moraju biti vodootporni za ovog vanjskog robota
DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: 6 koraka
DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: U prvom dijelu naučili smo kako prebaciti jednu crvenu LED diodu na razvojnoj ploči MSP432 LaunchPad iz Texas Instruments, koristeći sklop umjesto C / C ++. U ovom Instructableu učinit će nešto slično - upravljati RGB LED diodom koja je također na tom uzorku
Dozator vode s 5 galona kontroliran nožnom papučicom: 3 koraka
Dozator za vodu s 5 galona kontroliran nožnom papučicom: U nekim zemljama poput mojega (Turska) imamo problema s ručnim pumpama za isporuku vode iz spremnika. Neke su ručne pumpe glomazne, a mala djeca imaju problem s osiguravanjem potrebne snage. Pa sam razmišljao o nozi