Ho un problema con il buzzer collegato al piedino 6 che suona regolarmente tramite la funzione tone(6,2000,2000);
Il problema è che il buzzer emana sempre un debole ronzio/suono debole e continuo, anche quando questa stringa non è attivata. Ho provato ad utilizzare sia la funzione NoTONE(6) che l'escamotage tone(6,0), ma nulla da fare... è come se dal piedino 6 continuasse ad avere tensione.
Sapete se occore unserire qualche resistenza o condensatore di filtro?
Ecco il codice, si tratta di un antifurto che verifica 5 ingressi e quando ad almeno uno di questi viene tolta la tensione a 5 V, scatta l'avviso sul display relativo al sensore interessato e viene appunto emesso il tono che però si sente anche quando l'allarme non è attivato:
/*
Centralina antifurto 5 ingressi
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensore_1 = 7;
int sensore_2 = 8;
int sensore_3 = 9;
int sensore_4 = A0;
int sensore_5 = A1;
int ill_disp = 10;
int uscita = 13;
void setup() {
pinMode(sensore_1, INPUT);
pinMode(sensore_2, INPUT);
pinMode(sensore_3, INPUT);
pinMode(sensore_4, INPUT);
pinMode(sensore_5, INPUT);
pinMode(ill_disp, OUTPUT);
pinMode(uscita, OUTPUT);
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
}
void loop() {
int sensore_1 = digitalRead(9);
int sensore_2 = digitalRead(8);
int sensore_3 = digitalRead(7);
int sensore_4 = digitalRead(A0);
int sensore_5 = digitalRead(A1);
if (sensore_1 == HIGH && sensore_2 == HIGH && sensore_3 == HIGH && sensore_4 == HIGH && sensore_5 == HIGH) {
digitalWrite(uscita, LOW);
digitalWrite(ill_disp, LOW);
noTone(6);
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("Tutto bene");
lcd.setCursor(0, 1);
lcd.print("Sensori ok!");
lcd.setCursor(0, 3);
lcd.print("Zone:");
lcd.setCursor(6, 3);
lcd.print(sensore_1);
lcd.setCursor(9, 3);
lcd.print(sensore_2);
lcd.setCursor(12, 3);
lcd.print(sensore_3);
lcd.setCursor(15, 3);
lcd.print(sensore_4);
lcd.setCursor(18, 3);
lcd.print(sensore_5);
delay(1000);
}
else
{
digitalWrite(uscita, HIGH);
digitalWrite(ill_disp, HIGH);
tone(6,2000,2000);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Allarme sensore!");
lcd.setCursor(3, 2);
lcd.print(sensore_1);
lcd.setCursor(6, 2);
lcd.print(sensore_2);
lcd.setCursor(9, 2);
lcd.print(sensore_3);
lcd.setCursor(12, 2);
lcd.print(sensore_4);
lcd.setCursor(15, 2);
lcd.print(sensore_5);
//mostra le zone attivate
lcd.setCursor(0, 3);
if(sensore_1==0) {
lcd.print( "Garage " );
}
else
lcd.print("");
if(sensore_2==0) {
lcd.print( "Cantina " );
}
else
lcd.print("");
if(sensore_3==0) {
lcd.print( "Terrazzo " );
}
else
lcd.print("");
if(sensore_4==0) {
lcd.print( "Mansarda " );
}
else
lcd.print("");
if(sensore_5==0) {
lcd.print( "Casa!! " );
}
else
lcd.print("");
delay(3000);
}
}
Ho aggiunto la resistenza come suggerito da @icio ed un condensatore da 10nF dal buzzer al negativo. Inoltre pulito perfettamente tutte le piste della millefori con un solvente ed il problema si è risolto
Probabilmente il problema era dovuto ad un bassa perdita di corrente tra C-E del transistor che caricava il condensatore ad alta impedenza dentro il buzzer, mettendo una bassa impedenza in parallelo al buzzer ora la perdita è diventata insufficiente per causare noie, è la stessa menata delle lampadine CFL dove la bassa corrente indotta da cavi paralleli adiacenti carica il condensatore del ballast facendogli fare dei lampetti random anche quando è spenta
esattamente! lo stesso fenomeno mi era successo con delle lampade led i cui cavi di alimentazione passavano vicino ad un cavo dove scorreva molta corrente... con il risultato di farmeli addirittura accendere!