Relè e funzionamento ciclico

Salve ragazzi, sono nuovo in questo forum e neofita anche nel mondo Arduino.
Studio ingegneria informatica e quello che volevo chiedervi è una domanda inerente al codice per un progetto.
Sto cercando di creare un lampada led (usando una striscia led) attivabile mediante sensore pir o mediante interruttore. La striscia led probabilmente (ancora non l'ho comprata) sarà alimentata a 12 volt, dunque devo usare un relè poiché non posso alimentarla direttamente da uno dei pin dell'arduino.
In questo momento sto facendo delle prove su come sarà il possibile circuito finale e il codice software usando un led invece che la striscia. Per rendere più vicino possibile a ciò che sarà il mio progetto finale, anche se non necessario ho collegato il relè al led.
Il collegamento relé/led è il seguente (premesso che uso un modulo da un solo relé modello: SRD-05VDC-SL-C. Essendo un modulo non collego al relé né transistor né resistenze poiché sono già presenti):
COM==>+5V
NO==>Anodo led
PIN S (segnale digitale per attivare il relé)==>PIN 12

Il funzionamento del relé momentaneamente lo gestisco mediante un bottone+fotoresistenza (si accende il led se due condizioni inerenti a questi due componenti sono soddisfatte) e mediante un interruttore (collegando un estremità a GND e un atra al pin 9) in modo che, mediante digitalRead, se viene letto il passaggio di corrente (circuito chiuso) viene inviato un segnale al relé che si eccita.
Il problema sorge con l'interruttore: quando il relè è eccitato dal bottone+fotoresistenza esso si accende senza problemi, quando è eccitato dall'interruttore funziona pure, ma (dal continuo ticchettio che fa) capisco che in realtà il relé viene eccitato per qualche microsecondo e poi si stacca. Fondamentalmente il led resta acceso (accendi/spegni avviene abbastanza velocemente da non fare notare niente) ma il rumore del relé è insopportabile. Come posso risolvere il problema?
Allego il codice e il modulo relé usato.

Lampada_led.ino (442 Bytes)

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

... spero tu abbia messo una resistenza di pull-up o di pull-down (a secondo di verso cosa chiude il bottone) sull'ingresso dove lo hai collegato ::slight_smile:

Guglielmo

Chiedo scusa per non essermi presentato, per la fretta ho tralasciato, ma ho rimediato.
Ho messo 2 resistenze di pull-down da 1k, una al bottone (che momentaneamente uso per sostituire il sensore pir) e una all'interruttore (per interruttore intendo il classico che in una posizione apre il circuito e nell'altra lo chiude), ho notato che aggiungendo un delay nel programma riesco a risolvere il problema, ma è una soluzione che penso vada in conflitto con ciò che voglio che faccia poiché, fermando il loop con il delay, si fermano tutti i controlli, dunque l'arduino non saprà se l'interruttore viene aperto, e quindi non posso spegnere la lampada, finché il delay non è concluso. Cosa posso fare? :confused: :confused:

Chiedo anche scusa per aver inserito come allegato il codice, rimedio subito

#define IN A0

int rled=12;
int button=13;
int interr=9;

bool ceck(){
  int lum=0;
  lum=analogRead(IN);
  if(lum<500 && digitalRead(button)==HIGH){
    return true;
  }else{
    return false;
  }
}
void setup() {
  pinMode(rled,OUTPUT);
  pinMode(interr,INPUT);
  pinMode(IN,INPUT);
}
void loop() {
  if(ceck()==true || digitalRead(interr)==HIGH){
    digitalWrite(rled,HIGH);
  }else{
    digitalWrite(rled,LOW);
  }
}

Prova a cambiare pin al bottone (il 13 è quello del LED incorporato in Arduino) e verifica che il bottone faccia un buon contatto (specie dulle breadboard spesso fanno pessimo contatto) e ... fai il favore, anche disegnato a penna su un pezzo di carta, ma metti uno schema estto di tutti i collegamenti. :slight_smile:

Guglielmo

Problema risolto sostituendo l'interruttore con un bottone, faró altre prove per cercare di capire il perché di questo comportamento, grazie mille per l'aiuto!