modulo relè

Buonasera a tutti i lettori,

ho compilato un codice che alla pressione di un pulsante mi si attiva un relè ed effettua una sequenza di HIGH LOW il programma gira come desidero.

Il relè è collegato in parallelo ad altri pulsanti che comandano un altro relè che aziona l'apertura di un cancello elettrico, il circuito è stato fatto per avere una sequenza di comandi e lasciare aperto il cancello per 30 minuti.

Il problema e che se uno dei pulsanti, collegati in parallelo al relè comandato da arduino nano, viene azionato ( chiudo il circuito), mi parte il loop di arduino come se premessi il pulsante dedicato.... :o

Ci vuole un filtro? qualcosa passa dallo scambio del relè ?

grazie

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Posta il codice del programma e un disegno dei collegamenti.

Ciao e Buon Natale,

il codice è questo:

/* Questo programma permette di accendere una lampada connessa al relè attraverso la pressione su un buttone, facendola rimanere accesa per un certo periodo
 This example code is in the public domain.
 
 http://www.arduino.cc/en/Tutorial/Button
 */
 
const int buttonPin = 2;     // Il PIN a cui è connesso il bottone
const int relay =  7;      // Il PIN a cui è connesso il relè
int t = 5000;
 
// Inizializzo la variabile che indica lo stato del bottone
int buttonState = 0;        
 
void setup() {
  // Inizzilizza l'uscita del relè
  pinMode(relay, OUTPUT);      
  // Inizilizza l'ingresso del bottone
  pinMode(buttonPin, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);     
}
 
void loop(){
  // Leggo lo stato del bottone
  buttonState = digitalRead(buttonPin);
 
  // Controllo se viene premuto il bottone
  // Se lo stato è HIGH, allora viene premuto
  if (buttonState == HIGH) {
    // accendo un led che mi indica che il pulsante è stato premuto
    digitalWrite(LED_BUILTIN, HIGH);
    // Chiudo l'interruttore per un periodo t    
    // apro il cancello
    digitalWrite(relay, LOW);       //apri il relay
    delay(400);                     //per 0.400 secondi
    digitalWrite(relay, HIGH);      //chido il relay
    //attendo che si completi l'apertura
    delay(30000);                  // aspetto mezzo minuto per apertura completa del cancello
    // do impulso di apertura
    digitalWrite(relay, LOW);
    delay(400);
    digitalWrite(relay, HIGH);
    delay(800);                   //intervallo di tempo per dare secondo impulso per bloccare il cancello
    digitalWrite(relay, LOW);
    delay(400);
    digitalWrite(relay, HIGH);
    //
    delay(45000);             // tempo che rimane bloccato aperto il cancello  30 minuti 1.800.000 millisecondi
    digitalWrite(relay, LOW);
    delay(400);
    digitalWrite(relay, HIGH);
    //delay(20000);
    //digitalWrite(relay, LOW);
    //delay(400);
    //digitalWrite(relay, HIGH);
    digitalWrite(LED_BUILTIN, LOW);
  } 
 else {
    // Apro l'interruttore
   digitalWrite(relay, HIGH); 
  }
}

i collegamenti li ho copiati, come pure parte del codice, da qui https://www.arduino.cc/en/Tutorial/Button

Le prove che ho fatto:

  • alimentato arduino con un power bank le cose sono un pochino migliorate rispetto all'alimentatore esterno da 5V
  • cambiato relè con altro tipo dotato di fotoaccopiatore ma nessun risultato, ne ho ordinato uno optoisolato.

L'ingresso dell'esempio con una resistenza da 10k e nessun condensatore di filtro probabilmente è troppo sensibile, se il collegamento al pulsante è lungo hai un'antennona che capta qualsiasi disturbo elettrico nei paraggi.

Per iniziare (nel senso della modifica più semplice) scenderei la resistenza a 1k (minore impedenza = minori disturbi captati), e in parallelo ad essa un condensatore poliestere 1µF.

Grazie della risposta .

In effetti il pulsante che porta in HIGH un pin digitale, dista circa 5 metri dalla board, e per di più il filo è vicino altri ..... per cui fà una bella antennona.

Ho provato ad alimentare arduino con un power bank e usare il pulsante prossimo alla scheda e devo dire che così, nelle prime prove non ho fatto, tutto funziona.

Provo ad implementare le modifiche suggerite :wink: