ciao a tutti, sto provando a realizzare un classico progetto di arduino: autoiirrigazione con arduino.
Componenti:
Arduino uno rev 3
Display LCD 1602
Igrometro
foto-sensore
Relè
Pompetta 5 volt
Il funzionalmento è banale: quando il foto sensore rileva il buio, il codice controlla l'umidità del terreno tramite l'igrometro e quando questa è al di sotto di una certa soglia, il relè si attiva facendo partire una pompetta da 5 volt.
Il mio unico problema è che al momento in cui il relè si attiva e la pompa parte, sul display appaiono dei caratteri strani e mi si sfasano le scritte sul display stesso senza più ritornare apposto quando la pompa si spegne..Ho letto vari argomenti in merito ed in alcuni di questi consigliano di usare uno snubber in parallelo...Comprato, messo ma il problema rimane...Potete aiutarmi a capire dove è il problema?
di seguito lo schema dei collegamenti e il codice
#include <LiquidCrystal.h>
#define photoSensor 8
#define hygrometer A0
#define relay 13
#define lcdContrast 6
#define lcdRs 12
#define lcdEn 11
#define lcdD4 5
#define lcdD5 4
#define lcdD6 3
#define lcdD7 2
const int MinHumidityThreshold = 20;
const int MaxHumidityThreshold = 50;
const int contrast = 75;
const String light = "Light: ";
const String hum = "Humidity: ";
const String night = "night";
const String day = "day";
LiquidCrystal lcd(lcdRs, lcdEn, lcdD4, lcdD5, lcdD6, lcdD7);
int lightness = 0;
int humidity = 0;
int relayState = 1;
int Li = 16;
int Lii = 0;
void setup() {
analogWrite(lcdContrast,contrast);
prepareLcd();
pinMode(hygrometer, INPUT);
pinMode(photoSensor, INPUT);
pinMode(relay, OUTPUT);
}
void loop() {
lightness = digitalRead(photoSensor);
logDisplay();
if(lightness == HIGH){
humidity = map(analogRead(hygrometer), 0, 1023, 100, 0);
if(humidity <= MinHumidityThreshold && relayState == 1){
digitalWrite(relay, LOW);
relayState = 0;
}
else if(humidity >= MaxHumidityThreshold){
digitalWrite(relay, HIGH);
relayState = 1;
}
}
else{
relayState = 1;
digitalWrite(relay, HIGH);
}
delay(250);
}
void logDisplay(){
clearLcdLine(0);
clearLcdLine(1);
lcd.setCursor(0, 0);
String dayLight = lightness == HIGH ? night : day;
lcd.print(light + dayLight);
if(lightness == HIGH){
lcd.setCursor(0, 1);
if(relayState == 0){
lcd.print(scrollLeft("Watering plant..."));
}
else{
Li = 16;
Lii = 0;
lcd.print(hum + humidity + "%");
}
}
else{
clearLcdLine(1);
Li = 16;
Lii = 0;
lcd.print("Waiting night");
}
}
String scrollLeft(String stringDisplay){
String result;
String strProcess = stringDisplay + " " + stringDisplay;
result = strProcess.substring(Li, Lii);
Li++;
Lii++;
if(Li > strProcess.length()){
Li = 16;
Lii = 0;
}
return result;
}
void clearLcdLine(int line){
for(int n = 0; n < 16; n++) {
lcd.setCursor(n,line);
lcd.print(" ");
}
lcd.setCursor(0,line);
}
void prepareLcd(){
lcd.begin(16, 2);
lcd.blink();
lcd.setCursor(0, 0);
lcd.print(light);
lcd.setCursor(0, 1);
lcd.print(hum);
}
Grazie...!!
Non so se lo snubber è collegato bene (vedi schema)..
Lo snbber che ho comprato è come questo in foto:



.

