Sisällysluettelo:

Arduino- ja säätöpyörän kytkimet: 9 vaihetta
Arduino- ja säätöpyörän kytkimet: 9 vaihetta

Video: Arduino- ja säätöpyörän kytkimet: 9 vaihetta

Video: Arduino- ja säätöpyörän kytkimet: 9 vaihetta
Video: Testaa säätöpyörän kytkintä | Heksadesimaali-BCD-säätöpyörän kytkintoiminto 2024, Marraskuu
Anonim
Arduino- ja säätöpyörän kytkimet
Arduino- ja säätöpyörän kytkimet

Tässä artikkelissa tarkastellaan työntö-/peukalokytkinten käyttöä Arduino-järjestelmissämme. Tässä on joitain esimerkkejä, jotka on hankittu PMD Waylta.

Vaihe 1:

Kuva
Kuva

Aloittamattomille jokainen kytkin on yksi pystysuora segmentti ja ne voidaan yhdistää toisiinsa erikokoisina. Voit käyttää painikkeita valitaksesi numerot nollasta yhdeksään. Saatavana on vaihtoehtoja, joissa on pyörä, jota voit liikuttaa peukalolla lisäys-/vähennyspainikkeiden sijasta.

Ennen hienoja käyttöliittymiä nämä kytkimet olivat varsin suosittuja menetelmiä numeerisen tiedon syöttämisen asettamiseksi. Ne ovat kuitenkin edelleen saatavilla, joten katsotaanpa, miten ne toimivat ja miten voimme käyttää niitä. Kytkimen arvo on saatavana binäärikoodatulla desimaalilla tai suoralla desimaalilla. Harkitse kytkimen takaosaa BCD -muodossa.

Vaihe 2:

Kuva
Kuva

Meillä on yhteinen vasemmalla, sitten koskettimet 1, 2, 4 ja 8. Jos käytät pientä jännitettä (esim. 5 V) yhteiseen, kytkimen arvo voidaan mitata lisäämällä liittimen arvot HIGH -tila. Jos esimerkiksi valitset 3 - koskettimet 1 ja 2 ovat yhteisellä jännitteellä. Arvot nollasta yhdeksään voidaan esittää sellaisina taulukossa.

Vaihe 3:

Kuva
Kuva

Nyt sinun pitäisi ymmärtää, että kytkimen arvon lukeminen olisi helppoa - ja olet oikeassa, se on. Voimme liittää 5 V yhteiseen, lähdöt Arduino -korttiemme digitaalisiin tulonappeihin ja määrittää sitten digitaalilähdön () avulla jokaisen lähdön arvon. Luonnoksessa käytämme matematiikan perusmuutoksia muuntaaksemme BCD -arvon desimaaliluvuksi. Joten tehdään se nyt.

Laitteiston näkökulmasta meidän on otettava huomioon vielä yksi asia-työntöpyöräkytkin toimii sähköisesti kuin neljä normaalisti auki olevaa painiketta. Tämä tarkoittaa sitä, että meidän on käytettävä alasvetovastuksia, jotta meillä on selvä ero korkean ja matalan tilan välillä. Joten yhden kytkimen kaavio on kuten yllä.

Vaihe 4:

Nyt on yksinkertaista liittää 1, 2, 4 ja 8 merkityt lähdöt (esimerkiksi) digitaalisiin nastoihin 8, 9, 10 ja 11. Kytke 5V kytkimen C -pisteeseen ja GND… GND. Seuraavaksi meillä on oltava luonnos, joka voi lukea tulot ja muuntaa BCD -lähdön desimaaliksi. Harkitse seuraavaa luonnosta:

/ * Käyttää SAA1064 -numeerista näytön suojaa https://www.gravitech.us/7segmentshield.html Käyttää sarjamonitoria, jos sinulla ei ole SAA1064 -suojaa */ #sisältää "Wire.h" #define q1 8 #define q2 9 # define q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // liittyminen i2c -väylään (osoite valinnainen isännälle) viive (500); pinMode (q1, TULO); // säätöpyörä '1' pinMode (q2, INPUT); // säätöpyörä '2' pinMode (q4, INPUT); // säätöpyörä '4' pinMode (q8, INPUT); // säätöpyörä '8'} void dispSAA1064 (int Count) // lähettää kokonaisluvun "Count" Gravitech SAA1064 -kilpeen {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Tuhansia, satoja, kymmeniä, tukikohta; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Tuhannet = Count/1000; Sadat = (Count- (Thousands*1000))/100; Kymmenet = (Luku-((Tuhannet*1000)+(Sadat*100)))/10; Base = Count-((tuhansia*1000)+(satoja*100)+(kymmeniä*10)); Wire.write (haku [Base]); Wire.write (haku [kymmeniä]); Wire.write (haku [satoja]); Wire.write (haku [Tuhannet]); Wire.endTransmission (); viive (10); } int readSwitch () {int yhteensä = 0; if (digitalRead (q1) == HIGH) {yhteensä+= 1; } jos (digitalRead (q2) == HIGH) {yhteensä+= 2; } jos (digitalRead (q4) == HIGH) {yhteensä+= 4; } jos (digitalRead (q8) == HIGH) {yhteensä+= 8; } palautus yhteensä; } void loop () {dispSAA1064 (readSwitch ()); // lähettää kytkimen arvon näyttökilpeen Serial.println (readSwitch ()); // lähettää kytkimen arvon sarjamonitorilaatikkoon}

Toiminto readSwitch () on avain. Se laskee kytkimen arvon lisäämällä jokaisen kytkimen lähdön numeerisen esityksen ja palauttaa sen tuloksena. Tässä esimerkissä käytimme numeerista näytön suojaa, jota ohjaa NXP SAA1064.

Vaihe 5:

Image
Image

Toiminto readSwitch () on avain. Se laskee kytkimen arvon lisäämällä jokaisen kytkimen lähdön numeerisen esityksen ja palauttaa sen tuloksena. Tässä esimerkissä käytimme numeerista näytön suojaa, jota ohjaa NXP SAA1064.

Jos sinulla ei ole sitä, se on ok - tulokset lähetetään myös sarjamonitoriin. Katsotaan nyt se toiminnassa videolla.

Vaihe 6:

Ok, se ei näytä paljon, mutta jos tarvitset numeerista syöttöä, se säästää paljon fyysistä tilaa ja tarjoaa tarkan syöttötavan.

Joten sinulla on se. Käytätkö niitä todella projektissa? Yhdelle numerolle - kyllä. Neljälle? Todennäköisesti ei-ehkä olisi helpompaa käyttää 12-numeroista näppäimistöä. On idea…

Vaihe 7: Useita kytkimiä

Kuva
Kuva

Nyt tarkastelemme kuinka lukea neljä numeroa - emmekä tuhlaa kaikkia digitaalisia nastoja prosessissa. Sen sijaan käytämme 16-bittistä Microchip MCP23017 -portin laajenninta IC, joka kommunikoi I2C-väylän kautta. Siinä on kuusitoista digitaalista tulo-/lähtönastausta, joiden avulla voimme lukea kunkin kytkimen tilan.

Ennen kuin siirryt eteenpäin, huomaa, että tätä artikkelia varten tarvitaan jonkin verran oletettua tietoa - I2C -väylä (osat 1 ja 2) ja MCP23017. Ensin kuvataan laitteistoyhteydet ja sitten Arduino -luonnos. Muista yksittäisen kytkimen esimerkissä käytetty kaavio.

Kun kytkin oli kytketty suoraan Arduinoon, luimme jokaisen nastan tilan määrittääksesi kytkimen arvon. Teemme tämän uudelleen laajemmassa mittakaavassa käyttämällä MCP23017: tä. Harkitse pinout -kaaviota:

Vaihe 8:

Meillä on 16 nastaa, mikä mahdollistaa neljän kytkimen kytkemisen. Kunkin kytkimen yhteiset yhteydet kytkeytyvät edelleen 5 V: iin, ja jokaisella kytkinkoskettimella on edelleen 10 k: n alasvetovastus GND: lle. Sitten yhdistämme numeron 1 1, 2, 4, 8 nastaa GPBA0 ~ 3; numero kaksi 1, 2, 4, 8 GPA4 ~ 7: ään; numerot kolme 1, 2, 4, 8 GPB0 ~ 3 ja numero neljä 1, 2, 4, 8 GPB4 ~ 7.

Miten luemme kytkimet? Kaikki nuo johdot voivat saada sinut ajattelemaan, että se on vaikeaa, mutta luonnos on melko yksinkertainen. Kun luemme GPBA: n ja B: n arvon, palautetaan yksi tavu jokaista pankkia kohden ja merkittävin bitti ensin. Jokainen neljä bittiä vastaa vastaavan I/O -nastaan kytketyn kytkimen asetusta. Jos esimerkiksi pyydämme tietoja molemmista IO -pankeista ja kytkimet on asetettu 1 2 3 4 - pankki A palauttaa 0010 0001 ja pankki B palauttaa 0100 0011.

Käytämme joitakin bittisiirtotoimintoja erottaaksemme kaikki neljä bittiä erilliseksi muuttujaksi - mikä jättää meille jokaisen numeron arvon. Esimerkiksi kytkin neljännen arvon erottamiseksi siirrämme bitit pankista B >> 4. Tämä työntää kytkimen kolme arvon ulos ja vasemmalla olevat tyhjät bitit muuttuvat nollaksi.

Kytkimen kolmen arvon erottamiseksi käytämme yhdistettä bittinä & -, joka jättää kytkimen kolme arvon. Kuvassa näkyy binäärikytkimen arvojen erittely - se näyttää GPIOA- ja B -tavuraaka -arvot, sitten kunkin numeron binääriarvon ja desimaaliarvon.

Vaihe 9:

Katsotaan siis esittelyluonnos:

/ * Esimerkki 40a-Lue neljä työntöpyörän BCD-kytkintä MCP23017: n kautta, näyttö SAA1064: llä/4-numeroinen 7-segmenttinen LED-näyttö */// MCP23017 nastat 15 ~ 17 GND: hen, I2C-väylän osoite on 0x20 // SAA1064 I2C-väylän osoite 0x38 # sisältää "Wire.h" // LED -numeroiden määritelmille int -numerot [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; tavu GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12 mA: n lähtö, ei numeroiden tyhjentämistä Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // I2C -väylän käynnistys initSAA1064 (); } void loop () {// lue pankin A Wire syötteet. Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // tämä tavu sisältää kytkentätiedot numeroille 1 ja 2 // lukee pankin B Wire -tulot.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // tämä tavu sisältää kytkentätiedot numeroille 3 ja 4 // poimia arvo kullekin kytkimelle // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // lähetä kaikki GPIO ja yksittäiset kytkintiedot sarjamonitoriin // virheenkorjauksen ja edun vuoksi Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Sarja.println (); Serial.print ("numero 1 ="); Sarja.println (dig1, BIN); Serial.print ("numero 2 ="); Sarja.println (dig2, BIN); Serial.print ("numero 3 ="); Serial.println (dig3, BIN); Serial.print ("numero 4 ="); Serial.println (dig4, BIN); Sarja.println (); Serial.print ("numero 1 ="); Sarja.println (dig1, DEC); Serial.print ("numero 2 ="); Sarja.println (dig2, DEC); Serial.print ("numero 3 ="); Sarja.println (dig3, DEC); Serial.print ("numero 4 ="); Sarja.println (dig4, DEC); Sarja.println (); // lähetä kytkimen arvo LED -näyttöön SAA1064 Wire.beginTransmission (0x38) kautta; Wire.write (1); Wire.write (numerot [dig4]); Wire.write (numerot [dig3]); Wire.write (numerot [dig2]); Wire.write (numerot [dig1]); Wire.endTransmission (); viive (10); viive (1000); }

Ja ei-uskoville… videoesittely.

Joten sinulla on se. Neljä numeroa yhden sijasta ja I2C -väylän yli, mikä säästää Arduinon digitaalisia I/O -nastoja. Käyttämällä kahdeksaa MCP23017s voit lukea 32 numeroa kerralla. Pidä hauskaa sen kanssa!

Voit tilata sekä BCD- että desimaalikytkimiä erikokoisina PMD Waylta, ja ilmainen toimitus maailmanlaajuisesti.

Tämän viestin toi sinulle pmdway.com - kaikki valmistajille ja elektroniikan harrastajille, ilmainen toimitus maailmanlaajuisesti.

Suositeltava: