sto sperimentando in maniera soft alcuni componenti per un futuro progetto.
in questo caso ho usato
un sensore termico ds18b20,
2 led,
2 resistenze da 330ohm,
una resistenza da 4,7kohm,
un buzzer senza elettronica
lo scopo di questo "esperimento" è rilevare la temperatura, stamparla a video (sul monitor seriale) e, nel caso di superamento di una determinata soglia, far lampeggiare ad intermittenza i due led e far emettere un suono acustico con l'apposito buzzer.
questo è lo sketch
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 14
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);
const int led1 = 7;
const int led2 = 8;
void setup() {
Serial.begin(9600);
Serial.println("Rilevamento temperatura:");
sensors.begin();
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
temp();
led_buzz();
}
void temp(){
Serial.println();
sensors.requestTemperatures();
Serial.print("Temperatura = ");
Serial.print(sensors.getTempCByIndex(0));
Serial.println(" gradi C");
}
// accensione led ad alternanza ed emissione di un suono
// in caso di superamento della soglia stabilita a 23,00 gradi
void led_buzz(){
float misura = sensors.getTempCByIndex(0);
if (misura > 23.00){
tone(4,300);
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
delay(350);
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
delay(350);
}
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
noTone(4);
}
ma in tal caso non mi funziona il buzzer forse emette un mezzo suono all'accensione di ogni led; avevo provato a metterlo in "setup" ma giustamente come da verifica mi suona sempre...
cosa sbaglio?!?
ps
ho notato su alcuni schemi che, al sensore viene utilizzato anche un condensatore, domanda, serve per eventuali disturbi?
pps
ho visto ora che anche al buzzer viene applicata una resistenza da 100ohm, anche qui come mai, è per una questione di ingresso del buzzer?
Per "buzzer senza elettronica" intendi forse un cicalino senza oscillatore integrato, immagino. Quello va pilotato con un segnale PWM ad una data frequenza, frequenza che poi viene riprodotta dal cicalino.
La R serve a limitare la corrente se lo agganci direttamente ad un pin di Arduino.
Per prova, attaccalo ad un pin PWM di Arduino e poi dai un analogWrite a 128, dovresti sentire il suono: coi pin 5 e 6 il suono sarà più alto che sugli altri pin PWM perché essi sono attaccati al timer 0 che lavora a 976 Hz mentre gli altri timer sono impostati a circa 480 Hz.
leo72:
Per prova, attaccalo ad un pin PWM di Arduino e poi dai un analogWrite a 128, dovresti sentire il suono: coi pin 5 e 6 il suono sarà più alto che sugli altri pin PWM perché essi sono attaccati al timer 0 che lavora a 976 Hz mentre gli altri timer sono impostati a circa 480 Hz.
wow ora si funziona...
avevo letto male l'uso della funzione, reo di esser capra in inglese, e non aver interpretato bene la reference
se utilizzo tone(pin, frequency) bisogna utilizzare un PWN e in tal caso il cigalio è fisso per via del duty cycle a 50% e le frequenza massima impostabile va 976Hz e 480Hz dipenda dai pin PWN utilizzati;
se utilizzo tone(pin, frequency, duration) posso utilizzare gli altri pin e in questo caso l'alternarza del cigalio lo imposto io settando "duration"
Con Tone ci imposti il pin a cui inviare la frequenza, la frequenza stessa (e quindi non sei piu legato a quelle fisse dei PWM, ma in teoria potresti anche suonarci un motivetto o una serie di note, basta impostare la frequenza delle varie note) e la durata del beep, e credo puoi usare qualsiasi pin digitale ...
Confermo.
Io per abitudine metto quasi sempre un buzzer (costa pochissimo e tante volte mi risulta utilissimo anche come rudimentale debug quando sono lontano dal cavo USB) e lo metto nel 13 così mi fa anche l'effetto luminoso.