Arduino Shields – плати розширення для Ардуїно. Розширення аналогових входів Arduino Arduino збільшення портів введення виводу

  • 10.02.2022

Нові статті

● 5.4. Розширення цифрових портів для NodeMCU ESP8266 за допомогою мікросхеми MCP23017

Введемо світлодіодну індикацію та звукову сигналізацію та при використанні в якості контролера розумного будинку модуля Nodemcu. Кількість висновків у модуля Nodemcu набагато менша, ніж у Arduino Mega, тому нам знадобиться мікросхема розширювача входів MCP23017. Мікросхема MCP23017 додає 16 портів, які можна налаштувати як на вхід, так і на вихід (рис. 5.7). Мікросхема використовує популярну двопровідну шину I2C.

Рис. 5.7. Висновки мікросхеми MCP23017

Адреса мікросхеми MCP23017 для протоколу I2C можна встановити комбінацією сигналів на цифрових входах A0 - A2 (рис. 5.8), що дозволяє до мікроконтролера підключити одночасно 8 мікросхем MCP23017 відповідно 16*8=128 контактів.

Рис. 5.8. Встановлення адреси мікросхеми MCP23017

Мікросхема має 2 банки портів A (GPA0-GPA7) і B (GPB0-GPAB), кожен з яких можна налаштувати на введення або виведення.
У лістингу 5.3. показаний приклад налаштування банків висновків A та B.

Лістинг 5.3

// Підключення бібліотеки Wire.h #include byte input=0; void setup ()( Serial.begin(9600 ); Wire.begin(0 ,2 ); // запуск I2C Wire.beginTransmission(0x20 ); // i2c - адреса (A0-0, A1-0, A2-0) Wire.write(0x00); // IODIRA register Wire.write(0x00); // налаштувати PORT A як output Wire.endTransmission(); ) void loop (){ // Читання даних із PORT B Wire.beginTransmission(0x20); Wire.write(0x13); Wire.endTransmission(); Wire.requestFrom(0x20 , 1 ); input=Wire.read(); // записати отримані дані в PORT A Wire.beginTransmission(0x20); Wire.write(0x12); // address PORT A Wire.write(input); // PORT A Wire.endTransmission(); delay(100); // пауза)

Використання мікросхеми MCP23017 дозволить розширити кількість цифрових контактів модуля Nodemcu на 16 та дозволить організувати світлодіодну індикацію та звукову сигналізацію про критичні параметри датчиків.

Усім хороші недорогі плати Arduino, але так часто для проекту не вистачає буквально одного-двох вільних портів! А іноді портів вистачає, але не хочеться тягнути до іншої частини конструкції пучок дротів. Допустимо, на передній панелі пристрою треба розмістити кілька кнопок та світлодіодів. Надійніше та простіше з'єднати їх з основною платою всього двома проводами шини даних, а не шлейфом чи джгутом, чи не так?

Для таких ситуацій призначені різноманітні розширювачі (експандери) портів Arduino.

Зазвичай висновки мікроконтролера реалізують кілька різних функцій, тому розширювачі бувають різні:

  1. Розширювач стандартних портів введення-виводу GPIO
  2. Розширювач виходів ШІМ
  3. Розширювачі аналогових входів – мультиплексори та зовнішні АЦП

Окремо варто згадати цифро-аналогові перетворювачі (ЦАП) та розширювачі адресного простору шини I2C. Ці пристрої не дублюють функції портів безпосередньо, але розширюють можливості мікроконтролерів.

У першій статті циклу ми поговоримо про найпростіші та найкорисніші експандери, які працюють як цифрові порти введення-виводу. Це мікросхеми та . Вони влаштовані та працюють абсолютно ідентично, і різняться лише кількістю портів.

Вибираємо модуль розширювача для Arduino

Найпопулярніший та недорогий модуль виготовлений на мікросхемі PCF8574 (рис. 1)

Рис. 1. Популярний модуль розширювача портів PCF8574

Переваги:
  • Низька ціна.
  • Модулі можна з'єднувати ланцюжком, просто вставляючи штекери одного модуля до гнізда попереднього. Не забудьте встановити перемичками різні адреси модулів!
