sensore suono e relè statico

Buongiorno a tutti,
sto facendo un progetto "basico" per accendere con un battito di mani una lampada...

i problemi sorti sono 2 :

  1. software
  2. hardware..

partiamo con software...
..mi potete dire come posso scrivere un semplice comando di toggle che mi tenga eccitato il relè ( e quindi lampada) dopo il battito di mani e dopo mi spenga la lampada ad un altro battito di mani ..
non riesco a capire come scrivere programmino.. grazie

  1. il relè statico ( input 3- 32 VDC -output 220 v) non si eccita quando alzo l'uscita di arduino ....non dovrebbero esserci circa 5V ai pinout di arduino ?? il relè funziona perchè se lo eccito con batteria da 9 V si eccita e accende la lampada..

vi ringrazio anticipatamente per vs. HELP!"!

bye
massi

dovresti allegare i seguenti file:

  • schema elettrico
  • elenco componenti
  • listato programma
  • opzionale: foto

ma dunque io schemi non ne ho fatti..
ho
un relè statico (SSR 25A -- 3 -32 volt in ingresso .. 220v in uscita
un sensore suono classico da ebay a 5 euro...( con gnd -- alimentazione- Analog input)
arduino uno

al relè collego lampada da 220v...

quando batto le mani il sensore suono eccita il relè e la lampada si accende e deve restare accesa... quando batto nuovamente le mani la lampada si deve spegnere..

allego programma.. che non funziona... grazie

int rele = 11;
int ledpin = 7;
int treshold = 35 ; 
int volume;
boolean currentState = treshold;//stroage for current button state
boolean lastState = treshold;//storage for last button state
boolean ledState = LOW;//storage for the current state of the LED (off/on)
boolean releState = treshold; 

void setup() {                
  Serial.begin(9600); // For debugging
   pinMode(rele, OUTPUT);
  pinMode(ledpin, OUTPUT);
 
}
 
void loop() {
  
  volume = analogRead(A0); 
     
   currentState = analogRead(volume);
  if (currentState >= treshold && lastState <= treshold){
    Serial.println("suono");
    delay(1);
    
    //toggle the state of the LED
    if (ledState == HIGH){
      digitalWrite(rele, LOW);
      digitalWrite(ledpin, HIGH);
      ledState = LOW;
    } else {
      digitalWrite(rele, HIGH);
      digitalWrite(ledpin, LOW);
      ledState = HIGH;
    }
  }
  
  lastState = currentState;
}

quei mic non hanno bisogno di analogread, se metti il link abbiamo conferma ma la maggior parte hanno anche un uscita on-off e quindi puoi leggerli su pin digitali.
In genere hanno anche un led che si accende con un trimmer.
Inizia a verificare questa cosa e regolare il trimmer in modo che con il battito si accende, collegalo su un pin normale ed usa un digitalread.
dopodiche' riposta lo sketch che lo guardo, ora non riesco

ti ringrazio..

ma il sistema funziona ...a parte il relè.. che però ho al momento sostituito con uno meccanico e funziona...il mio problema è fare in modo che quando si eccita il rele poi rimanga su ..cioè un semplice Toggle ma non riesco a fare il programma ...

ok leggo il listato........

ok meglio che non lo leggevo :smiley:

prendi un libro di C, e' inutile tentare di continuare cosi

ok grazie ...mi metterò a studiare ---

visto che mi sembra che sia piuttosto banale tu come faresti il toggle ...

il mio primo programma funzionate spegne la lampada dopo 3600 ms
ma non riesco a farla restare accesa fino al successivo battito di mani !!

int treshold = 35 ; 
int volume;
int rele = 11;

int volume;

 
void setup() {                
  Serial.begin(9600); 
   pinMode(rele, OUTPUT);
  
}
 
void loop() {
  
  volume = analogRead(A0); 
     
   
   if(volume <= threshold){
    digitalWrite(rele, LOW);
    
    delay(3600);
    
  }  
 else{
   
  digitalWrite(rele, HIGH); 
 

}

come gia' detto eliminerei del tutto l'utilizzo dell'analogico e quindi di relative soglie ecc
dopodiche' inserirai una variabile di stato che andrai ad invertire ad ogni rilevazione del segnale digitale provocato dal battito
Infine manderai in output il valore di questa variabile

ok
ci provo.. comunque il mio programmino .... non sarà un granchè come costruzione ma l'ho testato e funziona..
però voglio fare come dici tu e provare con digitale"

grazie del supporto e pazienza ...
bye
massi

ciao puoi dare un'occhiata .. adesso così funziona bene..

int rele = 11;
int pin = 2;
int ledpin = 13;
boolean currentState = LOW;
boolean lastState = LOW;
boolean ledState = LOW;
boolean releState = LOW; 

void setup() {                
  Serial.begin(9600); 

  pinMode(rele, OUTPUT);
  pinMode(ledpin, OUTPUT);
  pinMode(pin, INPUT);
 
}
 
void loop() {
  
   currentState = digitalRead(pin);
  if (currentState == HIGH && lastState ==LOW){
    Serial.println("Clap");
    delay(10);
    
    //toggle 
    if (ledState == HIGH){
      digitalWrite(rele, LOW);
      digitalWrite(ledpin, HIGH);
      ledState = LOW;
    } else {
      digitalWrite(rele, HIGH);
      digitalWrite(ledpin, LOW);
      ledState = HIGH;
    }
  }
  
  lastState = currentState;
}

Bene!
Se funziona un altro problema risolto.

visto, ora e' piu' chiaro semplice e ordinato,
bravo :wink:

ti ringrazio...

adesso passiamo al punto 2.

  1. il relè statico ( input 3- 32 VDC -output 220 v) non si eccita quando alzo l'uscita di arduino ....non dovrebbero esserci circa 5V ai pinout di arduino ?? il relè funziona perchè se lo eccito con batteria da 9 V si eccita e accende la lampada...

vi lascio link
http://www.ebay.com/itm/SSR-25DA-Solid-state-relays-FOTEK-20A-minitype-DC-AC-one-phase-Relay-/261018742414

resto in attesa di un vs. sugerimento...

saluti
massi

Deve funzionare e basta :slight_smile:

Allega qualche foto, devono essere problemi di collegamento

ma infatti ....

ok faccio una foto ...

ma io collego il polo - (1) a GND di arduino poi il polo + (2) al pin 11 e poi ai 2 poli 3 e 4 i cavo del 220 V... ma addirittura il led rosso del relè si accende quando batto le mani ... ma non si eccita ???

no scusa ho scritto sbagliato ...

ma io collego il polo - (4) a GND di arduino poi il polo + (3) al pin 11 e poi ai poli 1 e 2 il cavo del 220 V...

ma addirittura il led rosso del relè si accende quando batto le mani ... ma non si eccita ???

salve a tutti...

ho fatto alcune verifiche e in poche parole il mio relè per eccitarsi deve avere almeno 5.1 V .. e il mio arduino uno non riesce a fornirli... ho cambiato relè e funziona tutto alla perfezione..

grazie come sempre a tutti voi !

al prossimo Problema!;))

massi

Uno e' lieto di servire
comunque e' guasto allora, perche' il datasheet lo riporta funzionante gia' a 3V
roba cinese di scarto

confermo... scarto ... :cry: