Контроллер нагрузок через Ethernet на базе Arduino Uno R3
- 475.00грн
-
Многие электронщики и радиолюбители ставят перед собой задачу сборки устройства для дистанционного управления различным оборудованием. Реализаций данной идеи сейчас есть довольно много, часть из них можно найти в сети Internet. В даном проекте мы представляем один из вариантов такого устройства, а именно - контроллер нагрузок через Ethernet на базе Arduino Uno R3.
Принцип работы устройства довольно прост - плата Arduino подключается к локальной сети через Ethernet, используя заданый при прошивке IP-адрес. Пользователь переходит на этот IP-адрес через браузер своего устройства, получая в ответ web-страничку управления устройствами. Для управления может использоваться компьютер, смартфон, планшет и другие устройства, подключенные к локальной сети.
Данный проект отличается простотой и будет работать не только на Arduino Uno, но и на других Arduino-совместимых платах.
Собрав контроллер нагрузок можно получить полезное устройство, а также освоить программирование Arduino, в том числе работу с библиотеками SPI и Ethernet.
Комплект состоит из платы Arduino Uno R3, шилда Arduino Ethernet Shield W5100, 4-канального реле модуля Relay 4ch и необходимых проводов.
Программная часть комплекта написана на языке Wiring, а аппаратная состоит из легко соединяемых отдельных модулей, благодаря чему контроллер для управления устройствами через Ethernet на базе Arduino сможет сделать своими руками даже человек без глубоких познаний в электронике и программировании.
Комплектация:
- Arduino Uno R3 в антистатической упаковке
- шилд Arduino Ethernet Shield W5100
- 4-канальный реле модуль Relay 4ch
- 6 проводников для соединения модулей
- USB кабель
Инструкция по сборке:
1) Скачайте и установите Arduino IDE (рекомендуем версию 1.0.4). На указанном сайте также можно найти информацию по первичной настройке и работе с IDE, а также ответы на основные вопросы по работе с ней.
2)Подключите к компьтеру плату Arduino Uno и загрузите в нее следующий скетч:
// sketch 10-02 Internet Pins #include <SPI.h> #include <Ethernet.h> // MAC address just has to be unique. This should work byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // The IP address will be dependent on your local network: byte ip[] = { 192, 168, 0, 177 }; EthernetServer server(80); //int Relay = 3; int numPins = 4; int pins[] = {3, 5, 6, 7}; int pinState[] = {0, 0, 0, 0}; char line1[100]; void setup() { for (int i = 0; i < numPins; i++) { pinMode(pins[i], OUTPUT); digitalWrite(pins[i], HIGH); } Serial.begin(9600); Ethernet.begin(mac, ip); server.begin(); } void loop() { EthernetClient client = server.available(); if (client) { while (client.connected()) { readHeader(client); if (! pageNameIs("/")) { client.stop(); return; } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); // send the body client.println("<html><body>"); client.println("<h1>Output Pins</h1>"); client.println("<form method='GET'>"); setValuesFromParams(); setPinStates(); for (int i = 0; i < numPins; i++) { writeHTMLforPin(client, i); } client.println("<input type='submit' value='Update'/>"); client.println("</form>"); client.println("</body></html>"); client.stop(); } } } void writeHTMLforPin(EthernetClient client, int i) { client.print("<p>Pin "); client.print(pins[i]); client.print("<select name='"); client.print(i); client.println("'>"); client.print("<option value='0'"); if (pinState[i] == 0) { client.print(" selected"); } client.println(">Off</option>"); client.print("<option value='1'"); if (pinState[i] == 1) { client.print(" selected"); } client.println(">On</option>"); client.println("</select></p>"); } void setPinStates() { for (int i = 0; i < numPins; i++) { digitalWrite(pins[i], !pinState[i]); } } void setValuesFromParams() { for (int i = 0; i < numPins; i++) { pinState[i] = valueOfParam(i + '0'); } } void readHeader(EthernetClient client) { // read first line of header char ch; int i = 0; while (ch != ' ') { if (client.available()) { ch = client.read(); line1[i] = ch; i ++; } } line1[i] = '\0'; Serial.println(line1); } boolean pageNameIs(char* name) { // page name starts at char pos 4 // ends with space int i = 4; char ch = line1[i]; while (ch != ' ' && ch != ' ' && ch != '?') { if (name[i-4] != line1[i]) { return false; } i++; ch = line1[i]; } return true; } int valueOfParam(char param) { for (int i = 0; i < strlen(line1); i++) { if (line1[i] == param && line1[i+1] == '=') { return (line1[i+2] - '0'); } } return 0; }
Примечание: програмный код взят с этой статьи. Для сохранения простоты в него внесены только минимальные изменения. Для удобства практического использования рекомендуем добавить дополнительные возможности, например добавить запись состояния реле в EEPROM, сделать автоматическое включение/выключение реле реле через определенный период, подключить дисплей или LCD Keypad Shield для отображения состояния устройства(а возможно и для прямого управления) и др.
3) Если после загрузки скетча Вы получили сообщение "Done uploading.", значит все сделано правильно и можна приступать к следующему этапу - соединению модулей. Ethernet Shield нужно просто подключить поверх Arduino Uno, а модуль реле подключить с помощью идущих в комплекте проводников по следующей схеме:
Выводы Arduino | Выводы реле |
+5V | VCC |
GND | GND |
D3 | IN1 |
D5 | IN2 |
D6 | IN3 |
D7 | IN4 |
4) После сборки еще раз проверьте правильность подключения, если все правильно - устройство можно подключать к локальной сети и подавать на него питание.
5) Далее с любого устройства, подключенного к локальной сети перейдите по адресу 192.168.0.177. Если все сделано правильно, то появится страница управления: