Ciao, ho due Arduino che lavorano in associazione, il primo riceve i dati e quando si verifica una determinata istruzione mette un pin in OUTPUT e manda un segnale al secondo Arduino impostato su INPUT, se il segnale inviato e 1 accende un relè se invece è 0 spegne il relè... tutto funziona bene tranne che se resetto la prima scheda il relè del secondo Arduino si accende anche se il sensore che mi invia il segnale è 0... ho collegato i GND delle schede in comune,ma pur non collegandoli in comune il problema si ripresenta.... quando resetto la prima scheda il pin in OUTPUT manda una breve tensione che fa sì che il secondo arduino lo legga come 1 ...
Vi posto gli sketch dei due Arduino
il primo ha il pin 9 che manda il segnale (Arduino Mega)
/* Questo progetto utilizza due Igrometri e un sensore DHT11 per gestire una Serra Automatica
*/
int lettura = A0 ; // Pin analogico a cui è collegato il sensore 1
int lettura1 = A1 ; // sensore 2
int pompa = 9 ; //Pin a cui è collegato i rele' per attivare al pompa
int dht11 = 10 ;
int hc12 = 11 ;
int sensorValue = 1008; // Valore del sensore 1 immerso in acqua
int sensorValue1 = 1010; // Valore del sensore 2 immerso in acqua
#include <HygrometerSensor.h>
#include <Adafruit_Sensor.h>
//DHT11 Sensor:
#include "DHT.h"
#define DHTPIN 12 // Sensore collegato al PIN 12
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
//I2C LCD:
#include <Wire.h> // Libreria WIRE
#include <LiquidCrystal_I2C.h> // Libreria LCD I2C
// LCD I2C address
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup()
{
delay(1000);
//I2C LCD
Serial.begin(9600);
lcd.begin(20,4);
Serial.println("Serra Automatica");
pinMode(pompa,OUTPUT); // Uscita relè pompa
digitalWrite(pompa, LOW); // Stato relè spento
// PIN 10 al relè - IN2
pinMode(dht11, OUTPUT); // Uscita relè sensore DHT11
digitalWrite(dht11, HIGH);
pinMode(hc12,OUTPUT);
digitalWrite(hc12, HIGH); // HC-12 Trasmittente
// Avvio sensore DHT11
dht.begin();
}
void loop(){
// Igrometro 1
lettura = analogRead(A0);
sensorValue = map (lettura, 1008, 319, 0, 100); // converto il valore analogico in percentuale
Serial.print("Umidità terra 1 : ");
Serial.print(sensorValue);
Serial.println ("%"); //Stampa a schermo il valore
// Igrometro 2
lettura1 = analogRead(A1);
sensorValue1 = map (lettura1, 1010, 215, 0, 100); // converto il valore analogico in percentuale
Serial.print("Umidità terra 2 : ");
Serial.print(sensorValue1);
Serial.println ("%"); //Stampa a schermo il valore
if ((lettura >= 800) && (lettura1 >= 840))
{
digitalWrite (pompa,HIGH); //... attiva la pompa
digitalWrite (hc12,LOW); // invio dati
} else {
digitalWrite (pompa,LOW); //.... spegne la pompa
digitalWrite (hc12,HIGH); // nessun dato
}
delay(10000);
// Lettura umidità e temperatura del sensore DHT11n
int h = dht.readHumidity();
int t = dht.readTemperature();
// Misura la temperatura e se maggiore di ... gradi attiva relè per accendere la ventola
if (t >= 25 )
digitalWrite (dht11, LOW); // Attiva Relè 2
else
digitalWrite (dht11, HIGH); // Spegni Relè 2
delay (2000);
Serial.print("Temp: ");
Serial.print(t);
Serial.print("C, Umid: ");
Serial.print(h);
Serial.println("%");
// impostare cursore sulla prima riga:
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.print(t);
lcd.print("C");
// imposta cursore sulla seconda riga:
lcd.setCursor(0,1);
lcd.print("Umidita' Aria: ");
lcd.print(h);
lcd.print("%");
// imposta il cursore sulla terza riga:
lcd.setCursor(0,2);
lcd.print("Umid..Terra 1: ");
lcd.print(sensorValue);
lcd.print("%");
lcd.setCursor(0,3);
lcd.print("Umid..Terra 2: ");
lcd.print(sensorValue1);
lcd.print("%");
}
Il secondo ha il pin A0 come INPUT e riceve il segnale (Arduino Uno)
#define RELAY1 9 // Elettrovalvola pompa
#define RELAY2 10 // Motore irrigazione
#define pin_sensore A0
void setup() {
pinMode(RELAY1, OUTPUT); // Elettrovalvola
digitalWrite(RELAY1, HIGH);
pinMode(RELAY2, OUTPUT); // Motore
digitalWrite(RELAY2, HIGH);
pinMode(pin_sensore, INPUT);
}
void loop() {
if (digitalRead(pin_sensore) == 0 ) {
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
}
else {
digitalWrite(RELAY1, LOW); // Start l'elettrovalvola
digitalWrite(RELAY2, HIGH); // Relè on/off spento
delay(120000); //Attesa riempimento impianto
digitalWrite(RELAY2, LOW);
delay(500);
digitalWrite(RELAY2, HIGH); // Avvio motore per irrigare
delay(190000); // Attesa spegnimento elettrovalvola
digitalWrite(RELAY1, HIGH); // Elettrovalvola spento
delay(5000);
}
}
SUGGERMENTI ?