Недоліки:
  • Не можна вставити прямо в макетну плату (рекомендую перепаяти роз'єм портів на зворотний бік).
  • Усього вісім портів в одному модулі.

Якщо ви налаштовані на більш серйозні проекти, замовте Aliexpress 16-розрядний модуль на PCF8575 . Настійно рекомендую саме модуль, зображений на рис. 2.

Рис. 2. Модуль розширювача портів PCF8575

Переваги:
  • Вдвічі більше портів.
  • Вбудований джерело живлення на 3.3 вольт, можна живити інші модулі.
  • Вбудоване узгодження логічних рівнів для шини I2C при різній напрузі живлення.
  • Зручний формат для макетної плати.
Недоліки:
  • Вище ціна.

Принцип роботи розширювача портів GPIO PCF8574/PCF8575

Обмін даними відбувається за шиною I2C. Для підключення до плати Arduino потрібні лише чотири дроти, включаючи живлення. Адреса розширювача задається трьома перемичками на входах A0 ... A2, тому до шини можна одночасно підключити вісім однакових мікросхем і отримати максимум 8 * 8 = 64 додаткових порту з PCF8574 або 8 * 16 = 128 з мікросхемою PCF8575.

Щоб вивести дані порт, записують байт даних за адресою модуля на шині I2C. Щоб прочитати дані з порту, читають байт на цій же адресі. Байт завжди пишеться і читається повністю, робота з окремими розрядами відбувається програмно.

Виходи мікросхеми одночасно є входами, і жодного службового регістру, визначального призначення виведення, немає. Є тільки регістр-клапан, у який записують вихідний байт.Як таке можливо?

Порти працюють за схемою, аналогічною відкритому колектору і оснащені внутрішніми резисторами, що підтягують. Якщо вихід записаний логічний нуль, то відкривається вихідний транзистор, який примусово тягне виведення «на землю». Читання з такого порту завжди повертатиме нуль.

Будьте обережні - при подачі прямої напруги живлення на виведення з низьким рівнем або при перевищенні допустимого струму 50 мАви зіпсуєте мікросхему!

Щоб використовувати порт як вхід, запишіть одиницю. В цьому випадку внутрішній транзистор буде закритий, а результат читання визначатиметься зовнішнім логічним рівнем, що додається до висновку. Вільний висновок підтягнутий до живлення вбудованим резистором.

Щоб одночасно використовувати частину портів як входи, а частина як виходи, перед кожним записом байта даних експандер необхідно за допомогою операції «логічне АБО» накладати маску з одиниць на ті розряди, які відповідають входам. От і все)))

Генерація переривання

Розширювачі портів PCF857* генерують імпульс переривання низького рівняна виході INT за будь-якої зміні вхідного сигналу на будь-якому вході мікросхеми. Це зручно, якщо розширювач обслуговує панель кнопок. Але ви повинні самі визначити в обробнику переривання, яку кнопку було натиснуто або відпущено. Генератор переривання оснащений фільтром придушення брязкоту контактів.

Приклад 1. Використання модуля PCF8574

Зберемо просту схему з чотирьох світлодіодів, модуля PCF8574 та плати Arduino (рис. 3 та 4). При такій схемі включення нам навіть не потрібні резистори, що гасять, для світлодіодів. Струм протікає через світлодіод та вбудований резистор, підключений до шини живлення.

Рис. 3. Схема підключення модуля PCF8574

Рис. 4. Макет схеми із модулем PCF8574

Скопіюйте та запишіть у плату Arduino скетч 1:

// Адресу модуля на шині (A0, A1, A2 = 0) int address = 0x38; // Дані прочитані з модуля uint8_t dataReceive; // Дані для запису модуль uint8_t dataSend; void setup() ( Wire.begin(); Serial.begin(9600); // Високий рівень у всі порти PCF8574 dataSend = B11111111; pcf8574_write(dataSend); ) void loop() ( // Читаємо байт з модуля dataRece5 (); // Виводимо в монітор у двійковому форматі Serial.println(dataReceive, BIN);// Зсуваємо біти вліво на півбайт 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()); }

У всі порти мікросхеми спочатку записується високий рівень, тому порти P0 ... P3 можуть працювати, як входи.

