[risolto] Problema con funzione TONE

Buonasera a tutti,

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?

Grazie a tutti

Dacci tutto lo sketch.

Ciao Uwe

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);

}
}

potrebbe essere il transistor che pilota il buzzer difettoso oppure ...prova a mettere una resistenza da 1k il parallelo al buzzer

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 :slight_smile:

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!

Grazie! :slight_smile: