Добрый день. Пытаюсь потестить датчик влажности почвы ( http://amperka.ru/product/soil-mois...e=proj&utm_campaign=irrigator&utm_medium=wiki ) Прежде, чем его использовать, хочу посмотреть его показания на LCD экранчике, заодно и поучиться это делать, написал вот такой скетч Код (Text): #include <LiquidCrystal.h> #define A0 GIGR LiquidCrystal lcd(13, 12, 11, 10, 9, 8); void setup() { /* Инициализируем дисплей: 2 строки по 16 символов */ lcd.begin(16, 2); /* Выводим на дисплей традиционную фразу (: */ lcd.print("hello, world!"); pinMode(GIGR,OUTPUT); } void loop() { /* Устанавливаем курсор в 1 столбец 2й строки. Нумерация идёт с нуля, * первым аргументом идёт номер столбца. */ lcd.setCursor(0, 1); /* Выводим на дисплей число секунд, прошедших с момента старта Arduino */ int val = analogRead(GIGR); val =map (val, 0 , 1023, 0, 950); lcd.print(val); delay(500); } Но значения выше 450 не поднимаются, хотя и опускал датчик в воду Мне кажется кроется в этой строчке val =map (val, 0 , 1023, 0, 950); Помогите советом Спасибо!
PHP: val =map (val, 0 , 1023, 0, 950); Тут ошибки нет, т.к. "мапируется" значение, которое считывается с пина: PHP: int val = analogRead(GIGR); Лучше записать так (одной строкой): PHP: int val =map (analogRead(GIGR), 0 , 1023, 0, 950); Мне кажется проблема в подаваемом питании на датчик. Скорее всего подаете 3.3 В ? От сюда и такой предел. Для значений : Нужно подать 5 В. Или просто экспериментальным путем выяснить, когда сухо, мокро или влажно. К примеру 450 - это уже мокро, около 150-250 - влажно, и ниже сухо.
Это могло произойти т.к. у меня еще к ардуине подключен дисплей?и отсюда на датчике на 5В? Это можно проверить мультиметром на входе датчика? Прост и правда только разбираюсь с электричеством
Аналоговый порт A0 назвал GIGR и конечно он должен быть input а не out теперь опуская в воду значение доходит до 604-607 и описал порт по другому int gigrPin=0; пробовал убирать map все равно датчик не выдает 950...
Код (Text): #include <LiquidCrystal.h> int gigrPin=0; LiquidCrystal lcd(13, 12, 11, 10, 9, 8); void setup() { /* Инициализируем дисплей: 2 строки по 16 символов */ lcd.begin(16, 2); /* Выводим на дисплей слово влажность */ lcd.print("\x42\xA7\x41\xA3\x48\x4F\x43\x54\xC4\x3A"); /*pinMode(GIGR,INPUT);*/ } void loop() { /* Устанавливаем курсор в 1 столбец 2й строки. Нумерация идёт с нуля, * первым аргументом идёт номер столбца. */ lcd.setCursor(0, 1); int val =analogRead(gigrPin); int val1 = (float)950/1025*val; lcd.print(val1 ); delay(500); } конечно с переменными криво, но хоть работает с тестами с землей показывает нужно корректировать на 100 меньше показания...залил всю землю водой но выше 650 не получил, а в высушенной получил только 200
int gigrPin=0; - это не аналоговый порт, а цифровой D0 (он же Tx). Почему вы так стремитесь получить 950? По коду 950 - это максимально возможная величина (по сути минимальное сопротивление, т.е. когда замыкание между A0 и GND). Естественно, в земле, даже влажной и соленой, этого никогда не достичь.