la faccio semplice e spero di spiegarmi bene, ho realizzato un progetto con esp8266-01 installato su una scheda a singolo rele, prevede che tramite due pulsanti (in realtà sono una tastiera e un contatto magnetico) gestisca una serratura elettrica.
Sul banco funziona tutto ma basta che tocchi con le dita la chiusura dei contatti e il programma sente la chiusura, una volta installato il programma funziona ma basta che accendo una luce per casa e il rele scatta.
ho inserito le resistenze di pull up su tutti e due i pulsanti ma non avendo le 10k ho messo valori leggermente superiori (15 k) potrebbe essere essere quello o devo schermare i fili che vanno ai pulsanti (ora ho messo il filo rosso-nero quello audio per capire), o posso risolvere via sw ?
questo il programma
#define Pin_Rele 0 // GPIO0 viene usato per pilotare il rele
#define Pin_Tastiera 1 // assegno tx a GPIO1 e lo uso per impulso in entrata (contatto magnetico)
#define Pin_Magnetico 3 // assegno rx a GPIO3 e lo uso per ad impulso in entrata (codice)
#define CHIUSO 1
#define APERTO 0
#define CHIUDI 0
#define APRI 1
int Stato_Tastiera = 0;
int Stato_Magnetico = 0;
int Aux_Stato_Magnetico=0;
void setup(){
pinMode (Pin_Rele, OUTPUT);
pinMode (Pin_Tastiera, INPUT);
pinMode (Pin_Magnetico, INPUT);
digitalWrite(Pin_Rele, LOW);
digitalWrite(Pin_Tastiera, LOW);
digitalWrite(Pin_Magnetico, LOW);
}
/* inizio ciclo programma */
void loop(){
Stato_Tastiera = digitalRead(Pin_Tastiera);
Stato_Magnetico = digitalRead(Pin_Magnetico);
if (Stato_Tastiera == 1)
{
digitalWrite(Pin_Rele, APRI);
delay(10000);
digitalWrite(Pin_Rele, CHIUDI);
}
if (Stato_Magnetico != Aux_Stato_Magnetico && Stato_Magnetico == CHIUSO )
{
digitalWrite(Pin_Rele, APRI);
delay(5000);
digitalWrite(Pin_Rele, CHIUDI);
}
Aux_Stato_Magnetico = Stato_Magnetico;
}
Sono uno a 1 Mt e l'altro a 2 mt ma passano insieme alla corrente di casa, ma e normale allora che basta il contatto con il dito per chiudere il contatto?
ATTILA666999:
Sono uno a 1 Mt e l'altro a 2 mt ma passano insieme alla corrente di casa, ma e normale allora che basta il contatto con il dito per chiudere il contatto?
Beh certo che è un problema, quei cavi sono due antenne vicine ai cavi dell'impianto elettrico civile.
Secondo me hai anche un secondo problema, ovvero tu non fai un filtro anti-rimbalzo per il/i pulsante/i.
ATTILA666999:
ma il fatto del dito è normale allora ?
Dipende. O le resistenze sono scollegate, o sono di valore molto maggiore (tipo 100k), o la tua pelle è metallica, o con il dito "inietti" quel po' di disturbo in più che supera la soglia di riconoscimento degli ingressi.
Considerando che: 1) portare in giro l'alimentazione positiva della logica è un brutto affare, 2) che per segnalazione a metri di distanza in ambiente elettricamente rumoroso si usano dai 12V in su e magari optoisolati, 3) che in ogni caso non si devono collegare direttamente ai pin filature di metri ma vanno sempre disaccoppiati dalle linee almeno tramite una resistenza in serie...
Per prima cosa puoi ridurre molto il valore delle resistenze di pull, non più di 1k. Poi va messo un filtro passa basso sugli ingressi (resistenza e condensatore), che svolge sia la funzione di debounce, che quella di disaccoppiamento.
E per finire parli di resistenze pull-up, ma il codice mi sembra scritto per resistenze pull-down...
ATTILA666999:
Antirimbalzo, lo cerco in rete che non so applicarlo,.. ma il fatto del dito è normale allora ?
Se fosse un plc a 24 volt o a 12 volt, non sarebbe normale.
Ma è una scheda a 3,3 volt che riconosce lo stato 1 a circa 1 volt... Che ci vuole?
Assolutamente d'accordo per delle pull-up (o down) più basse (4k7 o 3,3k o 1k). Fai delle prove e vedi.
Poi se al posto del filo rosso-nero per casse acustiche avessi uno schermato o un CAT5 sarebbe meglio.