Arduino Shields - ploče za proširenje za arduino. Proširenje analognih ulaza u Arduino Arduino proširenje ulaznih izlaznih portova

  • 10.02.2022

Novi članci

● 5.4. Proširenje digitalnih portova za NodeMCU ESP8266 pomoću MCP23017 čipa

Uvest ćemo LED indikaciju i zvučni alarm kada koristite Nodemcu modul kao pametni kućni kontroler. Broj pinova na Nodemcu modulu je puno manji nego na Arduino Mega, pa nam je potreban MCP23017 ulazni ekspander IC. MCP23017 čip dodaje 16 portova koji se mogu konfigurirati i za ulaz i za izlaz (slika 5.7). Čip koristi popularnu dvožičnu sabirnicu I2C.

Riža. 5.7. MCP23017 pinouts

Adresa čipa MCP23017 za I2C protokol može se postaviti kombinacijom signala na digitalnim ulazima A0 - A2 (slika 5.8), što vam omogućuje da istovremeno povežete 8 čipova MCP23017 na mikrokontroler, odnosno 16* 8=128 pinova.

Riža. 5.8. Postavljanje adrese čipa MCP23017

Čip ima 2 banke portova A (GPA0-GPA7) i B (GPB0-GPAB), od kojih se svaki može konfigurirati za ulaz ili izlaz.
Listing 5.3. prikazuje primjer postavljanja izlaznih banaka A i B.

Listing 5.3

// povezivanje biblioteke Wire.h #uključiti bajt ulaz=0; void setup()( Serial.begin(9600); Wire.begin(0,2); // start I2C Wire.beginTransmission(0x20); // i2c - adresa (A0-0,A1-0,A2-0) Wire.write(0x00); // IODIRA registar Wire.write(0x00); // postavi PORT A kao izlazŽica.kraj prijenosa(); ) void petlja(){ // čitanje podataka iz PORT-a B Wire.beginTransmission(0x20); Wire.write(0x13); Žica.kraj prijenosa(); Wire.requestFrom(0x20, 1); input=Wire.read(); // upisuje primljene podatke u PORT A Wire.beginTransmission(0x20); Wire.write(0x12); // adresa PORT A Wire.write(input); // PORT A Wire.endTransmission(); kašnjenje (100); // pauza)

Upotreba čipa MCP23017 povećat će broj digitalnih kontakata Nodemcu modula za 16 te će omogućiti organiziranje LED indikacije i zvučne signalizacije kritičnih parametara senzora.

Svi vole jeftine Arduino ploče, ali tako često projektu doslovno nedostaju jedan ili dva slobodna priključka! A ponekad ima dovoljno priključaka, ali ne želite povući snop žica na drugi dio strukture. Pretpostavimo da trebate postaviti nekoliko gumba i LED dioda na prednju ploču uređaja. Pouzdanije ih je i lakše spojiti na glavnu ploču sa samo dvije žice sabirnice podataka, a ne kabelom ili snopom, zar ne?

Za takve situacije dizajnirani su razni ekspanderi (ekspanderi) Arduino portova.

Tipično, pinovi mikrokontrolera implementiraju nekoliko različitih funkcija, pa su ekspanderi različiti:

  1. Standardni GPIO port Expander
  2. PWM izlazni ekspander
  3. Ekspanderi analognog ulaza - multiplekseri i vanjski ADC

Zasebno, vrijedi spomenuti digitalno-analogne pretvarače (DAC) i proširivače adresnog prostora sabirnice I2C. Ovi uređaji ne dupliciraju izravno funkcije portova, ali proširuju mogućnosti mikrokontrolera.

U prvom članku serije govorit ćemo o najjednostavnijim i najkorisnijim ekspanderima koji rade kao digitalni I/O portovi. To su mikro krugovi i. Raspoređeni su i rade apsolutno identično, a razlikuju se samo po broju priključaka.

Odabir modula za proširenje za Arduino

Najpopularniji i najjeftiniji modul izrađen je na PCF8574 čipu (slika 1.)

Riža. 1. Popularni PCF8574 modul za proširenje portova

prednosti:
  • Niska cijena.
  • Moduli se mogu spojiti u lanac jednostavnim umetanjem utikača jednog modula u utičnice prethodnog. Ne zaboravite postaviti kratkospojnike na različite adrese modula!
nedostaci:
  • Ne može se umetnuti izravno u matičnu ploču (preporučam lemljenje priključka priključka na stražnju stranu).
  • Ukupno osam portova u jednom modulu.

Ako ste raspoloženi za ozbiljnije projekte, naručite 16-bitni modul za PCF8575 na Aliexpressu. Toplo preporučujem modul prikazan na sl. 2.

Riža. 2. PCF8575 modul za proširenje portova

prednosti:
  • Dvostruko više luka.
  • Ugrađeno napajanje od 3,3 V, možete napajati druge module.
  • Ugrađena logička razina usklađivanja za I2C sabirnicu pri različitim naponima napajanja.
  • Pogodan format za matičnu ploču.
nedostaci:
  • Iznad cijene.

Kako radi PCF8574/PCF8575 GPIO port Expander

Razmjena podataka odvija se putem I2C sabirnice. Za spajanje na Arduino ploču potrebne su samo četiri žice, uključujući napajanje. Adresu ekspandera postavljaju tri skakača na ulazima A0…A2, tako da se osam identičnih čipova može spojiti na sabirnicu istovremeno i dobiti maksimalno 8*8=64 dodatna porta s PCF8574 ili 8*16=128 s PCF8575 čip.

Za izlaz podataka na port, upišite bajt podataka na adresu modula na I2C sabirnici. Za čitanje podataka s porta, pročitajte bajt na istoj adresi. Bajt se uvijek zapisuje i čita kao cjelina, rad s pojedinim znamenkama radi se programski.

Izlazi mikrosklopa su istovremeno ulazi, a ne postoji servisni registar koji određuje svrhu izlaza. Postoji samo zasun u koji je upisan izlazni bajt. Kako je ovo moguće?

Priključci rade na način otvorenog kolektora i imaju unutarnje pull-up otpornike. Ako se na izlaz upiše logička nula, tada se izlazni tranzistor otvara, koji nasilno povlači izlaz "na masu". Čitanje s takvog porta uvijek će vratiti nulu.

Budite oprezni kada primjenjujete izravni napon napajanja na pin s niskom razinom ili ako je struja prekoračena 50 mA uništit ćeš čip!

Da biste koristili port kao ulaz, upišite jedan na njega. U tom slučaju, unutarnji tranzistor će biti zatvoren, a rezultat čitanja će biti određen vanjskom logičkom razinom primijenjenom na pin. Slobodni izlaz se povlači na snagu pomoću ugrađenog otpornika.

Kako bi se neki od portova istovremeno koristili kao ulaz, a neki kao izlaz, prije nego se svaki bajt podataka upiše u ekspander, potrebno je primijeniti masku jedinica na one bitove koji odgovaraju ulazima pomoću operacije “logičko ILI” . To je sve)))

Generiranje prekida

PCF857* Proširivači portova generiraju prekidni impuls niska razina na INT izlazu s bilo kojom promjenom ulaznog signala na bilo kojem ulazu mikrosklopa. To je prikladno ako ekspander služi tipkovnici. Ali morate odrediti u rukovatelju prekida koji je gumb pritisnut ili otpušten. Generator prekida opremljen je filterom za suzbijanje brbljanja.

Primjer 1: Korištenje PCF8574 modula

Sastavimo jednostavan sklop od četiri LED diode, PCF8574 modula i Arduino ploče (sl. 3 i 4). S ovom shemom prebacivanja ne trebaju nam čak ni otpornici za gašenje LED dioda. Struja teče kroz LED i ugrađeni otpornik spojen na tračnicu napajanja.

Riža. 3. Dijagram ožičenja PCF8574 modula

Riža. 4. Raspored kruga s PCF8574 modulom

Kopirajte i zalijepite skicu 1 na Arduino ploču:

// Adresa modula na sabirnici (A0, A1, A2 = 0) int adresa = 0x38; // Podaci se čitaju iz modula uint8_t dataReceive; // Podaci koji se upisuju u modul uint8_t dataSend; void setup() ( Wire.begin(); Serial.begin(9600); // Visoko na sve PCF8574 portove dataSend = B11111111; pcf8574_write(dataSend); ) void loop() ( // Čitanje bajta iz modula dataReceive = pcf8574 (); // Izlaz na monitor u binarnom formatu Serial.println(dataReceive, BIN); // Pomaknite bitove lijevo grickanjem dataSend = dataReceive<< 4; // Накладываем битовую маску dataSend |= B00001111; // Записываем байт в модуль pcf8574_write(dataSend); delay(500); } // Процедура записи байта в модуль void pcf8574_write(uint8_t dt) { Wire.beginTransmission(address); Wire.write(dt); Wire.endTransmission(); } // Процедура чтения байта из модуля int8_t pcf8574_read() { Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 1); return (Wire.read()); }

Visoka razina se u početku upisuje na sve priključke mikrosklopa, tako da portovi P0 ... P3 mogu raditi kao ulazi.

Razine na pinovima ulaza očitavaju se svakih 500 ms i rezultat očitanja se prikazuje na monitoru. Ako spojite jedan od P0...P3 ulaza na zajedničku žicu, u njegovom bitu pojavljuje se nula. Zatim se očitana vrijednost pomiče ulijevo za četiri bita, rezultat se izlazi na port i jedna od LED dioda se gasi. Na primjer, ako se očitava nula na pinu P0, tada će se LED spojena na pin P4 ugasiti.

Imajte na umu da prije svakog pisanja u proširivač moramo primijeniti bitmasku od jedinica na sve bitove koji bi trebali biti ulazi: dataSend |= B00001111;

Potprogrami za rad s I2C sabirnicom iznimno su pojednostavljeni, greške se ne obrađuju.

Savjet: da biste pronašli i provjerili adresu modula na I2C sabirnici, možete koristiti . Izlazi terminalu adrese svih uređaja koji odgovaraju na zahtjev sabirnice.

Primjer 2: Korištenje PCF8575 modula

Posebnost PCF8575 modula je da ima 16 portova, tako da uvijek upišite dva bajta i pročitajte dva bajta. Ovo pravilo se mora poštovati čak i ako drugi bajt nije potreban.

Promijenimo malo shemu. LED diode ćemo spojiti na priključke P10 ... P13, a priključke P00 ... P03 ćemo spojiti kratkospojnikom na zajedničku žicu (sl. 5 i 6).

Riža. 5. Dijagram ožičenja PCF8575 modula

Riža. 6. Raspored kruga s PCF8575 modulom

Skica 2 prvo zapisuje jedinice na sve portove, a zatim čita njihovo stanje svakih 500 ms. Procedura čitanja vraća 16-bitnu riječ koja je podijeljena u bajtove. Sadržaj nižeg bajta (pinovi P00…P07) se kopira u visoki bajt i učitava natrag u modul. Ako je jedan od izlaza P00…P03 spojen na zajedničku žicu, tada će se ugasiti jedna od LED dioda spojenih na P10…P13.

// Knjižnica za rad s I2C #include // Adresa modula na sabirnici po defaultu int adresa = 0x20; // Podaci se čitaju iz modula uint8_t hi, lo; uint16_t dataReceive; uint8_tdataHighByte; // Visoki bajt (P10...P17) uint8_t dataLowByte; // Niski bajt (P00...P07) void setup() ( Wire.begin(); Serial.begin(9600); // Visoka razina za sve PCF8575 portove dataHighByte = B11111111; dataLowByte = B11111111; pcf8575_owByte(da,taLowByte(da,taLowByte ); ) void loop() ( // Čitanje bajta iz modula dataReceive = pcf8575_read(); // Ispis na monitor u binarnom formatu Serial.println(dataReceive, BIN); // Izdvoji niži bajt iz duge riječi dataLowByte = lowByte(dataReceive ); // Kopiraj niži bajt u visoki bajt dataHighByte = dataLowByte; // Maskiraj niži bajt dataLowByte |= B11111111; // Zapiši nove podatke u modul, dva bajta pcf8575_write(data); delay(500); ) // Procedura za upisivanje bajta u modul void pcf8575_write(uint8_t dtl, int8_t dth) ( Wire.beginTransmission(address); Wire.write(dtl); // Write low byte (P00... P07) Wire.write(dth); / / Zapiši visoki bajt (P10...P17) Wire.endTransmission(); ) // Procedura za čitanje bajta iz modula int16_t pcf8575_read( ) ( Wire.beginTransmission(adresa); Žica.kraj prijenosa(); Wire.requestFrom(adresa, 2); lo = Wire.read(); // Čitanje niskog bajta (P00...P07) hi = Wire.read(); // Čitanje visokog bajta (P10...P17) return (riječ(hi, lo)); // Vrati dugu riječ)

Arduino knjižnica za PCF8574/PCF8575

Knjižnica se može preuzeti s GitHuba. Ali, kao što vidite, rad s proširivačima portova vrlo je jednostavan i lako možete bez posebne biblioteke.

Jedna od ključnih prednosti Arduino platforme je njena popularnost. Popularnu platformu aktivno podržavaju proizvođači elektroničkih uređaja, izdajući posebne verzije raznih ploča koje proširuju osnovnu funkcionalnost kontrolera. Takve ploče, sasvim logično nazvane ekspanzione ploče (drugi naziv: arduino štit, štit), služe za obavljanje najrazličitijih zadataka i mogu uvelike pojednostaviti život arduinista. U ovom članku ćemo naučiti što je Arduino ploča za proširenje i kako se može koristiti za rad s raznim Arduino uređajima: motori (štitovi pogona motora), LCD zasloni (LCD štitovi), SD kartice (data logger), senzori (oklop senzora) i mnogi drugi.

Prvo razumijemo pojmove. Arduino ploča za proširenje je kompletan uređaj dizajniran za obavljanje određenih funkcija i povezan je s glavnim kontrolerom pomoću standardnih konektora. Drugi popularni naziv za ploču za proširenje je Arduino shield na engleskom jeziku ili jednostavno štit. Sve potrebne elektroničke komponente ugrađene su na ploču za proširenje, a interakcija s mikrokontrolerom i ostalim elementima glavne ploče odvija se putem standardnih arduino pinova. Najčešće se štit također napaja iz glavne arduino ploče, iako ga je u mnogim slučajevima moguće napajati iz drugih izvora. U bilo kojem štitu postoji nekoliko besplatnih pinova koje možete koristiti po vlastitom nahođenju tako da na njih povežete bilo koje druge komponente.

Engleska riječ Shield prevedena je kao štit, zaslon, zaslon. U našem kontekstu to treba shvatiti kao nešto što prekriva upravljačku ploču, čime se stvara dodatni sloj uređaja, ekran iza kojeg se skrivaju različiti elementi.

Zašto su potrebni arduino štitovi?

Sve je vrlo jednostavno: 1) da uštedimo vrijeme i 2) da bi netko mogao zaraditi na tome. Zašto gubiti vrijeme na dizajniranje, postavljanje, lemljenje i otklanjanje pogrešaka nečega što možete uzeti već sastavljeno i odmah početi koristiti? Dobro dizajnirane i sastavljene na visokokvalitetnom hardveru, ploče za proširenje obično su pouzdanije i zauzimaju manje prostora u konačnom uređaju. To ne znači da morate potpuno napustiti samomontažu i ne morate razumjeti princip rada određenih elemenata. Uostalom, pravi inženjer uvijek pokušava razumjeti kako funkcionira ono što koristi. No, moći ćemo napraviti složenije uređaje ako svaki put ne izmislimo kotač, nego usmjerimo pozornost na ono što je malo ljudi riješilo prije nas.

Naravno, morate platiti za prilike. Gotovo uvijek, trošak završnog štita bit će veći od cijene pojedinih komponenti, uvijek možete učiniti sličnu opciju jeftinijom. Ali ovdje je na vama da odlučite koliko je za vas kritično utrošeno vrijeme ili novac. Uzimajući u obzir svu moguću pomoć kineske industrije, cijena ploča stalno se smanjuje, pa se najčešće odabire u korist korištenja gotovih uređaja.

Najpopularniji primjeri štitova su ekspanzione ploče za rad sa senzorima, motori, LCD ekrani, SD kartice, mrežni i GPS štitovi, štitovi s ugrađenim relejima za spajanje na opterećenje.

Povezivanje Arduino štitova

Da biste spojili štit, samo ga trebate pažljivo "staviti" na glavnu ploču. Obično se igle štita češljastog tipa (muški) lako umetnu u konektore Arduino ploče. U nekim slučajevima potrebno je pažljivo podesiti igle ako sama ploča nije uredno zalemljena. Ovdje je glavna stvar pažljivo postupati i ne primjenjivati ​​pretjeranu silu.

U pravilu, štit je dizajniran za vrlo specifičnu verziju kontrolera, iako, na primjer, mnogi Arduino Uno štitovi rade prilično dobro s Arduino Mega pločama. Pinout na mega je napravljen na način da se prvih 14 digitalnih kontakata i kontakti na suprotnoj strani ploče poklapaju s položajem kontakata na UNO-u, tako da štit od arduina lako postaje to.

Programiranje Arduino štita

Programiranje kruga s pločom za proširenje ne razlikuje se od uobičajenog programiranja arduina, jer smo sa stajališta kontrolera jednostavno spojili naše uređaje na njegove uobičajene pinove. U skici morate navesti one igle koje su spojene u štitu na odgovarajuće igle na ploči. Proizvođač u pravilu navodi korespondenciju pinova na samom štitu ili u zasebnom priručniku za povezivanje. Ako preuzmete skice koje je preporučio proizvođač ploče, to nećete ni morati učiniti.

Čitanje ili pisanje signala štita također se obavlja na uobičajeni način: korištenjem funkcija i drugih naredbi koje su poznate svakom arduinistu. U nekim slučajevima mogući su sudari kada ste navikli na ovu shemu povezivanja, a proizvođač je odabrao drugu (na primjer, povukli ste gumb na tlo, a na štitu - na napajanje). Ovdje samo trebate biti oprezni.

U pravilu, ova ploča za proširenje dolazi u arduino setovima i stoga se s njom najčešće susreću arduino ljudi. Štit je prilično jednostavan - njegov je glavni zadatak pružiti prikladnije opcije za spajanje na Arduino ploču. To se postiže dodatnim konektorima za napajanje i uzemljenje, dovedenim na ploču na svaki od analognih i digitalnih pinova. Također na ploči možete pronaći konektore za spajanje vanjskog izvora napajanja (morate instalirati kratkospojnike za prekidač), LED i gumb za ponovno pokretanje. Opcije štita i primjeri korištenja mogu se pronaći na ilustracijama.




Postoji nekoliko verzija ploče za proširenje senzora. Svi se razlikuju po broju i vrsti konektora. Najpopularnije verzije danas su Sensor Shield v4 i v5.

Ovaj arduino štit vrlo je važan u projektima robotike. Omogućuje vam da spojite obične i servo motore na Arduino ploču odjednom. Glavni zadatak štita je osigurati kontrolu nad uređajima koji troše struju koja je dovoljno visoka za običnu arduino ploču. Dodatne značajke ploče su funkcija kontrole snage motora (pomoću PWM) i promjena smjera vrtnje. Postoji mnogo vrsta ploča za zaštitu motora. Zajedničko za sve njih je prisutnost u krugu snažnog tranzistora kroz koji je spojeno vanjsko opterećenje, elementi hladnjaka (obično radijator), krugovi za spajanje vanjskog napajanja, konektori za spajanje motora i pinovi za spajanje na arduino.



Organizacija rada s mrežom jedan je od najvažnijih zadataka u suvremenim projektima. Za spajanje na lokalnu mrežu putem Etherneta postoji odgovarajuća ploča za proširenje.




Izrada prototipa ploča za proširenje

Ove ploče su prilično jednostavne - imaju kontaktne jastučiće za montažne elemente, prikazan je gumb za resetiranje i moguće je spojiti vanjsko napajanje. Svrha ovih štitova je povećati kompaktnost uređaja, kada se sve potrebne komponente nalaze neposredno iznad glavne ploče.





Arduino LCD štit i tft štit

Ova vrsta štita koristi se za rad s LCD ekranima u arduinu. Kao što znate, povezivanje čak i najjednostavnijeg tekstualnog zaslona s 2 retka daleko je od trivijalnog zadatka: trebate ispravno spojiti 6 kontakata zaslona odjednom, ne računajući napajanje. Puno je lakše umetnuti gotov modul u arduino ploču i jednostavno prenijeti odgovarajuću skicu. U popularnom LCD Keypad Shield-u, od 4 do 8 tipki se odmah spaja na ploču, što vam omogućuje da odmah organizirate vanjsko sučelje za korisnika uređaja. TFT Shield također pomaže



Arduino Data Logger Shield

Još jedan zadatak koji je prilično teško samostalno implementirati u svoje proizvode je pohrana podataka primljenih od senzora s vremenskom referencom. Gotovi štit omogućuje ne samo spremanje podataka i primanje vremena od ugrađenog sata, već i povezivanje senzora na prikladan način lemljenjem ili na pločici.




Kratak sažetak

U ovom članku razmotrili smo samo mali dio ogromnog asortimana raznih uređaja koji proširuju funkcionalnost arduina. Ploče za proširenje omogućuju vam da se usredotočite na najvažniju stvar - logiku vašeg programa. Kreatori štitova osigurali su ispravnu i pouzdanu instalaciju, potrebno napajanje. Sve što vam preostaje je pronaći ploču koja vam je potrebna koristeći cijenjenu englesku riječ shield, spojiti je na arduino i prenijeti skicu. Obično se svako programiranje štita sastoji u izvođenju jednostavnih radnji za preimenovanje internih varijabli već završenog programa. Kao rezultat, dobivamo jednostavnost korištenja i povezivanja, kao i brzinu montaže gotovih uređaja ili prototipova.

Nedostatak korištenja ekspanzijskih ploča je njihova cijena i mogući gubitak učinkovitosti zbog svestranosti štitova koja leži u njihovoj prirodi. Za vašu specifičnu aplikaciju ili krajnji uređaj, sve značajke štita možda neće biti potrebne. U tom slučaju trebali biste koristiti štit samo u fazi izrade prototipa i testiranja, a prilikom izrade konačne verzije vašeg uređaja razmislite o tome da ga zamijenite dizajnom s vlastitom shemom i vrstom izgleda. Na vama je, imate sve mogućnosti za pravi izbor.

→ Kako proširiti broj analognih ulaza i izlaza na vašem Arduinu?

Kako proširiti broj analognih ulaza i izlaza na vašem Arduinu?

Multiplekser ili demultiplekser će vam omogućiti da proširite broj ulaza i izlaza na vašem Arduinu.
4051 je 8-kanalni analogni multiplekser/demultiplekser, dakle:
* Ako koristite 4051 kao multiplekser: Možete odabrati bilo koji od 8 različitih ulaza i očitati njegov status na kontroleru.
* Ako koristite 4051 kao demultiplekser, možete odabrati bilo koji od 8 različitih izlaza i tamo upisati željenu vrijednost.

Također, 4051 može rukovati analognim vrijednostima, u vašem Arduinu možete koristiti analogne signale od 0-5V i spojiti IC na analogne ulaze na Arduinu.

Za odabir željenog ulaza mikrosklopa, kao i načina rada čitanja ili pisanja, moramo koristiti tri upravljačka signala (S0, S1 i S2). Svaki od ovih pinova mora biti spojen na jedan od Arduino digitalnih izlaza. Svaki izlaz ima broj (S0 = 1; S1 = 2; S2 = 4) i ako je jedan od ovih izlaza postavljen na visoku logičku razinu tada će broj predstavljenih pinova biti 4051.

Na primjer:
* Ako postavite log “1” na ulaze mikrosklopa S0 i S1 i log “0” na S2, tada je odabran ulaz y3 mikrosklopa, to izgleda ovako (1 +2 +0 = 3).
* Ako postavite log “1” na ulaze mikrosklopa S0 i S2 i log “0” na S1, tada je odabran ulaz y5 mikrokruga, to izgleda ovako (1 + 0 + 4 = 5).

Nije moguće čitati ili pisati status na više od jednog 4051 pina odjednom. Ali možete čitati i zapisivati ​​stanje iz izlaza čipa prilično brzo. Nema potrebe za odgodom između odabira, čitanja ili zapisivanja stanja 4051 pinova.

* Z----- zajednički ulazni ili izlazni signal (povezan s Arduino I/O)
* E ----- omogući ulaz (aktivni dnevnik "0") (povezan na masu (GND))
* Vee --- negativan napon napajanja (spojen na masu (GND))
* GND --- uzemljenje minus (0 V)
* S0-S2 - odaberite ulaze (povezan na tri Arduino digitalna pina)
* y0-Y7 - nezavisni ulazi/izlazi
* Vcc --- napon napajanja pozitivan (5V)



Lijeva slika iznad je primjer kako koristiti multiplekser od 9 za čitanje 64 analogna ulaza sa samo jednim analognim Arduino ulazom.
Desna slika iznad je primjer kako koristiti dva 4051 (jedan konfiguriran kao demultiplekser, a drugi kao multiplekser) u matrici 8x8 za testiranje 64 gumba ili drugih digitalnih ulaza iz samo jednog digitalnog ulaza na Arduinu (iz druge postavke možete imati samo dva gumba u isto vrijeme, inače biste trebali koristiti prvu (lijevu) postavku).

primjer koda:

// Primjer za korištenje 4051 analognog multipleksera/demultipleksera
// od Davida c.

int led = 13; // Postavite LED na 13. nogu
int r0 = 0; // odabir vrijednosti izlaz na 4051 (S0)
int r1 = 0; // odabir vrijednosti izlaz na 4051 (S1)
int r2 = 0; // odabir vrijednosti izlaz na 4051 (S2)
int red = 0; // pohraniti bin kod
int broj = 0; // četka
int bin = ( 000, 1, 10, 11, 100, 101, 110, 111 ) ; // Niz binarnih brojeva koji definiraju broj odabranog ulaza/izlaza 4051 čipa, od 1 do 8.
void setup () ( // INITIALIZE
pinMode (2, IZLAZ) ; // s0 izlaz
pinMode (3, IZLAZ) ; // s1 izlaz
pinMode (4, IZLAZ) ; // s2 izlaz
digitalWrite (led , HIGH) ; //upaliti LED
beginSerial(9600) ; // UART tečaj
}

void loop()(
for (count = 0 ; count ≤ 7 ; count ++) ( // kruži kroz elemente niza od 1 do 8
red = koš [broj];
r0 = red & 0x01;
r1 = (red >> 1) & 0x01 ; //
r2 = (red >> 2) & 0x01 ; //
digitalWrite(2, r0) ;
digitalWrite(3, r1) ;
digitalWrite(4, r2) ;
Serial.println(bin);
kašnjenje (1000) ;

SPI ili I2C ADC čipovi su lako dostupni u nizu razlučivosti, brzina uzorkovanja i broja kanala. Prilično ih je lako dodati na bilo koji Arduino.

Na primjer, MCP3208 će dati 8 kanala 12-bitne rezolucije po SPI, što znači 3 pina (MOSI/MISO/SCK) + 1 po čipu (SS). Dakle, 1 čip će biti 4 igle, 2 čipa 5 igala, 3 čipa 6 igala, itd.

Dodavanje puno IC-a na SPI sabirnicu može biti smetnja samo po sebi s povećanim kapacitetom svih tih ulaza što znači da trebate malo usporiti brzinu slanja poruka ili dodati malo dodatnog međuspremnika kako biste povećali snagu sabirnice.

I2C čipove može biti teže imati jer postoji samo ograničen broj adresa na I2C sabirnici - plus na mnogim Arduinos I2C su također dva analogna pina koje možda ne želite žrtvovati.

Druga opcija uključuje korištenje analognih multipleksora (npr. 4051) za prebacivanje različitih izvora na postojeće analogne ulaze.

Treća opcija, koju vjerojatno niste uzeli u obzir, jest imati više arduina (ili drugih jeftinih mikrokontrolera) svaki koji vrši dohvaćanje i zatim implementira neku metodu komunikacije između njih (ili s jednim masterom). Ovo ima dodatnu prednost što možete uzorkovati više kanala u isto vrijeme (jedan po mikrokontroleru), što donekle ubrzava vaš rad.

Proširujući Maženkov odgovor, možete koristiti analogni multiplekser poput 74HC4051 da jedan analogni port pretvorite u 8.

Njegov rođak, 74HC4067, će multipleksirati 16 portova. Sada sa 6 analognih ulaza na Arduino Uno možete imati 6 x 16 ulaza = 96. A/B/C kontrolni signali mogu biti paralelni.

To će vam omogućiti rukovanje s 96 ulaza sa 6 dodatnih čipova i prilično jednostavnim kodom. Imam primjere koda na svojoj 74HC4051 mux/demux stranici.

Za 8 ulaza kod:

// Primjer korištenja multipleksora/demultipleksera 74HC4051 // Autor: Nick Gammon // Datum: 14. ožujka 2013. const byte senzor = A0; //gdje je spojen ulazni/izlazni port multipleksora // linije za odabir adrese multipleksora (A/B/C) const byte addressA = 6;//bit low-order const byte addressB = 5; const bajt adresaC = 4; //visoki bit void setup()( Serial.begin(115200); Serial.println("Pokretanje testa multipleksera..."); pinMode(addressA, OUTPUT); pinMode(addressB, OUTPUT) ); pinMode (addressC, OUTPUT); ) //kraj postavljanja int readSensor (konstantni bajt koji) ( //odaberite ispravan MUX kanal digitalWrite (adresaA, (koja & 1) ? HIGH: LOW); //bit nižeg reda digitalWrite (adresaB, (koja & 2) ? HIGH: LOW); digitalWrite (adresaC, (koja & 4) ? HIGH: LOW); //bit visokog reda //sada čitajte senzor koji vraća analognoRead (senzor); ) / /kraj readSensor void petlje () ( //prikaži svih 8 očitanja senzora za (bajt i = 0; i< 7; i++) { Serial.print ("Sensor "); Serial.print (i); Serial.print (" reads: "); Serial.println (readSensor (i)); } delay (1000); } //end of loop

Radio sam potpuno isti problem. Trebam program koji očitava 100 termistora... Zašto? pa ako ti treba.

Već sam ga završio.

Isprobao sam 74HC4051 multiplekser/demultiplekser. Ali iz nekog razloga nisam dobio željeni rezultat.

Prvo što ćete naći... NAPAJANJE, trebat će vam vanjsko napajanje, u mom slučaju sam napravio samo djelitelj napona i spojio termistor na to napajanje i onda samo pomoću analognog porta čitam...

Koristim I2C protokol, 8 arduino Mega 7 slaveova i jedan master. i nakon slanja send Integer, float i blah bla mi nisu uspjeli da to jednostavno napravim. Može poslati analogno čitanje preko I2C, a master obavlja sve potrebne konverzije.

Ako ste još zainteresirani, mogu vam poslati izvorni kod za master i slave. S ovim predloškom možete spojiti do 50 arduina i gospodar će tražiti svaki arduino spojen na mrežu i zatražiti podatke.