Помогите со скетчем... Автоматизация)))
- Войдите на сайт для отправки комментариев
Пнд, 20/07/2015 - 22:48
Проблема с прописыванием реакции по датчику sensorPin (аналоговый)
Релюха 3 ну никак не реагирует (((
#include <Wire.h> // Добавляем необходимые библиотеки #include <LiquidCrystal_I2C.h> #include <dht11.h> dht11 DHT; // Объявление переменной класса dht11 #define DHT11_PIN 5 // Датчик DHT11 подключен к цифровому пину номер 4 #define RELAY1 9 //Порт реле 1 #define RELAY2 8 //Порт реле 2 #define RELAY3 7 //Порт реле 3 #define RELAY4 6 //Порт реле 4 byte degree[8] = // Битовая маска символа градуса { B00111, B00101, B00111, B00000, B00000, B00000, B00000, }; byte temp[8] = //Иконка термометра { B00100, B01010, B01010, B01110, B01110, B11111, B11111, B01110, }; byte humidL[8] = //Иконка влажности { B00000, B00000, B00011, B01110, B11000, B10000, B01110, B00011, }; byte humidR[8] = //Иконка влажности { B00000, B00000, B11000, B01110, B00011, B00001, B01110, B11000, }; byte Light[8] = //Иконка света { B00100, B10101, B10101, B01110, B11011, B01110, B10101, B10101, }; byte MOISTURE[8] = //Иконка почвы { B00100, B00100, B01010, B01010, B10001, B10001, B10001, B01110, }; LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность дисплея //Датчик влажности int sensorPin = 0; // Аналоговый порт 0 (порт данных) int sensorValue = 0; // Переменная для хранения значение из датчика //Датчик света int sensorPinL = 1; // Аналоговый порт 1 (порт данных) int sensorLight = 0; void setup() { lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.createChar(1, degree); // Создаем символ под номером 1 lcd.createChar(2, temp); lcd.createChar(3, humidL); lcd.createChar(4, humidR); lcd.createChar(5, Light); //иконка солнышка lcd.createChar(6, MOISTURE); //Иконка почвы // Инициализация DATA pins для OUTPUT pinMode(RELAY1, OUTPUT); pinMode(RELAY2, OUTPUT); pinMode(RELAY3, OUTPUT); pinMode(RELAY4, OUTPUT); digitalWrite(RELAY1,HIGH); // Turns Relay Off digitalWrite(RELAY2,HIGH); // Turns Relay Off digitalWrite(RELAY3,HIGH); // Turns Relay Off digitalWrite(RELAY4,HIGH); // Turns Relay Off } void loop() { // Выводим показания влажности и температуры lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки lcd.print("\3\4= % "); // Выводим текст lcd.setCursor(3, 0); lcd.print(DHT.humidity, 1); lcd.setCursor(7, 0); // Устанавливаем курсор в начало 2 строки lcd.print("\2= \1C "); // Выводим текст, \1 - значок градуса lcd.setCursor(9, 0); lcd.print(DHT.temperature,1); // выводим показания влажности почвы lcd.setCursor(0, 1); lcd.print("\6="); lcd.setCursor(2, 1); lcd.print(analogRead(sensorPin)); //Выводим значение освещенности lcd.setCursor(7, 1); lcd.print("\5= "); lcd.setCursor(9, 1); lcd.print(analogRead(sensorPinL)); //зададим диапазоны срабатываний для атмосферной влажности if (DHT.humidity > 35) { digitalWrite(RELAY1,LOW); } else if (DHT.humidity < 18) { digitalWrite(RELAY1,HIGH); } //зададим диапазоны срабатываний для атмосферной температуры if (DHT.temperature >= 29) { digitalWrite(RELAY2,LOW); } else if (DHT.temperature >= 28) { digitalWrite(RELAY2,HIGH); } //зададим диапазоны срабатываний для датчика влажности почвы if (analogRead(sensorPin) > 5000) { digitalWrite(RELAY3,HIGH); //выключаем } else if (analogRead(sensorPin) < 2000 ) { digitalWrite(RELAY3,LOW); //включаем } int chk; ; // Мониторинг ошибок chk = DHT.read(DHT11_PIN); // Чтение данных switch (chk){ case DHTLIB_OK: break; case DHTLIB_ERROR_CHECKSUM: lcd.clear(); lcd.print("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: lcd.clear(); lcd.print("Time out error"); break; default: lcd.clear(); lcd.print("Unknown error"); break; } delay(1000); }
И есть способ Аналоговые датчики в норм вид привести чтоб не 1024 а чтото 90%
int
val = analogRead(0);
val = map(val, 0, 1023, 0, 100);
а что это за фигня 5000 и 2000?
если максимально 1023
http://arduino.ru/Reference/AnalogRead
со значениями (5000 и 2000) разобрался )) спасибо за пинки ))
А вот с кодом преобразования в божеский вид не очень ((( sensorValue = map(sensorValue, 0, 1023, 0, 100);
Ведь по логике при 1023 почва вообще сухая тоесть влажность = 0
а при 0 = 100?
Так?
при размещении длинного кода ставьте галочку "свернуть код" , "пронумеровать строки" - само собой
почва пропитана водой , датчик выдаёт 100% влажности
sensorValue = map(sensorValue, 0, 1023, 0, 100);
почва сухая , датчик выдаёт 100% сухости
sensorValue = map(sensorValue, 0, 1023, 100, 0);
всё зависит от того что вложено в переменную "sensorValue"
и что вы повесили на Relay1...4 ?
охладитель , нагреватель , опрыскиватель и осушитель ? или ? по коду не видно....
Если датчик влажности подобен http://www.ebay.com/itm/Soil-Hygrometer-Detection-Module-Soil-Moisture-Sensor-For-arduino-Smart-car-/261831593816?pt=LH_DefaultDomain_0&hash=item3cf6610f58
то через 1.5-2 мес под влиянием электролиза перестанет работать((( и ничего не помогает(((
Если датчик влажности подобен http://www.ebay.com/itm/Soil-Hygrometer-Detection-Module-Soil-Moisture-Sensor-For-arduino-Smart-car-/261831593816?pt=LH_DefaultDomain_0&hash=item3cf6610f58
то через 1.5-2 мес под влиянием электролиза перестанет работать((( и ничего не помогает(((
Помогают электроды из нержавейки.
Спасибо!!!! На след год попробую опять поливать свою делянку по влажности, а не по времени)
Локовырял код но теперь проблема с релюхами реакцией на датчик аналоговый влажности реле №3
А по поводу окисления то можно отдельным реле включать питание на датчике и задать время опроса подольше и тогда деградирование контактов будет в разы дольше. брал именно такой датчик только потому что к нему хоть гвозди можно подсоеденить )))
Какой значек можно применить к моему коду для атмосферной влажности и влажности почвы?
Какой значек можно применить к моему коду для атмосферной влажности и влажности почвы?
капелька и над ней черточка - для атмосферной влажности
капелька и под ней черточка - для влажности почвы
думаю, будет наглядно и понятно
Супер спасибо за идею... Тучку думал нарисовать но такое г... вышло )))
А с кодом и реле есть варианты?
Чтобы понять что идет с датчика влажности - вам нужно с ним "Поиграться" - посмотреть как меняется analogRead(sensorValue)
в зависимости от состояния датчика. Тогда сразу будет понятно с чем надо сравнивать. А в будущем сделать откалибровать датчик.
Вообще измерьте напряжение мультиметром на этом входе.
Я это вижу на дисплее )))
но при переходе за уровень 55 реле не выключается ((, а на уровне от 0-10 не включено (((
поправил для наглядности ))
Советы будут?
Советы будут?
убиться об стенку не подойдет?
ибо нормальные люди когда собирают нечто из двух гвоздей то берут простой скеч который читает аналогый пин . втыкают свои гвозди в землю и смотрят что там читаеться. поливают и опять смотрят что читается.. и из этого делают вывод когда полито а когда нет.
а не нормальные люди, занимаются фигней и пытаются отгадать что там показывает. и почему не так как им нужно.
Прекрасно ))) на каждом форуме есть свой злобный писатель ) и всеже в Вашем ответе по существу 0 информации (где скетч? Пример подключения)
Так как пишете Вы, может писать любой школьник...
О и забыл... Обязательно вставляйте слова "погугли" , "кури маны", "RTFM" это и модно и опять таки показывает всем читатетелям новичкам, насколько вы круты ! И вообще богам до коментов опускатся не стоит! Или от вашего имнни пишет ваша arduina?
на каждом форуме есть свой злобный писатель
это я !
где скетч? Пример подключения
кто тибе их пообещал ?
Или от вашего имнни пишет ваша arduina?
он такое сможет ( или смогет ) - думается иногда - что так он и есть !
Shamzelia, вы очень не внимательны. Смотрим:
начало loop
Вы прочли показание с нулевого порта (кстати корректнее писать A0), масштабировали его, и положили в переменную sensorValue , Но что мы видим ближе к концу loop :
Вы снова читате аналоговый вход, подставляя ему вместо адреса порта своё значение влажности.
Зато у него няшные иконки есть. :)
Зато у него няшные иконки есть. :)
Кстати о няшных иконках... У кого какие мысли/идеи есть насчет (няшной, не няшной - все равно) иконки для атмосферного давления? Высота до 8 точек, ширина - до 32.
Кстати о няшных иконках... У кого какие мысли/идеи есть насчет (няшной, не няшной - все равно) иконки для атмосферного давления? Высота до 8 точек, ширина - до 32.
самая няшная иконка для давления.. вверх давление растет. вниз падает
самая няшная иконка для давления.. вверх давление растет. вниз падает
иконка супер! :) жаль, в 8 точек ее не утиснуть чтобы была понятной
Shamzelia, вы очень не внимательны. Смотрим:
начало loop
Вы прочли показание с нулевого порта (кстати корректнее писать A0), масштабировали его, и положили в переменную sensorValue , Но что мы видим ближе к концу loop :
Вы снова читате аналоговый вход, подставляя ему вместо адреса порта своё значение влажности.
Это от того я его в конструкции if читаю, что не знаю как правильно ((( вот и прошу помощи
Shamzelia, у вас там всё прочитано уже. Должно быть так:
if
(sensorValue>55) { и так далее...
Спасибо, попробую
Всем спасибо за наставления на путь истенный итог ниже, усе работает шеф!
Теперь вопрос
Разорвал цепь питания датчика влажности реле 4
Хочу редко опрашивать датчик влажности и включать его (реле 4) только когда опрашиваю, но при этом часто опрашивать остальные датчики.
Пример раз в сутки включаем реле 4 и опрашиваем датчик, если сухо включаем реле 3 и поливаем пока не станет нормально )
Остальные датчики опрашиваем с частотой раз в 1 минут..
если сухо включаем реле 3 и поливаем пока не станет нормально )
Боюсь, когда станет нормально на датчике, вокруг него будет озеро. Скорее всего придеться экспериментально подобрать время полива. ИМХО.
Ну вот здесь я предпологаю что по лупу можно написать все что угодно, но вгот как ? Собственно вопрос )
Ну вот здесь я предпологаю что по лупу можно написать все что угодно, но вгот как ? Собственно вопрос )
Это не вопрос. Это вам в раздел "ищю исполнителя"
Форум одного хейтера? может всетаки по сути вопроса а не флудилку орнанизовывать..?
Форум одного хейтера? может всетаки по сути вопроса а не флудилку орнанизовывать..?
Вот объясните, в чем обида? У вас самого есть мысли как это сделать? Пухлявый это сделает с закрытыми глазами.
нО вместо этого директ на заказ ))) Мы с ним не в одной теме переписываемся ))) но по существу очень мало... а жаль ..
можно делать луп в лупе? или задовать смещение для переменной с каждым опросом и потом ее уменьшать?
Чтото типа
Val1=1
loop
if sensorvalue <= 55 val1=10000
val1=val1-1000
delay = 1000
Он до вас пытается донести одну истину, что не нужно уметь программировать, нужно уметь ставить задачу, а потом разбивать ее на мелкие части, которые возможно описать программой. Называется это алгоритм. Имея его на руках, вы сможете написать на любом языке (соблюдая синтаксис).
Все остальные вопросы решеются либо чтением, либо экспериментом.
И то, что вы хотите делать с переменной, это для чего?
Хочу редко опрашивать датчик влажности и включать его (реле 4) только когда опрашиваю, но при этом часто опрашивать остальные датчики.
Пример раз в сутки включаем реле 4 и опрашиваем датчик, если сухо включаем реле 3 и поливаем пока не станет нормально )
Остальные датчики опрашиваем с частотой раз в 1 минут..
Читаем , заводим нужное количество переменных, отмеряем требуемые интервалы, производим необходимые действия.
Читаем , заводим нужное количество переменных, отмеряем требуемые интервалы, производим необходимые действия.
Датчик сырости через реле... прикинь до чего техника дошла... хорошо еще паровой котел изолентой не примотали.
Позже переделаю на транзистор ) пока нет в наличии (
За пинок по ссылке спасибо, отрезвел, переберу код )
Тоесть в логике мне нужно прописать несколько
long previousMillis = 0;
long interval = 1000;
для разных датчиков? Верно мыслю?
Какой транзистор? Бабушкин ? Радио слушать?
Датчик влажности нормальные люди вешают на 2 аналоговых пина. И туда сюда меряют по очереди, что снизить окисление. Какие реле? Какие транзисторы? Вы вообще читаете что нибудь кроме комиксов?
Тоесть в логике мне нужно прописать несколько
long previousMillis = 0;
long interval = 1000;
для разных датчиков? Верно мыслю?
Мыслите верно, только здесь лучше "unsigned long previousMillis = 0;", поищите, в чем разница.
Тоесть в логике мне нужно прописать несколько
long previousMillis = 0;
long interval = 1000;
для разных датчиков? Верно мыслю?
Для упрощения почитайте http://alxarduino.blogspot.ru/2013/09/ComfortablyBlinkWithoutDelay.html тут.
DO_EVERY(1000,{
ЧТО_НУЖНО_СДЕЛАТЬ1
});maxi_10, а вы уверены, что ТС надо настолько упрощать? Ведь ничему не научится, кроме как копипастить.