Arduino Shields - papan pengembangan untuk arduino. Peluasan input analog dalam Arduino Arduino pengembangan port output input

  • 10.02.2022

Artikel Baru

● 5.4. Peluasan port digital untuk NodeMCU ESP8266 menggunakan cip MCP23017

Kami akan memperkenalkan petunjuk LED dan penggera bunyi apabila menggunakan modul Nodemcu sebagai pengawal rumah pintar. Bilangan pin pada modul Nodemcu jauh lebih sedikit daripada pada Arduino Mega, jadi kami memerlukan IC pengembang input MCP23017. Cip MCP23017 menambah 16 port yang boleh dikonfigurasikan untuk kedua-dua input dan output (Rajah 5.7). Cip menggunakan bas I2C dua wayar yang popular.

nasi. 5.7. Pinout MCP23017

Alamat cip MCP23017 untuk protokol I2C boleh ditetapkan dengan gabungan isyarat pada input digital A0 - A2 (Rajah 5.8), yang membolehkan anda menyambungkan 8 cip MCP23017 ke mikropengawal pada masa yang sama, masing-masing 16* 8=128 pin.

nasi. 5.8. Menetapkan alamat cip MCP23017

Cip mempunyai 2 bank port A (GPA0-GPA7) dan B (GPB0-GPAB), setiap satunya boleh dikonfigurasikan untuk input atau output.
Penyenaraian 5.3. menunjukkan contoh penubuhan bank keluaran A dan B.

Penyenaraian 5.3

// menyambungkan perpustakaan Wire.h #termasuk input bait=0 ; persediaan batal()( Serial.begin(9600 ); Wire.begin(0 ,2); // mulakan I2C Wire.beginTransmission(0x20 ); // i2c - alamat (A0-0,A1-0,A2-0) Wire.write(0x00); // IODIRA daftar Wire.write(0x00 ); // tetapkan PORT A sebagai output Wire.endTransmission(); ) gelung kosong(){ // baca data dari PORT B Wire.beginTransmission(0x20 ); Wire.write(0x13 ); Wire.endTransmission(); Wire.requestFrom(0x20 , 1 ); input=Wire.read(); // tulis data yang diterima ke PORT A Wire.beginTransmission(0x20 ); Wire.write(0x12 ); // alamat PORT A Wire.write(input); // PORT A Wire.endTransmission(); kelewatan(100); // jeda)

Penggunaan cip MCP23017 akan mengembangkan bilangan kenalan digital modul Nodemcu sebanyak 16 dan akan membolehkan mengatur petunjuk LED dan isyarat boleh didengar bagi parameter sensor kritikal.

Semua orang menyukai papan Arduino yang murah, tetapi selalunya projek benar-benar kehilangan satu atau dua port percuma! Dan kadangkala terdapat port yang mencukupi, tetapi anda tidak mahu menarik sekumpulan wayar ke bahagian lain struktur. Katakan anda perlu meletakkan beberapa butang dan LED pada panel hadapan peranti. Ia lebih dipercayai dan lebih mudah untuk menyambungkannya ke papan utama dengan hanya dua wayar bas data, dan bukan dengan kabel atau abah-abah, bukan?

Untuk situasi sedemikian, pelbagai pengembang (pengembang) port Arduino direka bentuk.

Biasanya, pin mikropengawal melaksanakan beberapa fungsi yang berbeza, jadi pengembang adalah berbeza:

  1. Pengembang Pelabuhan GPIO Standard
  2. Pengembang keluaran PWM
  3. Pengembang input analog - pemultipleks dan ADC luaran

Secara berasingan, adalah wajar menyebut penukar digital-ke-analog (DAC) dan pengembang ruang alamat bas I2C. Peranti ini tidak secara langsung menduplikasi fungsi port, tetapi mengembangkan keupayaan mikropengawal.

Dalam artikel pertama siri ini, kita akan bercakap tentang pengembang paling mudah dan paling berguna yang berfungsi sebagai port I / O digital. Ini adalah litar mikro dan. Mereka disusun dan berfungsi sama sekali, dan hanya berbeza dalam bilangan port.

Memilih modul pengembang untuk Arduino

Modul yang paling popular dan murah dibuat pada cip PCF8574 (Rajah 1)

nasi. 1. Modul pengembang port PCF8574 yang popular

Kelebihan:
  • Harga rendah.
  • Modul boleh disambungkan dalam rantai dengan hanya memasukkan palam satu modul ke dalam soket yang sebelumnya. Jangan lupa untuk menetapkan pelompat kepada alamat modul yang berbeza!
Kelemahan:
  • Tidak boleh dimasukkan terus ke papan roti (saya cadangkan pematerian penyambung port ke bahagian belakang).
  • Sebanyak lapan port dalam satu modul.

Jika anda berada dalam mood untuk projek yang lebih serius, pesan modul 16-bit untuk PCF8575 di Aliexpress. Saya amat mengesyorkan modul yang ditunjukkan dalam Rajah. 2.

nasi. 2. Modul pengembang port PCF8575

Kelebihan:
  • Dua kali ganda lebih banyak port.
  • Bekalan kuasa 3.3V terbina dalam, anda boleh kuasa modul lain.
  • Padanan tahap logik terbina dalam untuk bas I2C pada voltan bekalan yang berbeza.
  • Format yang mudah untuk papan roti.
Kelemahan:
  • Atas harga.

Bagaimana PCF8574/PCF8575 GPIO Port Expander Berfungsi

Pertukaran data berlaku melalui bas I2C. Hanya empat wayar diperlukan untuk menyambung ke papan Arduino, termasuk kuasa. Alamat pengembang ditetapkan oleh tiga pelompat pada input A0…A2, jadi lapan cip yang sama boleh disambungkan ke bas pada masa yang sama dan mendapat maksimum 8*8=64 port tambahan dengan PCF8574 atau 8*16=128 dengan PCF8575 cip.

Untuk mengeluarkan data ke port, tulis bait data ke alamat modul pada bas I2C. Untuk membaca data dari port, baca bait pada alamat yang sama. Satu bait sentiasa ditulis dan dibaca secara keseluruhan, kerja dengan digit individu dilakukan secara pengaturcaraan.

Output litar mikro adalah input serentak, dan tiada daftar perkhidmatan yang menentukan tujuan output. Hanya terdapat selak di mana bait keluaran ditulis. Bagaimana ini boleh berlaku?

Pelabuhan beroperasi dengan cara pengumpul terbuka dan mempunyai perintang tarik-ke atas dalaman. Jika sifar logik ditulis pada output, maka transistor output terbuka, yang secara paksa menarik output "ke tanah". Membaca dari port sedemikian akan sentiasa mengembalikan sifar.

Berhati-hati apabila menggunakan voltan bekalan terus ke pin dengan paras rendah atau jika arus melebihi 50 mA anda akan merosakkan cip!

Untuk menggunakan port sebagai input, tulis satu port padanya. Dalam kes ini, transistor dalaman akan ditutup, dan hasil bacaan akan ditentukan oleh tahap logik luaran yang digunakan pada pin. Keluaran percuma ditarik ke atas kuasa oleh perintang terbina dalam.

Untuk menggunakan beberapa port secara serentak sebagai input dan beberapa sebagai output, sebelum setiap bait data ditulis kepada pengembang, adalah perlu untuk menggunakan topeng unit pada bit tersebut yang sepadan dengan input menggunakan operasi "OR logik" . Itu sahaja)))

Penjanaan gangguan

PCF857* Pengembang Pelabuhan Menjana Nadi Gangguan Level rendah pada output INT dengan sebarang perubahan dalam isyarat input pada sebarang input litar mikro. Ini mudah jika pengembang menyediakan pad kekunci. Tetapi anda mesti menentukan dalam pengendali gangguan butang yang ditekan atau dilepaskan. Penjana gangguan dilengkapi dengan penapis penindasan chatter.

Contoh 1: Menggunakan modul PCF8574

Mari kita pasangkan litar ringkas empat LED, modul PCF8574 dan papan Arduino (Rajah 3 dan 4). Dengan skim pensuisan ini, kita tidak memerlukan perintang pelindapkejutan untuk LED. Arus mengalir melalui LED dan perintang terbina dalam disambungkan ke rel kuasa.

nasi. 3. Gambar rajah pendawaian modul PCF8574

nasi. 4. Susun atur litar dengan modul PCF8574

Salin dan tampal lakaran 1 ke dalam papan Arduino:

