Помогите собрать всё в кучу , запрограммировать и заставить трудиться

Тема в разделе "Arduino & Shields", создана пользователем ToniMontana, 10 янв 2013.

?

человеку который первый раз сталкивается с Ардуино под силу это реализовать??

  1. ЗАБУДЬ

    0 голосов
    0,0%
  2. ПОМОЖЕМ ЧЕМ СМОЖЕМ

    57,1%
  3. НЕ ПЕРЕЖИВАЙ ОБЩИМИ СИЛАМИ ФОРУМА ВСЁ СДЕЛАЕМ , мы же профи

    64,3%
  4. Пошёл вон от сюда

    14,3%
Можно выбрать сразу несколько вариантов.
  1. ToniMontana

    ToniMontana Нуб

    Строю Терр для его автоматизации решил использовать ардуино , с паяльником дружу с детства , но вот по программированию конечно тёмный лес , собрать КОД с примеров могу но вот как реализовать не знаю , читал на амперке уроки и смотрел видео но вот что то не получается!
    В общем решил писать КОД сейчас, пока ещё всё едет ко мне в посылке а именно :(Arduino UNO , сенсорный экран Arduino совместимый 3,2 "TFT LCD , с датчиками не определился (хочу послушать мнение профи), в качестве средства ввода параметров и навигации по меню хочу использовать энкодер с кнопкой) , желательно управлять нагрузкой симистрами

    В задачи должно входить :
    Полная автономность (не зависимость от ПК , вод параметров влажности и температуры с помощью экрана ) , мониторинг в реальном времени влажности и температуры в 4-х точках : фоновая , тёплый угол , холодный угол , купалка , Разделение температуры на время дня , при достижении заданной температуры (дневной , ночной) отключение обогревательного элемента а так же его включение при падении температуры на 3 градуса , при уровне влажности ниже заданного уровня включение увлажнителя , при превышении уровня влажности включение принудительной вентиляции (с задержкой в минут 10) , реализация заката , рассвета . Звуковой сигнал при выходи из строя датчиков , и отключение обогревателей и увлажнителя в случаи выход из строя датчика теплого угла либо фоновой температуры
     
  2. Denis.cpp

    Denis.cpp Нерд

    Я думаю задачу стоит дополнить схемой, её тут точно не хватает, пока едут запчасти, лучше посмотреть какой нибудь самоучитель по С/С++ на youtube, и попробовать порешать какие нибудь простенькие задачки, разобраться так сказать с основными конструкциями языка.
     
  3. ToniMontana

    ToniMontana Нуб


    Смотрел , зажигал диоды , ну и так далее , согласно примерам понял как опрашивать датчики , но вот экран конечно сам не разберусь , литературу безусловно почитаю , схему буду рисовать завтра , завтра и выложу
     
  4. Denis.cpp

    Denis.cpp Нерд

    Если к экрану есть готовая библиотека, то проблем особых не будет.Сбрось ссылку на экран.
     
  5. ToniMontana

    ToniMontana Нуб

  6. Unixon

    Unixon Оракул Модератор

    Библиотека UTFT, если есть тачскрин, тогда еще и UTouch.
     
  7. Denis.cpp

    Denis.cpp Нерд

  8. ToniMontana

    ToniMontana Нуб

    поглядим
     
  9. ToniMontana

    ToniMontana Нуб

    С чего начать писать код ?
     
  10. ToniMontana

    ToniMontana Нуб

    Может нужна вот такая плата http://vkitae24.ru/index.php?route=catalog&product=144471 ? для подключения экрана
     
  11. Unixon

    Unixon Оракул Модератор

    Только если у вас отдельный дисплей. Если на шилде - тогда не нужно.
    У вас какой?
    Судя по ссылке выше все таки отдельный...
    Тогда да, нужен переходник.
     
    ToniMontana нравится это.
  12. Dmitriy Kunin

    Dmitriy Kunin Гик

    Мы конечно профи и обязательно поможем, только прикольно будет разбираться с дисплеем который есть только у вас :)
    Переходник имело смысл заказать сразу. Экран расчитан на работу с другой платой Ардуино, он для Mega.
    Если вы сталкиваетесь с микроконтроллерами впервые, советую приобрести стандартный и всем тут известный дисплей либо 16х2, либо 20х4 этим вы избавите себя от многих проблем. А когда поймёте как всё это устроено, будете наводить красоту.
    Ещё одно наблюдение, чем круче дисплей, тем меньше остаётся свободных портов контроллера.
    Такое устройство должно быть жутко надёжным, оно конечно будет радовать хозяина в его присутствии, но ломаться оно будет, когда вас не будет дома, так, что аварийное отключение оно хорошо, но походу дублировать датчики тоже придётся.
     
    ToniMontana нравится это.
  13. ToniMontana

    ToniMontana Нуб

    это пример кода , не мой , но мне бы подошёл #include <LiquidCrystal.h> // Подключаем стандартную библиотеку управления экраном

    #define DHTPIN 8 // Считывающий пин с датчика
    #define DHTTYPE DHT11 // Модель датчика
    #define tPIN 7 // Пин управления температурой
    #define hPIN 6 // Пин управления влажностью
    #define lPIN 5 // Пин управления светом
    #define sdPIN 3 // Пин управления светодиодной лентой

    DHT dht(DHTPIN, DHTTYPE); // Создаем объект dht

    int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл
    int tempDay = 32; // Желаемая дневная температура в градусах Цельсия
    int tempNight = 24; // Желаемая ночная температура в градусах Цельсия
    int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл
    int humDay = 75; // Желаемая дневная влажность
    int humNight = 50; // Желаемая ночная влажность

    LiquidCrystal lcd(12, 11, 10, 9, 4, 2); // Инициализируем дисплей

    void setup() // инициализация основных данных
    {
    Serial.begin(9600); // Инициализируем COM-порт
    dht.begin(); // Инициализируем датчик
    pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод
    pinMode(hPIN, OUTPUT);
    pinMode(lPIN, OUTPUT);
    lcd.begin(16,2); // устанавливаем размеры экрана

    }

    void loop() // зацикливание (код управляющей программы)
    {
    if (Serial.available() > 0) SetTime(); // Если на COM-порт поступила информация, то изменим системное время
    float h = dht.readHumidity(); // Считываем влажность
    float t = dht.readTemperature(); // Считываем температуру
    int Hour = RTC.get(DS1307_HR,true); // Получаем значение текущего часа
    int Minute = RTC.get(DS1307_MIN,false);
    int Second = RTC.get(DS1307_SEC,false);
    boolean Day = (Hour >= 8 & Hour <20); // Если текущий час находится в промежутке от 8 до 20, то действуют дневные параметры
    tStatus = (t < ((Day) ? tempDay : tempNight)) ? LOW:HIGH; // Если температура меньше желаемой, то статус обогревателя=Вкл, в противном случае Выкл
    //Relay.lineWrite(tPIN, tStatus);
    digitalWrite(tPIN, tStatus);
    if (h < ((Day) ? humDay : humNight)) hStatus = LOW; else hStatus = HIGH; // Если влажность меньше желаемой, то статус увлажнителя=Вкл, в противном случае Выкл
    digitalWrite(hPIN, hStatus);
    digitalWrite(lPIN, (Day) ? LOW:HIGH); // Если дневное время, то включим подсветку
    switch(Hour) // в зависимости от времени меняем яркость светодиодной ленты
    {
    case 7:analogWrite(sdPIN, map(Minute, 0, 59, 0, 255)); break;
    case 20:analogWrite(sdPIN, map(Minute, 0, 59, 255, 0)); break;
    default:analogWrite(sdPIN, (Day) ? 255:0);
    }
    lcd.setCursor(1,0); // устанавливаем позицию курсора на экране (на один символ правее левого верхнего угла)
    lcd.print(t, 1); lcd.print("C "); lcd.print(h, 1); lcd.print("%"); // Выводим информацию о климате
    lcd.setCursor(4,1); // устанавливаем курсор для вывода времени
    lcd.print(addZero(Hour));lcd.print(":");lcd.print(addZero(Minute));lcd.print(":");lcd.println(addZero(Second)+ " "); // Выводим время
    lcd.setCursor(1,1);lcd.print((tStatus == LOW) ? "+":" "); // Выводим индикатор работы подогрева
    lcd.setCursor(13,1);lcd.print((hStatus == LOW) ? "+":" "); // Выводим индикатор работы увлажнения
    delay(500); // Задержка в пол секунды
    }

    void SetTime() // установка времени из шаблона tчч:мм
    {
    if (Serial.read() == 't') // Если первый символ t, то установим указанное время
    {
    int h = (Serial.read() - '0') * 10 + (Serial.read() - '0');
    Serial.read();
    int m = (Serial.read() - '0') * 10 + (Serial.read() - '0');
    RTC.stop();
    RTC.set(DS1307_SEC,0); //set the seconds
    RTC.set(DS1307_MIN,m); //set the minutes
    RTC.set(DS1307_HR,h); //set the hours
    RTC.start();
    }
    Serial.flush();
    }

    String addZero(int val)
    {
    if (val<10) return "0" + String(val);else return String(val);
    }
     
  14. ToniMontana

    ToniMontana Нуб


    Я подумал и последую вашему совету , посоветуйте экран 20/4
     
  15. Dmitriy Kunin

    Dmitriy Kunin Гик

  16. Denis.cpp

    Denis.cpp Нерд

    Я вот не знаю как все остальные я люблю делать так - не всё сразу подключать и отлаживать, а по частям, допустим подключил сенсор, проверил его работу, затем описал какую то логику работы этого сенсора,проверил работает или не работает, потом перешел к задаче номер 2 подключить дисплей проверить его работоспособность демо-примерами, и т.д. вообще подключение дисплея это самая последняя задача наверное в любых проектах, я правда только один дисплей подключал winstar wg12864b. но могу сказать что с ним довольно легко работать, я думаю с цветным дисплеем должна быть похожая история...там разницы я думаю особой нет разве что тот цветной, просто вызываешь из библиотеки нужные функции, которые слова пишут, квадраты рисуют и т.п. ещё ТониМонтана мой тебе совет когда пишешь код выделяй его
    Код (Text):
    void setup()
    {
     
    }
    void loop()
    {
     
    }
     
    что то типо этого,
    также не помешало бы полный список всего имеющегося оборудования, предпологаемая схема подключения, возможно даже предполагаемая схема размещения всего этого дела в пространстве(хотя это в принципе не обязательно), пока так тогда будет больше представления о происходящем... пока так
     
  17. Dmitriy Kunin

    Dmitriy Kunin Гик

    И в процессе в отдельном текстовом файле сопровождения проекта, писать номера ног ардуины или контроллера, на которые претендует каждое из устройств :)