Сьогодні я хотів би представити проект, який я реалізував у двох варіантах. Проект використовує 12 регістрів зсуву 74HC595 та 96 світлодіодів, плату Arduino Uno з екранованим екраном Wiznet W5100. 8 світлодіодів підключені до кожного регістру зсуву. Номери 0-9 представлені світлодіодами. Кожен регістр зсуву оснащений 8 вихідними клемами.
Кожен з 4-х регістрів зміни 74HC595 утворює логічну одиницю - дисплей для переліку 4-значного номера. Загалом у проекті є 3 логічні дисплеї, що складаються з 12 регістрів зсуву.
Реалізації сумісні для плат Arduino Nano, Mega, Uno та для екранів та модулів Ethernet із сімейства Wiznet, зокрема моделей W5100 та W5500 (з використанням бібліотеки Ethernet2).
Реалізовані реалізації в проекті з Arduino:
- Веб-сервер - HTTP-сервер, що працює безпосередньо на Arduino, дозволяє інтерпретувати HTML-код
- WebClient - Клієнт, здатний робити HTTP-запит на віддалений сервер, надсилаючи/отримуючи дані
Веб-сервер:
- Надає веб-сторінку HTML із формою, яка дозволяє вводити 3 чотиризначні числа.
- Після відправки форми дані обробляються та зберігаються в пам'яті EEPROM, користувач повідомляється про обробку даних на окремій підсторінці.
- Після збереження даних користувач перенаправляється назад у форму. Пам'ять EEPROM є енергонезалежною, дані доступні навіть після відновлення живлення, а також перезапуск плати.
- Потім усі номери представлені на трьох дисплеях, що складаються з 12 регістрів зсуву 74HC595.
WebClient:
- Зв'язок з веб-сервером відбувається кожні 5 секунд за протоколом HTTP.
- Веб-сервер запускає веб-додаток PHP, який дозволяє вводити 3 чотиризначні номери через форму.
- Дані форми зберігаються в базі даних MySQL.
- Arduino запитує дані з цієї бази даних через запит до сервера.
- Оброблені дані аналізуються Arduino, а потім складаються за допомогою регістрів зсуву 74HC595.
- Дані також зберігаються в пам'яті EEPROM Arduino, вони використовуються на випадок збою підключення до веб-сервера/при перезапуску плати Arduino вони використовуються для початкового відтворення даних на регістрах зсуву.
- Дані перезаписуються в EEPROM, лише коли дані змінюються, комірки EEPROM зберігаються від непотрібного перезапису.
Каскадне підключення для регістрів зсуву 74HC595 (можна збільшити ще на x) - Експорт з TinkerCAD:
Знімок екрану дизайну Arduino як веб-сервера - надсилання даних, обробка, перенаправлення:
З діаграми видно, що для управління регістрами зсуву використовуються лише 3 дроти даних:
- Розетка даних - (SER до 74HC595)
- Тактовий вихід - (SRCLK на 74HC595)
- Випуск засувки - (від RCLK до 74HC595)
Регістри зсуву можна поєднувати в каскаді, тоді як іншою периферією також можна керувати за допомогою зсувних регістрів - наприклад, реле для перемикання силових елементів. Можна управляти 500 окремими реле з одним виходом даних (з достатньою кількістю регістрів зсуву та джерелом живлення).
При керуванні виходами регістрів також можна змінити порядок байтів до найбільш значущого біта - MSB FIRST або до LSB - найменш значущого біта. В результаті він інвертує результати. Наприклад, в одному випадку горить 7 діодів, в іншому випадку 1 діод залежно від вхідного та порядку байтів.
Обидві реалізації використовують пам'ять EEPROM, яка може зберігати дані навіть після збою живлення або після перезапуску плати. Друге використання цієї пам’яті - це також можливість представити останні відомі дані на випадок, якщо неможливо зв’язатися з веб-сервером (помилка підключення, сервер).
Обсяг пам’яті обмежений 10 000 - 100 000 розшифровок. Реалізації розроблені для якнайменшого навантаження пам'яті. Дані не будуть перезаписані при їх зміні. Якщо однакові дані зчитуються з веб-сервера/клієнта, вони не перезаписуються в пам'ять EEPROM.