// Alamat modul pada bas (A0, A1, A2 = 0) alamat int = 0x38; // Data dibaca daripada modul uint8_t dataReceive; // Data untuk ditulis ke modul uint8_t dataSend; void setup() ( Wire.begin(); Serial.begin(9600); // Tinggi kepada semua port PCF8574 dataSend = B11111111; pcf8574_write(dataSend); ) void loop() ( // Baca bait daripada modul dataReceive = pcf8574_read (); // Output ke monitor dalam format binari Serial.println(dataReceive, BIN); // Alihkan bit yang ditinggalkan oleh data nibbleSend = 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()); }

Tahap tinggi pada mulanya ditulis ke semua port litar mikro, jadi port P0 ... P3 boleh berfungsi sebagai input.

Tahap pada pin port dibaca setiap 500 ms dan hasil bacaan dipaparkan pada monitor. Jika anda menyambungkan salah satu input P0…P3 kepada wayar biasa, sifar muncul dalam bitnya. Kemudian nilai baca dialihkan ke kiri sebanyak empat bit, hasilnya adalah output ke port dan salah satu LED padam. Contohnya, jika sifar dibaca pada pin P0, maka LED yang disambungkan ke pin P4 akan dimatikan.

Sila ambil perhatian bahawa sebelum setiap menulis kepada pengembang, kita mesti menggunakan topeng sedikit pada semua bit yang sepatutnya menjadi input: dataSend |= B00001111;

Subrutin untuk bekerja dengan bas I2C sangat dipermudahkan, tiada ralat diproses.

Nasihat: untuk mencari dan menyemak alamat modul pada bas I2C, anda boleh menggunakan . Ia mengeluarkan kepada terminal alamat semua peranti yang bertindak balas kepada permintaan bas.

Contoh 2: Menggunakan modul PCF8575

Keistimewaan modul PCF8575 ialah ia mempunyai 16 port, jadi ia sentiasa tulis dua bait dan baca dua bait. Peraturan ini mesti dipatuhi walaupun bait kedua tidak diperlukan.

Mari kita ubah sedikit skema. Kami akan menyambungkan LED ke port P10 ... P13, dan kami akan menyambungkan port P00 ... P03 dengan pelompat ke wayar biasa (Rajah 5 dan 6).

nasi. 5. Gambar rajah pendawaian modul PCF8575

nasi. 6. Susun atur litar dengan modul PCF8575

Lakaran 2 mula-mula menulis satu ke semua port, kemudian membaca keadaannya setiap 500 ms. Prosedur baca mengembalikan perkataan 16-bit yang dibahagikan kepada bait. Kandungan bait rendah (pin P00…P07) disalin ke bait tinggi dan dimuat naik semula ke modul. Jika salah satu daripada output P00…P03 disambungkan ke wayar biasa, maka salah satu LED yang disambungkan ke P10…P13 akan padam.

// Perpustakaan untuk bekerja dengan I2C #include // Alamat modul pada bas secara lalai alamat int = 0x20; // Data dibaca daripada modul uint8_t hi, lo; data uint16_tTerima; uint8_tdataHighByte; // Bait tinggi (P10...P17) uint8_t dataLowByte; // Persediaan void byte rendah (P00...P07) () ( Wire.begin(); Serial.begin(9600); // Tahap tinggi untuk semua port PCF8575 dataHighByte = B11111111; dataLowByte = B11111111; pcf8575_write_write(,dataLoghByte(,LoghByte) ); ) void loop() ( // Baca bait daripada modul dataReceive = pcf8575_read(); // Cetak ke monitor dalam format binari Serial.println(dataReceive, BIN); // Ekstrak bait rendah daripada perkataan panjang dataLowByte = lowByte(dataReceive ); // Salin bait rendah ke data bait tinggiHighByte = dataLowByte; // Topeng data bait rendahLowByte |= B11111111; // Tulis data baharu pada modul, dua bait pcf8575_write(dataHighByte); kelewatan(500); ) // Prosedur untuk menulis bait ke modul void pcf8575_write(uint8_t dtl, int8_t dth) ( Wire.beginTransmission(alamat); Wire.write(dtl); // Tulis bait rendah (P00... P07) Wire.write(dth); / / Tulis bait tinggi (P10...P17) Wire.endTransmission(); ) // Prosedur untuk membaca bait daripada modul int16_t pcf8575_read( ) ( Wire.beginTransmission(alamat); Wire.endTransmission(); Wire.requestFrom(alamat, 2); lo = Wire.read(); // Baca bait rendah (P00...P07) hi = Wire.read(); // Baca bait tinggi (P10...P17) return (word(hi, lo)); // Kembalikan perkataan panjang )

