вторник, 6 августа 2013 г.

Проект на Arduino 2560 + DHT11 + ENC28J60 + Реле 220

Вот настало время для публикации моего проекта. Наконец то разобравшись с Ethernet модулем ENC28J60, я доделал сервер. Принцип работы заключается в том, что вы можете видеть температуру и влажность с датчика, и управлять реле на 220 прямо с веб страницы.
На момент написания использовалось Arduino IDE 1.0.5.
Если вам что то не понятно, то не стесняйтесь писать комментарии.
Вот что использовалось:
1. Arduino Mega 2560




2. ENC28J60

3. DHT11

4. Реле.

Схема соединения:

В данном примере задействован только 1 реле.
Особенностью реле модуля является то, что если на контакт подается 0(low) - то оно замыкается, если 1(high) - то размыкается.

Необходимые библиотеки Libaries.zip

Код скетча:

#include "DHT.h"
#include "etherShield.h"
#include "ETHER_28J60.h"
#define DHTPIN 3
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int outputPin = 4;
 
static uint8_t mac[6] = {0x2E, 0x35, 0xB5, 0xAB, 0x3F, 0x70};     // мак адрес вашего модуля (я генерировал в интернете)
 
static uint8_t ip[4] = {192, 168, 0, 117};                       // ip адрес модуля (должен соответствовать вашей сети)              
 
 
static uint16_t port = 80;                                       // порт (хттп по умалчанию 80)                                
 
ETHER_28J60 ethernet;
 
void setup()
{ 
  ethernet.setup(mac, ip, port);
  dht.begin();
  pinMode(outputPin, OUTPUT);
 
 }                                                                
 
 
void loop()
{
  char* params;
  int h = dht.readHumidity();
  int t = dht.readTemperature();
 
 
 
  if (params = ethernet.serviceRequest())
  {
    ethernet.print("<body background='http://bigsoft.moy.su/BackgroundSite.jpg' repeat;>");
    ethernet.print("<center><H2>Temperature:<font color=#00FF00>  ");
    ethernet.print(t);
    ethernet.print("</font><br></center></H2>");
    ethernet.print("<H2><center>Humidity:<font color=#FF8C00>   ");
    ethernet.print(h);
    ethernet.print("<br></font></center></H2>");
 
 
    ethernet.print("<H1><center><A HREF='?cmd=on'>OFF </A><br></H1></center>");
    ethernet.print("<center><H1><A HREF='?cmd=off'>ON </A></H1></center>");
 
    if (strcmp(params, "?cmd=on") == 0)            //проверка полученного запроса
    {
      digitalWrite(outputPin, HIGH);
 
    }
    else if (strcmp(params, "?cmd=off") == 0) 
    {
      digitalWrite(outputPin, LOW);
 
    }
 
 
 
    ethernet.respond();   
 
 
 
 
 
 
   }
 
     delay(2);                      
        }
 
                            
 
 

Вот результат:
 
 
 
Сначала я пробросил порты через роутер. Далее  зарегистрировался на noip и получил постоянный адрес для своего "сайта".

UPD: тут обнаружилось, что скетч нормально компилируется только в более низких версиях. Качаем 1.1 , если не работает  http://arduino.cc/en/Main/OldSoftwareReleases






17 комментариев:

  1. черновой вариант? достаточно неплохо.. а где же тогда чистовой?

    ОтветитьУдалить
    Ответы
    1. В целом эта статья готова, просто я хотел еще более подробно расписать некоторые пункты + поправить оформление. Пока времени не хватает - учеба + новый "проект" на Processing и Arduino)

      Удалить
  2. Молодчик. Сейчас попробую- у меня всё для этого есть.

    ОтветитьУдалить
  3. можно бы дополнить статью- управление статусом твитер или вконтакте сменой статуса.
    Пример: ставлю вконтакте статус "иду домой", ардуино ловит это изменение статуса- и включает реле1, которая в свою очередь включает розетку, подключенную к чайнику ))) Такие примеры где-то видел, но не в таком понятном виде..

    ОтветитьУдалить
  4. Добрый вечер.

    Пытаюсь запустить ваш пример на Arduino NANO + DHT11 + ENC28J60 БЕЗ реле.
    К сожалению, страница в браузере не открывается.
    Все рабочее, проверял отдельными примерами, в файле библиотеки enc28j60.c поменял подключение контроллера к моей плате следующим образом, для nano соответственно pin 10,11,12,13

    В чем может быть проблема?

    ОтветитьУдалить
    Ответы
    1. Здравствуйте!
      Попробуйте уменьшить количество выводимого текста на страницу. По удаляйте лишние "ethernet.print("text")". Это для того чтобы просто проверить работоспособность. Как попробуете отпишите.

      Удалить
    2. Долго пытался разобраться, но так и не получилось. В итоге набрел на данную статью http://m.instructables.com/id/Arduino-TempHumidity-with-LCD-and-Web-Interface/?ALLSTEPS, собрал по схеме и все заработало. У меня вопрос, модуль enc26 у меня изначально, по ошибке был запитан от 5v, в последствии, когда ошибка обнаружилась и vcc был переброшен на 3,3v, то модуль отказался работать. Запускал от разных БП, результат один. В чем может быть причина?

      Удалить
  5. да код рабочий молодец! только вся система не долго работает только проверил виснит сразу же если постоянно щелкать на клавиши или можно просто обновить страницу много раз и все повиснет, или просто систему оставить включенной на часов 8-10 и попробовать обновить страницу. ПОЧЕМУ ТАК ПРОИСХОДИТ???
    Собрал железо на UNO протестил сначала на библиотеке ethercard сколько бы не щелкал и как бы жестко не тестил все работает уже больше недели. но не могу переключить библиотеку на MEGA. ПОМОГИТЕ ПЛИЗ!!!

    ОтветитьУдалить
  6. Советую UTF-8 включить и на русском писать. А если серьёзно то у меня вопрос, как
    FAVICON подключить?

    ОтветитьУдалить
    Ответы
    1. может залить на сервер картинку и http://htmlbook.ru/faq/kak-dobavit-ikonku-sayta-v-adresnuyu-stroku-brauzera

      Удалить
  7. А какой смысл в цикле фор на 1000 единиц?

    ОтветитьУдалить
  8. Есть смысл убрать цикл for (int i=0; i <= 1000; i++). Если честно 0 то уже не помню для чего его добавлял)

    ОтветитьУдалить
  9. Этот комментарий был удален автором.

    ОтветитьУдалить
  10. Добрый вечер.
    Пытаясь прошить Arduino Mega 2560 и вылазит ошибка:
    Ошибка компиляции для платы Arduino/Genuino Mega or Mega 2560.
    Помогите решить пожалуйста

    ОтветитьУдалить
    Ответы
    1. Не пробовали версию ардуино ide 1.1 ставить?

      UPD: тут обнаружилось, что скетч нормально компилируется только в более низких версиях. Качаем 1.1 , если не работает http://arduino.cc/en/Main/OldSoftwareReleases

      Удалить