Рівні на виводах порту зчитуються кожні 500 мс та результат зчитування виводиться на монітор. Якщо ви з'єднуєте один із входів P0…P3 із загальним дротом, у його розряді з'являється нуль. Потім лічені значення зсувається вліво на чотири біти, результат виводиться в порт і гасне один зі світлодіодів. Наприклад, якщо прочитаний нуль на виводі P0, то згасне світлодіод, підключений до виводу P4.

Зверніть увагу, що ми повинні перед кожним записом розширювача накласти бітову маску з одиниць на всі розряди, які повинні бути входами: dataSend |= B00001111;

Підпрограми роботи з шиною I2C дуже спрощені, ніякі помилки не обробляються.

Порада:для пошуку та перевірки адреси модуля на шині I2C можна використовувати. Він виводить термінал адреси всіх пристроїв, які відповідають запит шини.

Приклад 2. Використання модуля PCF8575

Особливість модуля PCF8575 у тому, що він 16 портів, у нього завжди записують по два байти і читають по два байти. Це правило треба дотримуватись, навіть якщо другий байт не потрібен.

Трохи змінимо схему. Світлодіоди підключимо до портів P10…P13, а з'єднувати перемичкою із загальним проводом будемо порти P00…P03 (рис. 5 та 6).

Рис. 5. Схема підключення модуля PCF8575

Рис. 6. Макет схеми із модулем PCF8575

У скетчі 2 спочатку записуються одиниці у всіх портах, потім кожні 500 мс читається їх стан. Процедура читання повертає 16-розрядне слово, яке поділяється на байти. Вміст молодшого байта (висновки P00…P07) копіюється у старший байт і вивантажується у модуль. Якщо з'єднати із загальним дротом один із висновків P00…P03, то згасне один із світлодіодів, підключених до P10…P13.

// Бібліотека для роботи з I2C #include // Адреса модуля за замовчуванням int address = 0x20; // Дані прочитані з модуля uint8_t hi, lo; uint16_t dataReceive; uint8_t dataHighByte; // Старший байт (P10 ... P17) uint8_t dataLowByte; // Молодший байт (P00...P07) void setup() ( Wire.begin(); Serial.begin(9600); // Високий рівень у всіх портах PCF8575 dataHighByte = B11111111; dataLowByte = B11111111; ); ) void loop() ( // Читаємо байт із модуля dataReceive = pcf8575_read(); // Виводимо в монітор у двійковому форматі Serial.println(dataReceive, BIN); // Виділяємо молодший байт із довгого слова dataLowByte= lowByte( ) // Копіюємо молодший байт у старший байт dataHighByte = dataLowByte; // Накладаємо маску на молодший байт dataLowByte |= B11111111;// Записуємо нові дані в модуль, два байта / Процедура запису байта в модуль void pcf8575_write(uint8_t dtl, int8_t dth) ( Wire.beginTransmission(address); Wire.write(dtl); // Записуємо молодший байт (P00...P07) Wire.write(dth) / Записуємо старший байт (P10 ... P17) Wire.endTransmission ();) // Процедура читання байта з модуля int16_t pcf8575_read( ) ( Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 2); lo = Wire.read(); // Читаємо молодший байт (P00 ... P07) hi = Wire.read (); // Читаємо старший байт (P10 ... P17) return (word (hi, lo)); // Повертаємо довге слово)

Бібліотека Arduino для PCF8574/PCF8575

Бібліотеку можна завантажити на GitHub. Але, як ви могли бачити, робота з розширювачами портів дуже проста і легко обійтися без спеціальної бібліотеки.

Однією з ключових переваг платформи Arduino є популярність. Популярну платформу активно підтримують виробники електронних пристроїв, що випускають спеціальні версії різних плат, що розширюють функціональність контролера. Такі плати, цілком логічно звані платами розширення (інша назва: arduino shield, шилд), служать до виконання найрізноманітніших завдань й можуть спростити життя ардуинщика. У цій статті ми дізнаємося, що таке платня розширення Arduino і як її можна використовувати для роботи з різноманітними пристроями Arduino: двигунами (шилди драйверів двигунів), LCD-екранами (шилди LCD), SD-картами (data logger), датчиками (sensor shield ) та безліччю інших.

Давайте спочатку розберемося в термінах. Плата розширення Ардуїно - це закінчений пристрій, призначений для виконання певних функцій і підключається до основного контролера за допомогою стандартних роз'ємів. Інша популярна назва плати розширення – англомовне Arduino shield або просто шилд. На платі розширення встановлені всі необхідні електронні компоненти, а взаємодія з мікроконтролером та іншими елементами основної плати відбувається через стандартні піни ардуїно. Найчастіше харчування на шилд теж подається з основної плати arduino, хоча у багатьох випадках є можливість запитки з інших джерел. У будь-якому шилді залишаються кілька вільних пінів, які ви можете використати на свій розсуд, підключивши до них будь-які інші компоненти.

Англомовне слово Shield перекладається як щит, екран, ширма. У контексті його слід розуміти як щось, що покриває плату контролера, що створює додатковий шар пристрою, ширму, за якою ховаються різні елементи.

Для чого потрібні шилди arduino?

Все дуже просто: 1) для того, щоб ми заощаджували час, і 2) хтось зміг заробити на цьому. Навіщо витрачати час, проектуючи, розміщуючи, припаюючи та налагоджуючи те, що можна взяти вже у зібраному варіанті, одразу почавши використовувати? Добре продумані та зібрані на якісному обладнанні плати розширення, як правило, більш надійні та займають менше місця у кінцевому пристрої. Це не означає, що потрібно повністю відмовлятися від самостійного складання і не потрібно розумітися на принципі дії тих чи інших елементів. Адже справжній інженер завжди намагається зрозуміти, як працює те, що він використовує. Але ми зможемо робити складніші пристрої, якщо не щоразу винаходити велосипед, а зосередимо свою увагу на тому, що до нас ще мало хто вирішував.

Звичайно, за можливості доводиться платити. Практично завжди вартість кінцевого шилду буде вищою за ціну окремих комплектуючих, завжди можна зробити аналогічний варіант дешевше. Але тут вже вирішувати вам, наскільки критично для вас витрачені час чи гроші. З урахуванням посильної допомоги китайської промисловості вартість плат постійно знижується, тому найчастіше вибір робиться на користь використання готових пристроїв.

Найбільш популярним прикладами шилдів є плати розширення для роботи з датчиками, двигунами, LCD-екранами, SD-картами, мережеві та GPS-шилди, шилди із вбудованими реле для підключення до навантаження.

Підключення Arduino Shields

Для підключення шилда потрібно просто акуратно надіти його на основну плату. Зазвичай контакти шилду типу гребінки (тато) легко вставляються в роз'єм плати ардуіно. У деяких випадках потрібно акуратно підправити штирки, якщо плата спаяна неакуратно. Тут головне діяти акуратно і не додаватися до зайвої сили.

Як правило, шилд призначений для цілком конкретної версії контролера, хоча, наприклад, багато шилдів для Arduino Uno цілком нормально працюють із платами Arduino Mega. Розпинування контактів на меге виконано так, що перші 14 цифрових контактів і контакти з протилежного боку плати збігаються з розташуванням контактів на UNO, тому легко стає шилд від ардуіно.

Програмування Arduino Shield

Програмування схеми з платою розширення не відрізняється від звичайного програмування ардуїно, адже з погляду контролера ми просто підключили наші пристрої до його звичайних пін. У скетчі потрібно вказувати ті піни, які з'єднані у шилді з відповідними контактами на платі. Як правило, виробник вказує відповідність пінів на самому шилді або в окремій інструкції з підключення. Якщо ви завантажуєте скетчі, рекомендовані самим виробником плати, навіть це робити не знадобиться.

Читання або запис сигналів шилдів проводиться теж звичайним методом: за допомогою функцій та інших, звичних будь-якому ардуїнщик команд. У деяких випадках можливі колізії, коли ви звикли до цієї схеми з'єднання, а виробник вибрав іншу (наприклад, ви підтягували кнопку до землі, а на шилді – до живлення). Тут слід бути просто уважним.

Як правило, ця плата розширення йде в наборах Ардуїно і тому саме з нею Ардуїнщик зустрічаються найчастіше. Шилд досить простий – його основне завдання надати зручніші варіанти підключення до плати Arduino. Це здійснюється за рахунок додаткових роз'ємів живлення та землі, виведених на плату до кожного з аналогових та цифрових пінів. Також на платі можна знайти роз'єм для підключення зовнішнього джерела живлення (для перемикання потрібно встановити перемички), світлодіод і кнопка перезапуску. Варіанти шилду та приклади використання можна знайти на ілюстраціях.




Існує кілька версій сенсорної плати розширення. Всі вони відрізняються кількістю та видом роз'ємів. Найбільш популярними сьогодні є версії Sensor Shield v4 та v5.

Цей шилд Ардуїно дуже важливий в робототехнічних проектах, т.к. дозволяє підключати до плати Arduino відразу звичайний і серводвигуни. Основне завдання шилду – забезпечити управління пристроями споживаючими досить високий для звичайної плати ардуїно струм. Додатковими можливостями плати є функція управління потужністю двигуна (за допомогою ШІМ) та зміни напрямку обертання. Існує безліч різновидів плат motor shield. Спільним для всіх є наявність у схемі потужного транзистора, через який підключається зовнішнє навантаження, тепловідвідних елементів (як правило, радіатора), схеми для підключення зовнішнього живлення, роз'ємів для підключення двигунів і піни для підключення до ардуїно.



Організація роботи з мережею – одне з найважливіших завдань у сучасних проектах. Для підключення до локальної мережі через Ethernet існує відповідна платня розширення.




Плати розширення для прототипування

Ці плати досить прості - на них розташовані контактні майданчики для монтажу елементів, виведена кнопка скидання і є можливість підключення зовнішнього живлення. Призначення даних шилдів – підвищити компактність пристрою, коли всі необхідні компоненти розміщуються одразу над основною платою.





Arduino LCD shield та tft shield

Цей тип шилдів використовується для роботи з LCD-екранами в Ардуїно. Як відомо, підключення навіть найпростішого 2-рядкового текстового екрану далеко не тривіальне завдання: потрібно правильно підключити відразу 6 контактів екрану, крім живлення. Набагато простіше вставити готовий модуль у платню ардуїно і просто завантажити відповідний скетч. У популярному LCD Keypad Shield на плату відразу заведені від 4 до 8 кнопок, що дозволяє відразу організувати і зовнішній інтерфейс для користувача пристрою. TFT Shield також допомагає



Arduino Data Logger Shield

Ще одне завдання, яке досить важко реалізовувати самостійно у своїх виробах – збереження даних, отриманих з датчиків, з прив'язкою за часом. Готовий шилд дозволяє не тільки зберегти дані та отримувати час з вбудованого годинника, але й підключити датчики у зручному вигляді шляхом паяння або на монтажній платі.




Коротке резюме

У цій статті ми з вами розглянули лише невелику частину великого асортименту різноманітних пристроїв, що розширюють функціональність Ардуїно. Плати розширення дозволяють зосередитись на найголовнішому – логіці вашої програми. Творці шилдів передбачили правильний та надійний монтаж, необхідний режим живлення. Все, що вам залишається, це знайти потрібну плату, використовуючи заповітне англійське слово shield, підключити її до ардуїно та завантажити скетч. Зазвичай будь-яке програмування шилду полягає у виконанні простих дій щодо перейменування внутрішніх змінних вже готової програми. У результаті ми отримуємо зручність у використанні та підключенні, а також швидкість збирання готових пристроїв або прототипів.

Мінусом використання плат розширення можна назвати їх вартість та можливу втрату ефективності через універсальність шилдів, що лежить у їх природі. Для вашого вузького завдання або кінцевого пристрою всі функції шилду можуть бути не потрібні. У такому випадку варто використовувати шилд тільки на етапі макетування та тестування, а при створенні фінального варіанту свого пристрою задуматися про заміну конструкцією з власною схемою та типом компонування. Вирішувати вам всі можливості для правильного вибору у вас є.

→ Як розширити кількість аналогових входів та виходів на вашому Arduino?

Як розширити кількість аналогових входів та виходів на вашому Arduino?

Мультиплексор чи демультиплексор дозволить вам розширити кількість входів та виходів на вашому Arduino.
Мікросхема 4051 є 8-канальним аналоговим мультиплексором / демультиплексором, таким чином:
* Якщо ви використовуєте 4051 як мультиплексор: Ви можете вибрати будь-який з 8 різних входів та прочитати його стан у контролер.
* Якщо ви використовуєте 4051 як демультиплексор, ви можете вибрати будь-який з 8 різних виходів і записати туди потрібне вам значення.

Крім того, 4051 може працювати з аналоговими значеннями, у вашому Arduino, ви можете використовувати аналогові сигнали з напругою 0-5В і підключити мікросхему до аналогових входів на Arduino.

Щоб вибрати потрібний вхід мікросхеми і режими роботи читання або запис, ми повинні використовувати три керуючі сигнали (S0, S1 і S2). Кожен із цих контактів має бути підключений до одного із цифрових виходів Arduino. Кожен вихід має номер (S0 = 1; S1 = 2; S2 = 4) і, якщо встановити на одному з цих виходів високий логічний рівень, число контактних представляє буде передано 4051.

Наприклад:
* Якщо на входах мікросхеми S0 та S1 встановити лог "1" а на S2 лог "0" то обраний вхід y3 мікросхеми, це виглядає так (1 +2 +0 = 3).
* Якщо на входах мікросхеми S0 і S2 встановити лог "1" а на S1 лог "0" то вибрано вхід y5 мікросхеми, це виглядає так (1 +0 +4 = 5).

Неможливо читати або записувати стан більше, ніж одного виводу 4051 одночасно. Але ви можете читати та записувати стан виведенням мікросхеми досить швидко. Немає необхідності у затримці між вибором, читанням або записом стану висновків 4051.

* Z ----- загальний сигнал введення або виведення (з'єднаний із входом/виходом Arduino)
* E ----- вхід дозволу (активний лог «0 ») (підключений до землі (GND))
* Vee --- негативна напруга живлення (підключений до землі (GND))
* GND --- загальний мінус (0 V)
* S0-S2 - вибір входів (підключені до трьох цифрових висновків Arduino)
* y0-Y7 - незалежні входи/виходи
* Vcc --- позитивна напруга живлення (5 В)



Ліве зображення вище, наприклад, використовувати 9 мультиплексор читати 64 аналогових входів тільки з одним аналоговим входом Arduino.
Праве зображення вище приклад того, як використовувати два 4051 (один налаштований як демультиплексор і одного в якості мультиплексора) в матриці 8x8 для перевірки 64 кнопок або інших цифрових входів тільки з одного цифрового входу на Arduino (з другої установки ви можете просто дві кнопки в то ж час, інакше ви повинні використовувати перший (ліворуч) установки).

Приклад коду:

// Приклад для використання 4051 аналоговий мультиплексор/демультиплексор
// by david c.

int led = 13; // Налаштовуємо на 13 нозі світлодіод
int r0 = 0; // значення вибрати висновок на 4051 (S0)
int r1 = 0; // значення вибрати висновок на 4051 (S1)
int r2 = 0; // значення вибрати висновок на 4051 (S2)
int row = 0; // storeing the bin code
int count = 0; // щітчик
int bin = (000, 1, 10, 11, 100, 101, 110, 111); // Масив двійкових числ визначальних номер обраного входу/виходу мікросхеми 4051 з 1 по 8.
void setup () (// ІНІЦІАЛІЗАЦІЯ
pinMode (2 , OUTPUT); // s0 вихід
pinMode (3 , OUTPUT); // s1 вихід
pinMode (4 , OUTPUT) ; // s2 вихід
digitalWrite (led, HIGH); // запалити світлодіод
починаєтьсясеріал (9600); // швидкість обміну за UART
}

void loop () (
for (count = 0 ; count ≤ 7 ; count ++) ( // цикл перебору елементів масиву з 1 по 8
row = bin [count];
r0 = row & 0x01;
r1 = (row >> 1) & 0x01; //
r2 = (row >> 2) & 0x01; //
digitalWrite (2, r0);
digitalWrite (3, r1);
digitalWrite (4, r2);
Serial.println (bin);
delay (1000);

Чіпи SPI або I2C ADC легко доступні в діапазоні дозволів, швидкості дискретизації та кількості каналів. Їх досить просто додати до будь-якої Arduino.

Наприклад, MCP3208 дасть 8 каналів 12-бітного дозволу на SPI, що означає 3 контакти (MOSI/MISO/SCK) + 1 на мікросхему (SS). Таким чином, 1 чіп буде 4 шпильки, 2 фішки 5 контактів, 3 фішки 6 контактів і т.д.

Додавання великої кількості мікросхем до шини SPI, хоча саме собою може бути неприємним зі збільшеною ємністю всіх цих входів, що означає, що вам потрібно трохи зменшити швидкість обміну повідомленнями або додати додаткову буферизацію для більш інтенсивного керування шиною.

Чіпи I2C можуть бути складніше мати їх, оскільки на шині I2C є лише обмежена кількість адрес – плюс на багатьох Arduinos I2C також є двома аналоговими контактами, які ви, можливо, не захочете жертвувати.

Другий варіант включає використання аналогових мультиплексорів (наприклад, 4051) для перемикання різних джерел на аналогові існуючі входи.

Третій варіант, який ви, ймовірно, не розглядали, полягає в тому, щоб мати кілька ардуїнів (або інших недорогих мікроконтролерів), кожен із яких виконує деяку вибірку, а потім реалізує якийсь метод зв'язку між ними (або з одним майстром). Це дає додаткову перевагу в тому, що можна одночасно семплювати кілька каналів (по одному на мікроконтролер), що дещо прискорює вашу роботу.

Розгорнувшись на відповідь Маженко, ви можете використати аналоговий мультиплексор, такий як 74HC4051, щоб перетворити один аналоговий порт на 8.

Його кузен, 74HC4067, мультиплексуватиме 16 портів. Тепер із 6 аналоговими входами на Arduino Uno ви можете мати 6 x 16 входів = 96. Сигнали керування A/B/C можуть бути паралельними.

Це дозволить вам обробляти 96 входів з 6 додатковими чіпами та досить простим кодом. У мене є приклади коду на моїй сторінці про мультиплексор/демультіплексор 74HC4051 .

Для 8 входів код:

// Example of using the 74HC4051 multiplexer/demultiplexer // Автор: Nick Gammon // Дата: 14 березня 2013 const byte sensor = A0; //, де мультиплексер в/вихідний port connected // Мультиплексер address select lines (A/B/C) const byte addressA = 6;//low-order bit const byte addressB = 5; const byte addressC = 4; );pinMode(addressC, OUTPUT); ) //end setup int readSensor (const byte which) digitalWrite (addressB, (which & 2) ? HIGH: LOW); digitalWrite (addressC, (which & 4) ? HIGH: LOW); /end of readSensor void loop () ( //show all 8 sensor readings for (byte i = 0; i< 7; i++) { Serial.print ("Sensor "); Serial.print (i); Serial.print (" reads: "); Serial.println (readSensor (i)); } delay (1000); } //end of loop

Я точно працював із тим самим питанням. Мені потрібна програма, яка читає сто термісторів... Чому? ну, якщо вам це потрібно.

Я вже закінчив це.

Я спробував мультиплексор/демультіплексор 74HC4051. Але чомусь я не отримав бажаного результату.

Перше, що ви знайдете... POWER, вам знадобиться зовнішнє джерело живлення, в моєму випадку я просто зробив дільник напруги та підключив термістор до цієї потужності, а потім просто використовуйте аналоговий порт для читання.

Я використовую протокол I2C, 8 arduino Mega 7 slaves та один майстер. та після відправки send Integer, float та blah blah не допоміг мені просто зробити це. Він може надсилати аналогове читання через I2C і майстер робить все необхідне перетворення.

Якщо ви все ще зацікавлені, я можу надіслати вам вихідний код для master та slaves. За допомогою цього шаблону ви можете підключити до 50 ардуїнів, і майстер шукатиме кожен підключений у мережі arduino та запитуватиме дані.