Измерение влажности почвы и индикация RGB диодом

sanek1337
sanek1337 аватар
Offline
Зарегистрирован: 25.11.2013

Доброго времени суток. Полазив но инету в поисках датчика измерения влажности почвы случайно наткнулся на реализацию на Arduino. И как-то сразу заинтересовала меня данная тема. Покурив кучу информации для данного проекта были закуплены:

http://www.ebay.com/itm/Soil-Hygrometer-Humidity-Detection-Module-Moisture-Water-Sensor-for-Arduino-hv2n-/271331451538?pt=AU_B_I_Electrical_Test_Equipment&hash=item3f2c9d6292

http://www.ebay.com/itm/Arduino-Nano-V3-0-with-ATMEGA328P-Module-/281145520990?pt=LH_DefaultDomain_0&hash=item417594335e

http://www.ebay.com/itm/New-RGB-3-Color-Full-Color-LED-SMD-Module-For-Arduino-AVR-PIC-/181259217039?pt=AU_Car_Parts_Accessories&hash=item2a33e4288f&vxp=mtr

Далее был написан вот такой код: 


int diodBlue=6;
int diodGreen=4;
int diodRed=2;
int sensor=8; // питание датчика подключить к пину 8

void setup()
{
  Serial.begin(9600);
  pinMode(diodBlue,OUTPUT);
  pinMode(diodGreen,OUTPUT);
  pinMode(diodRed,OUTPUT);
  pinMode(sensor,OUTPUT);
  digitalWrite(sensor, LOW);

}
void loop()
{
  Serial.println(analogRead(0));

  digitalWrite(sensor, LOW);
  delay(15000); // время через которое опрашивается датчик
  digitalWrite(sensor, HIGH);

  if (analogRead(0) <= 450) 
  {
    Serial.print("Ochen Vlagno ");// Очень влажная почва
    digitalWrite(diodBlue, HIGH); //Включаем синий диод на 2 сек
    delay(2000);
    digitalWrite(diodBlue, LOW);
    digitalWrite(diodGreen, LOW);
    digitalWrite(diodRed, LOW);
  }

  else if( analogRead(0)>450 && analogRead(0)<700)
  {
    Serial.print("Vlagnaya pochva ");// Влажная почва
    digitalWrite(diodGreen,HIGH);//Включаем зелёный диод на 2 сек
    delay(2000);
    digitalWrite(diodGreen,LOW);
    digitalWrite(diodBlue, LOW);
    digitalWrite(diodRed, LOW);
  }

  else
  {
    Serial.print("Suhays pochva ");// Сухая почва
    digitalWrite(diodRed,HIGH);//Включаем красный диод на 2 сек
    delay(2000);
    digitalWrite(diodRed,LOW);
    digitalWrite(diodBlue, LOW);
    digitalWrite(diodGreen, LOW);
  }

}

Собрана вот такая схема:

И вот готовое устройство в действии:

 

sanek1337
sanek1337 аватар
Offline
Зарегистрирован: 25.11.2013

Видео работы девайса

http://youtu.be/usQ7ud7kmfw

 

sanek1337
sanek1337 аватар
Offline
Зарегистрирован: 25.11.2013

В коде нашлись ошибки и поэтому он притерпел изменения. Теперь выглядит так:

int diodBlue=6;
int diodGreen=4;
int diodRed=2;
int sensor=8; // питание датчика подключить к пину 8

void setup()
{
  Serial.begin(9600);
  pinMode(diodBlue,OUTPUT);
  pinMode(diodGreen,OUTPUT);
  pinMode(diodRed,OUTPUT);
  pinMode(sensor,OUTPUT);
  digitalWrite(sensor, HIGH);

}
void loop()
{
  Serial.println(analogRead(0));

  digitalWrite(sensor, HIGH);
  delay(2000); // время за которое опрашивается датчик
  digitalWrite(sensor, LOW);  

  if (analogRead(0) <= 450) 
  {
    Serial.print("Ochen Vlagno ");// Очень влажная почва
    digitalWrite(diodBlue, HIGH); //Включаем синий диод на 2 сек
    delay(2000);
    digitalWrite(diodBlue, LOW);
    digitalWrite(diodGreen, LOW);
    digitalWrite(diodRed, LOW);
  }

  else if( analogRead(0)>450 && analogRead(0)<700)
  {
    Serial.print("Vlagnaya pochva ");// Влажная почва
    digitalWrite(diodGreen,HIGH);//Включаем зелёный диод на 2 сек
    delay(2000);
    digitalWrite(diodGreen,LOW);
    digitalWrite(diodBlue, LOW);
    digitalWrite(diodRed, LOW);
  }

  else
  {
    Serial.print("Suhays pochva ");// Сухая почва
    digitalWrite(diodRed,HIGH);//Включаем красный диод на 2 сек
    delay(2000);
    digitalWrite(diodRed,LOW);
    digitalWrite(diodBlue, LOW);
    digitalWrite(diodGreen, LOW);
  }

}

 

Клапауций
Offline
Зарегистрирован: 10.02.2013

и, датчик заменить на два отрезка нержавеющего провода.

sanek1337
sanek1337 аватар
Offline
Зарегистрирован: 25.11.2013

Это будет в будующем )

sanek1337
sanek1337 аватар
Offline
Зарегистрирован: 25.11.2013

Решил что для одной задачи слишком жирно использовать целу Нано. Для этой цели был куплен Аттини 13. Подправлен код, который теперь выглядит вот так: 

int diodBlue=6;
int diodGreen=4;
int diodRed=2;


void setup()
{
  pinMode(diodBlue,OUTPUT);
  pinMode(diodGreen,OUTPUT);
  pinMode(diodRed,OUTPUT);

}
void loop()
{


  if (analogRead(0) <= 450) 
  {
    digitalWrite(diodBlue, HIGH); //Включаем синий диод на 2 сек
    delay(2000);
    digitalWrite(diodBlue, LOW);
    digitalWrite(diodGreen, LOW);
    digitalWrite(diodRed, LOW);
  }

  else if( analogRead(0)>450 && analogRead(0)<700)
  {
    digitalWrite(diodGreen,HIGH);//Включаем зелёный диод на 2 сек
    delay(2000);
    digitalWrite(diodGreen,LOW);
    digitalWrite(diodBlue, LOW);
    digitalWrite(diodRed, LOW);
  }

  else
  {
    digitalWrite(diodRed,HIGH);//Включаем красный диод на 2 сек
    delay(2000);
    digitalWrite(diodRed,LOW);
    digitalWrite(diodBlue, LOW);
    digitalWrite(diodGreen, LOW);
  }

}

Код в Ардуино ИДЕ компилируется, занимает 540 байт. Помогите с нумерацией портов пожалуйста.