Go Down

Topic: Collegamento GND in comune su due Arduino (Read 306 times) previous topic - next topic

cicciozuc

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)

Code: [Select]
/* 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)

Code: [Select]
#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 ?





uwefed

Quando resetti tutti i pin diventano input e percui non hai piú un livello logico sul entrata del secondo Arduino. Metti una resistenza da ca 10kOhm tra entrata del secondo pin e massa.
Cosí se il primo non da tensione il secondo legge comunque LOW.
Ciao Uwe

cicciozuc

Grazie Uwe farò come dici... il GND in comune è necessario,perchè se non lo metto i due Arduino comunicano lo stesso

SukkoPera

Oppure inverti la logica e usa il pull-up interno.

Sì, il GND in comune è necessario.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

cicciozuc

tu dici di mettere il pin A0 come INPUT_PULLUP così si attiva la resistenza interna??

SukkoPera

Sì, ma a quel punto devi invertire la logica e accendere quando leggi LOW.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

cicciozuc

Con INPUT_PULLUP il problema rimane uguale, ho messo la resistenza da 10K tra GND e A0 e ho risolto, resettando il primo Arduino il relè collegato nel secondo non si accende notando però che il led IN1 del relè si accende in maniera impercettibile tanto da rimanere spento...

Grazie a tutti voi

Go Up