Ho una scheda arduino uno e con i componenti dello starter kit stavo provando a far scrivere sul monitor seriale quanto rilevato dal mio buzzer connesso su una porta analogica quando davo dei piccoli colpi sullo stesso.
Allego sia lo sketch che il circuito.
Purtroppo il valore sul monitor seriale è un fantastico 0 che non varia.
Qualcuno sa dirmi cosa sbaglio?
Sketch:
int rea;
void setup() {
// initialize serial communications (for debugging only):
Serial.begin(9600);
}
void loop() {
rea = analogRead(A0);
Serial.println(rea);
delay(200);
}
Spero l'immagine si apra, comunque lo schema l'ho fatto su esempio del libro dello starter kit riguardo al
progetto basic "Knock Lock"
Credo che la resistenza sia un po' troppo bassa, quindi lo mantiene a ZERO a meno che non senta un a esplosione.
Il valore di quella resistenza va tarata in funzione della sensibilità. Prova a metterla più alta.
Però sembrerebbe anche tutto ok. sicuro che i collegamenti sono tutti a posto?
Grazie mille! Ora funziona, non ci avevo pensato avendo riprodotto il circuito del libro...probabilmente il buzzer si sarà un po rovinato ed è meno sensibile, non so.
Risolto comunque
Il grosso errore è quel delay: la tensione viene letta una volta e poi viene ignorata per 200ms! La lettura, invece, deve avvenire a ogni ciclo. Ogni 200ms, poi, vai a vedere se il valore si è spostato da zero:
int adesso;
int rea;
unsigned long t;
void setup()
{
// initialize serial communications (for debugging only):
Serial.begin(9600);
}
void loop()
{
adesso=analogRead(A0); if (adesso>rea) rea=adesso;
if(millis()-t>200){t=milllis(); if(rea>0) {Serial.println(rea); rea=0;}}
}
Si ci ho pensato anche io. Poi però mi sono "fidato" che è uno degli esperimenti del kit quindi "deve funzionare".
Comunque ho anche pensato che un rumore generico non dura solo 200 millisecondi, però l'osservazione di Datman è più che corretta: un rumore secco e rapido potrebbe non essere rilevato se capita proprio all'inizio del delay.