Perpustakaan Arduino untuk PCF8574/PCF8575

Perpustakaan boleh dimuat turun dari GitHub. Tetapi, seperti yang anda lihat, bekerja dengan pemanjang pelabuhan adalah sangat mudah dan anda boleh melakukannya dengan mudah tanpa perpustakaan khas.

Salah satu kelebihan utama platform Arduino ialah popularitinya. Platform popular disokong secara aktif oleh pengeluar peranti elektronik, mengeluarkan versi khas pelbagai papan yang mengembangkan fungsi asas pengawal. Papan sedemikian, secara logiknya dipanggil papan pengembangan (nama lain: perisai arduino, perisai), berfungsi untuk melaksanakan pelbagai jenis tugas dan boleh memudahkan kehidupan arduinian. Dalam artikel ini, kita akan mempelajari apa itu papan pengembangan Arduino dan cara ia boleh digunakan untuk berfungsi dengan pelbagai peranti Arduino: motor (perisai pemacu motor), skrin LCD (perisai LCD), kad SD (pelog data), penderia. (perisai sensor) dan lain-lain lagi.

Mari kita fahami terlebih dahulu syarat-syaratnya. Papan pengembangan Arduino ialah peranti lengkap yang direka untuk melaksanakan fungsi tertentu dan disambungkan kepada pengawal utama menggunakan penyambung standard. Satu lagi nama popular untuk papan pengembangan ialah perisai Arduino bahasa Inggeris atau hanya perisai. Semua komponen elektronik yang diperlukan dipasang pada papan pengembangan, dan interaksi dengan mikropengawal dan elemen lain papan utama berlaku melalui pin arduino standard. Selalunya, perisai juga dikuasakan dari papan arduino utama, walaupun dalam banyak kes adalah mungkin untuk menghidupkannya dari sumber lain. Dalam mana-mana perisai, terdapat beberapa pin percuma yang boleh anda gunakan mengikut budi bicara anda dengan menyambungkan mana-mana komponen lain kepada mereka.

Perkataan Inggeris Shield diterjemahkan sebagai perisai, skrin, skrin. Dalam konteks kita, ia harus difahami sebagai sesuatu yang meliputi papan pengawal, yang mencipta lapisan tambahan peranti, skrin di belakangnya di mana pelbagai elemen tersembunyi.

Mengapa perisai arduino diperlukan?

Segala-galanya sangat mudah: 1) supaya kita menjimatkan masa, dan 2) seseorang boleh menjana wang daripadanya. Mengapa membuang masa mereka bentuk, meletakkan, memateri dan menyahpepijat sesuatu yang anda boleh ambil yang sudah dipasang dan mula menggunakan serta-merta? Direka bentuk dan dipasang dengan baik pada perkakasan berkualiti tinggi, papan pengembangan biasanya lebih dipercayai dan menggunakan lebih sedikit ruang dalam peranti akhir. Ini tidak bermakna anda perlu meninggalkan sepenuhnya pemasangan diri dan tidak perlu memahami prinsip operasi elemen tertentu. Lagipun, seorang jurutera sebenar sentiasa cuba memahami cara apa yang dia gunakan berfungsi. Tetapi kita akan dapat membuat peranti yang lebih kompleks jika kita tidak mencipta semula roda setiap kali, tetapi menumpukan perhatian kita pada perkara yang telah diselesaikan oleh beberapa orang sebelum kita.

Sememangnya, anda perlu membayar untuk peluang. Hampir selalu, kos perisai akhir akan lebih tinggi daripada harga komponen individu, anda sentiasa boleh membuat pilihan yang sama lebih murah. Tetapi di sini terpulang kepada anda untuk memutuskan betapa kritikalnya masa atau wang yang dibelanjakan untuk anda. Dengan mengambil kira semua kemungkinan bantuan daripada industri China, kos papan sentiasa berkurangan, jadi selalunya pilihan dibuat memihak kepada menggunakan peranti siap pakai.

Contoh perisai yang paling popular ialah papan pengembangan untuk bekerja dengan penderia, motor, skrin LCD, kad SD, rangkaian dan perisai GPS, perisai dengan geganti terbina dalam untuk menyambung kepada beban.

Menyambung Arduino Shields

Untuk menyambungkan perisai, anda hanya perlu berhati-hati "meletakkannya" pada papan utama. Biasanya, pin perisai jenis sikat (lelaki) mudah dimasukkan ke dalam penyambung papan Arduino. Dalam sesetengah kes, ia dikehendaki mengubah suai pin dengan teliti jika papan itu sendiri tidak dipateri dengan kemas. Perkara utama di sini adalah untuk bertindak dengan berhati-hati dan tidak menggunakan daya yang berlebihan.

Sebagai peraturan, perisai direka untuk versi pengawal yang sangat khusus, walaupun, sebagai contoh, banyak perisai Arduino Uno berfungsi dengan baik dengan papan Arduino Mega. Pinout pada mega dibuat sedemikian rupa sehingga 14 kenalan digital pertama dan kenalan di sisi bertentangan papan bertepatan dengan lokasi kenalan pada UNO, jadi perisai dari arduino mudah menjadinya.

Pengaturcaraan Arduino Shield

Memprogramkan litar dengan papan pengembangan tidak berbeza daripada pengaturcaraan biasa arduino, kerana dari sudut pandangan pengawal, kami hanya menyambungkan peranti kami ke pin biasa. Dalam lakaran, anda perlu menentukan pin yang disambungkan dalam perisai ke pin yang sepadan pada papan. Sebagai peraturan, pengilang menunjukkan korespondensi pin pada perisai itu sendiri atau dalam manual sambungan yang berasingan. Jika anda memuat turun lakaran yang disyorkan oleh pengeluar papan, anda tidak perlu berbuat demikian.

Membaca atau menulis isyarat perisai juga dilakukan dengan cara biasa: menggunakan fungsi, dan arahan lain yang biasa kepada mana-mana arduinist. Dalam sesetengah kes, perlanggaran mungkin berlaku apabila anda terbiasa dengan skema sambungan ini, dan pengeluar telah memilih satu lagi (contohnya, anda menarik butang ke tanah, dan pada perisai - untuk berkuasa). Di sini anda hanya perlu berhati-hati.

Sebagai peraturan, papan pengembangan ini datang dalam kit arduino dan oleh itu dengan itu orang arduino paling kerap bertemu. Perisainya agak mudah - tugas utamanya ialah menyediakan pilihan yang lebih mudah untuk menyambung ke papan Arduino. Ini dilakukan melalui penyambung kuasa dan tanah tambahan, dibawa ke papan ke setiap pin analog dan digital. Juga pada papan anda boleh mencari penyambung untuk menyambungkan sumber kuasa luaran (anda perlu memasang pelompat untuk menukar), LED dan butang mulakan semula. Pilihan perisai dan contoh penggunaan boleh didapati dalam ilustrasi.




Terdapat beberapa versi papan pengembangan sensor. Kesemuanya berbeza dalam bilangan dan jenis penyambung. Yang paling popular hari ini ialah versi Sensor Shield v4 dan v5.

Perisai arduino ini sangat penting dalam projek robotik. Membolehkan anda menyambungkan motor biasa dan servo ke papan Arduino sekaligus. Tugas utama perisai adalah untuk menyediakan kawalan peranti yang menggunakan arus yang cukup tinggi untuk papan arduino biasa. Ciri tambahan papan adalah fungsi mengawal kuasa motor (menggunakan PWM) dan menukar arah putaran. Terdapat banyak jenis papan perisai motor. Biasa kepada mereka semua ialah kehadiran dalam litar transistor yang berkuasa di mana beban luaran disambungkan, elemen sink haba (biasanya radiator), litar untuk menyambungkan kuasa luaran, penyambung untuk menyambungkan motor dan pin untuk menyambung ke arduino.



Organisasi kerja dengan rangkaian adalah salah satu tugas yang paling penting dalam projek moden. Untuk menyambung ke rangkaian kawasan setempat melalui Ethernet, terdapat papan pengembangan yang sepadan.




Papan Pengembangan Prototaip

Papan ini agak mudah - mereka mempunyai pad kenalan untuk elemen pemasangan, butang set semula dipaparkan dan mungkin untuk menyambungkan kuasa luaran. Tujuan perisai ini adalah untuk meningkatkan kekompakan peranti, apabila semua komponen yang diperlukan terletak tepat di atas papan utama.





Perisai LCD Arduino dan perisai tft

Perisai jenis ini digunakan untuk berfungsi dengan skrin LCD dalam arduino. Seperti yang anda ketahui, menyambung walaupun skrin teks 2 baris yang paling mudah adalah jauh dari tugas remeh: anda perlu menyambungkan 6 kenalan skrin dengan betul sekali gus, tidak mengira bekalan kuasa. Lebih mudah untuk memasukkan modul siap pakai ke dalam papan arduino dan hanya memuat naik lakaran yang sepadan. Dalam Perisai Papan Kekunci LCD yang popular, daripada 4 hingga 8 butang disambungkan dengan serta-merta ke papan, yang membolehkan anda segera mengatur antara muka luaran untuk pengguna peranti. TFT Shield juga membantu



Perisai Logger Data Arduino

Satu lagi tugas yang agak sukar untuk dilaksanakan sendiri dalam produk anda ialah penyimpanan data yang diterima daripada penderia dengan rujukan masa. Perisai siap sedia membolehkan bukan sahaja untuk menjimatkan data dan menerima masa dari jam terbina dalam, tetapi juga untuk menyambungkan sensor dengan cara yang mudah dengan pematerian atau pada papan litar.




Ringkasan Ringkas

Dalam artikel ini, kami telah mempertimbangkan hanya sebahagian kecil daripada rangkaian besar pelbagai peranti yang mengembangkan fungsi arduino. Papan pengembangan membolehkan anda memberi tumpuan kepada perkara yang paling penting - logik program anda. Pencipta perisai menyediakan pemasangan yang betul dan boleh dipercayai, bekalan kuasa yang diperlukan. Apa yang tinggal untuk anda ialah mencari papan yang anda perlukan menggunakan perisai perkataan Inggeris yang dihargai, sambungkannya ke arduino dan muat naik lakaran. Biasanya, sebarang pengaturcaraan perisai terdiri daripada melakukan tindakan mudah untuk menamakan semula pembolehubah dalaman program yang telah siap. Akibatnya, kami mendapat kemudahan penggunaan dan sambungan, serta kelajuan pemasangan peranti atau prototaip siap.

Kelemahan menggunakan papan pengembangan ialah kosnya dan kemungkinan kehilangan kecekapan disebabkan oleh kepelbagaian perisai yang terletak pada sifatnya. Untuk aplikasi khusus atau peranti akhir anda, semua ciri perisai mungkin tidak diperlukan. Dalam kes ini, anda harus menggunakan perisai hanya pada peringkat prototaip dan ujian, dan apabila mencipta versi akhir peranti anda, fikirkan tentang menggantikannya dengan reka bentuk dengan skema dan jenis reka letak anda sendiri. Terpulang kepada anda, anda mempunyai semua kemungkinan untuk pilihan yang tepat.

→ Bagaimana untuk mengembangkan bilangan input dan output analog pada Arduino anda?

Bagaimana untuk mengembangkan bilangan input dan output analog pada Arduino anda?

Multiplexer atau demultiplexer akan membolehkan anda mengembangkan bilangan input dan output pada Arduino anda.
4051 ialah pemultipleks/demultiplexer analog 8 saluran, oleh itu:
* Jika anda menggunakan 4051 sebagai pemultipleks: Anda boleh memilih mana-mana daripada 8 input berbeza dan membaca statusnya kepada pengawal.
* Jika anda menggunakan 4051 sebagai demultiplexer, anda boleh memilih mana-mana daripada 8 output berbeza dan tulis nilai yang anda inginkan di sana.

Selain itu, 4051 boleh mengendalikan nilai analog, dalam Arduino anda, anda boleh menggunakan isyarat analog 0-5V dan menyambungkan IC ke input analog pada Arduino.

Untuk memilih input litar mikro yang dikehendaki serta mod operasi baca atau tulis, kita mesti menggunakan tiga isyarat kawalan (S0, S1 dan S2). Setiap pin ini mesti disambungkan ke salah satu output digital Arduino. Setiap output mempunyai nombor (S0 = 1; S1 = 2; S2 = 4) dan jika salah satu daripada output ini ditetapkan pada tahap logik yang tinggi maka bilangan pin yang diwakili ialah 4051.

Sebagai contoh:
* Jika anda menetapkan log "1" pada input litar mikro S0 dan S1 dan log "0" pada S2, maka input y3 litar mikro dipilih, ia kelihatan seperti ini (1 +2 +0 = 3).
* Jika anda menetapkan log "1" pada input litar mikro S0 dan S2 dan log "0" pada S1, maka input y5 litar mikro dipilih, ia kelihatan seperti ini (1 +0 +4 = 5).

Tidak boleh membaca atau menulis status kepada lebih daripada satu pin 4051 pada satu masa. Tetapi anda boleh membaca dan menulis keadaan dari output cip dengan agak cepat. Tidak perlu penangguhan antara memilih, membaca atau menulis keadaan 4051 pin.

* Z----- isyarat input atau output biasa (disambungkan dengan Arduino I/O)
* E ----- dayakan input (log aktif "0") (disambungkan ke tanah (GND))
* Vee --- voltan bekalan negatif (disambungkan ke tanah (GND ))
* GND --- ground negatif (0 V)
* S0-S2 - pilih input (disambungkan kepada tiga pin digital Arduino)
* y0-Y7 - input/output bebas
* Vcc --- voltan bekalan positif (5V)



Imej kiri di atas adalah contoh cara menggunakan pemultipleks 9 untuk membaca 64 input analog dengan hanya satu input analog Arduino.
Imej kanan di atas ialah contoh cara menggunakan dua 4051s (satu dikonfigurasikan sebagai demultiplexer dan satu sebagai multiplexer) dalam matriks 8x8 untuk menguji 64 butang atau input digital lain daripada hanya satu input digital pada Arduino (dari persediaan kedua anda hanya boleh mempunyai dua butang pada satu masa). pada masa yang sama, jika tidak, anda harus menggunakan tetapan pertama (kiri).

Contoh kod:

// Contoh untuk menggunakan 4051 pemultipleks analog/demultiplexer
// oleh david c.

int led = 13 ; // Sediakan LED pada kaki ke-13
int r0 = 0 ; // nilai pilih output kepada 4051 (S0)
int r1 = 0 ; // nilai pilih output kepada 4051 (S1)
int r2 = 0 ; // nilai pilih output kepada 4051 (S2)
baris int = 0 ; // simpan kod tong sampah
int count = 0 ; // berus
int bin = ( 000, 1, 10, 11, 100, 101, 110, 111); // Tatasusunan nombor binari yang mentakrifkan nombor input / output yang dipilih bagi cip 4051, dari 1 hingga 8.
persediaan void () ( // MULAKAN
pinMode (2 , OUTPUT) ; // s0 keluar
pinMode (3 , OUTPUT) ; // s1 keluar
pinMode (4 , OUTPUT) ; // s2 keluar
digitalWrite (led , HIGH) ; // nyalakan LED
beginSerial(9600); // Kadar pertukaran UART
}

gelung kosong()(
for (count = 0 ; count ≤ 7 ; count ++) ( // kitaran melalui elemen tatasusunan dari 1 hingga 8
row = bin [ count ] ;
r0 = baris & 0x01 ;
r1 = (baris >> 1) & 0x01 ; //
r2 = (baris >> 2) & 0x01 ; //
digitalWrite(2, r0);
digitalWrite(3, r1);
digitalWrite(4, r2);
Serial.println(bin);
kelewatan(1000);

Cip SPI atau I2C ADC tersedia dalam pelbagai resolusi, kadar sampel dan bilangan saluran. Mereka agak mudah untuk ditambahkan pada mana-mana Arduino.

Sebagai contoh, MCP3208 akan memberikan 8 saluran resolusi 12-bit setiap SPI, yang bermaksud 3 pin (MOSI/MISO/SCK) + 1 setiap cip (SS). Jadi 1 cip akan menjadi 4 pin, 2 cip 5 pin, 3 cip 6 pin, dsb.

Menambah banyak IC pada bas SPI walaupun boleh menjadi kacau ganggu dengan sendirinya dengan peningkatan kapasiti semua input tersebut bermakna anda perlu memperlahankan sedikit kelajuan pemesejan atau menambah beberapa penimbalan tambahan untuk memandu bas dengan lebih berat.

Cip I2C boleh menjadi lebih rumit untuk dimiliki kerana hanya terdapat bilangan alamat yang terhad pada bas I2C - ditambah pada kebanyakan Arduinos I2C juga merupakan dua pin analog yang mungkin anda tidak mahu korbankan.

Pilihan kedua melibatkan penggunaan pemultipleks analog (cth 4051) untuk menukar sumber berbeza kepada input analog sedia ada.

Pilihan ketiga, yang mungkin anda tidak pertimbangkan, adalah untuk mempunyai berbilang arduino (atau mikropengawal lain yang murah) masing-masing melakukan beberapa pengambilan dan kemudian melaksanakan beberapa kaedah komunikasi antara mereka (atau dengan tuan tunggal). Ini mempunyai faedah tambahan kerana dapat mencuba berbilang saluran pada masa yang sama (satu setiap mikropengawal), yang mempercepatkan kerja anda.

Memperluas jawapan Mazhenko, anda boleh menggunakan pemultipleks analog seperti 74HC4051 untuk menukar satu port analog menjadi 8.

Sepupunya, 74HC4067, akan memultiplekskan 16 port. Kini dengan 6 input analog pada Arduino Uno anda boleh mempunyai 6 x 16 input = 96. Isyarat kawalan A/B/C boleh selari.

Ini akan membolehkan anda mengendalikan 96 input dengan 6 cip tambahan dan kod yang agak mudah. Saya mempunyai contoh kod pada halaman 74HC4051 mux/demux saya.

Untuk 8 kod input:

// Contoh penggunaan pemultipleks/demultiplexer 74HC4051 // Pengarang: Nick Gammon // Tarikh: 14 Mac 2013 const byte sensor = A0; //di mana pemultipleks masuk/keluar port disambungkan // pemultipleks alamat pilih baris (A/B/C) const byte addressA = 6;//rendah bit const byte alamatB = 5; const byte addressC = 4; //penyediaan void bit pesanan tinggi()( Serial.begin(115200); Serial.println("Memulakan ujian multiplexer...");pinMode(addressA, OUTPUT);pinMode(addressB, OUTPUT );pinMode (addressC, OUTPUT); ) //akhir persediaan int readSensor (const byte which) ( //pilih saluran MUX digitalWrite yang betul (alamatA, (yang & 1) ? HIGH: LOW); //low-order bit digitalWrite (alamatB, (yang & 2) ? TINGGI: RENDAH); digitalWrite (alamatC, (yang & 4) ? TINGGI: RENDAH); //bit pesanan tinggi //kini baca pemulangan sensor analogRead (sensor); ) / /end of readSensor void loop () ( //tunjukkan kesemua 8 bacaan sensor untuk (bait i = 0; i< 7; i++) { Serial.print ("Sensor "); Serial.print (i); Serial.print (" reads: "); Serial.println (readSensor (i)); } delay (1000); } //end of loop

Saya menyelesaikan masalah yang sama. Saya memerlukan program yang membaca 100 termistor... Mengapa? baik, jika anda memerlukannya.

Saya sudah selesaikannya.

Saya mencuba pemultipleks/demultiplexer 74HC4051. Tetapi atas sebab tertentu saya tidak mendapat hasil yang diingini.

Perkara pertama yang anda akan dapati... POWER, anda memerlukan bekalan kuasa luaran, dalam kes saya, saya hanya membuat pembahagi voltan dan menyambungkan termistor ke kuasa itu dan kemudian hanya menggunakan port analog untuk membaca...

Saya menggunakan protokol I2C, 8 hamba arduino Mega 7 dan satu tuan. dan selepas menghantar hantar Integer, float dan bla bla tidak berjaya untuk saya lakukan sahaja. Ia boleh menghantar bacaan analog melalui I2C dan tuan melakukan semua penukaran yang diperlukan.

Jika anda masih berminat, saya boleh menghantar kod sumber untuk tuan dan hamba. Dengan templat ini, anda boleh menyambung sehingga 50 arduino dan tuan akan mencari setiap arduino yang disambungkan pada rangkaian dan meminta data.