Дисплей и гигрометр

Тема в разделе "Arduino & Shields", создана пользователем Fumofu, 20 апр 2015.

  1. Fumofu

    Fumofu Нуб

    Добрый день.
    Пытаюсь потестить датчик влажности почвы ( 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);

    Помогите советом
    Спасибо!
     
  2. Salk

    Salk Гик

    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 - влажно, и ниже сухо.
     
  3. Fumofu

    Fumofu Нуб

    Это могло произойти т.к. у меня еще к ардуине подключен дисплей?и отсюда на датчике на 5В?
    Это можно проверить мультиметром на входе датчика? Прост и правда только разбираюсь с электричеством
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    вопрос автору - объясните что выполняют эти строки:
     
  5. Fumofu

    Fumofu Нуб

    Аналоговый порт A0 назвал GIGR
    и конечно он должен быть input а не out
    теперь опуская в воду значение доходит до 604-607
    и описал порт по другому int gigrPin=0;
    пробовал убирать map все равно датчик не выдает 950...
     
    Последнее редактирование: 22 апр 2015
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    обычно поступают наоборот - для имени GIGR назначают порт A0:
    #define GIGR A0

    Подсолите воду :)
     
  7. Fumofu

    Fumofu Нуб

    Код (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
     
  8. Tomasina

    Tomasina Сушитель лампочек Модератор

    int gigrPin=0; - это не аналоговый порт, а цифровой D0 (он же Tx).
    Почему вы так стремитесь получить 950? По коду 950 - это максимально возможная величина (по сути минимальное сопротивление, т.е. когда замыкание между A0 и GND). Естественно, в земле, даже влажной и соленой, этого никогда не достичь.