Τετάρτη 3 Φεβρουαρίου 2021

Arduino: το LED ανάβει με αισθητήρα ήχου

Περιγραφή

Ένας λαμπτήρας LED στην ακίδα 13 της πλακέτας ανάβει και σβήνει μέσω του μικροφώνου και ενός σύντομου ήχου με τα χέρια ή τη φωνή. Το module λειτουργεί ως διακόπτης ON/OFF είτε χρησιμοποιώντας μια τιμή κατωφλίου και την εντολή if στον κώδικα (software) είτε ρυθμίζοντας την ευαισθησία με το ποτενσιόμετρο (hardware). Αναλυτικότερα, για αυτές τις δύο τεχνικές:
1.     Με πειραματισμό μπορούμε να βρούμε μια αποτελεσματική τιμή κατωφλίου παρακολουθώντας μεταβολές στις τιμές εξόδου πχ στη σειριακή οθόνη, όπως στο σκετς της αναλογικής λειτουργίας
2.     Με την αυξομείωση της λεγόμενης ευαισθησίας, περιστρέφοντας με ένα μικρό κατσαβίδι το ποτενσιόμετρο στον μπλε αντιστάτη της πλακέτας του μικροφώνου, όπως στο σκετς της ψηφιακής λειτουργίας.

Συνδέσεις

LED on pin 13 and GND
"+" 
to a 5V power output οn the board
G to a ground on the board
AΟ σε κάποια αναλογική ακίδα του Arduino, εδώ στην A0, ή
DO σε κάποια ψηφιακή ακίδα του Arduino
, εδώ στην 2

Αναλογική λειτουργία

Όταν το επίπεδο του ήχου που διαβάζει η A0 είναι μεγαλύτερο της τιμής κατωφλίου, αν η LED είναι αναμμένη, τότε σβήνει, ενώ αν η LED σβηστή, τότε ανάβει. Η τιμή κατωφλίου στο σκετς ορίζεται ως 525, αλλά επειδή εξαρτάται κάθε φορά από τις ιδιαίτερες συνθήκες, πιθανά να χρειαστεί διαφορετική τιμή.

Κώδικας

int buttonstate = 0;
int ledstate = 0;

void setup() {
pinMode(13, OUTPUT); 
pinMode(A0, INPUT); 
Serial.begin(9600); //για τον ορισμό κατωφλίου
}

void loop(){
buttonstate = analogRead(A0);
ledstate = digitalRead(13);
Serial.println(buttonstate);
if (ledstate == HIGH && buttonstate > 525) { 
delay(250);
digitalWrite(13, LOW); 
delay(250);
}
if (ledstate == LOW && buttonstate > 525) { 
delay(250);
digitalWrite(13, HIGH); 
delay(250);
}
}

Ψηφιακή λειτουργία

Όταν η ψηφιακή ακίδα 2 διαβάζει 1 ή HIGH, αν η LED είναι αναμμένη, τότε σβήνει, ενώ αν η LED σβηστή, τότε ανάβει. Η ψηφιακή τιμή 1/HIGH ή 0/LOW προέρχεται από την σύγκριση της τιμής του μικροφώνου με την τιμή από το ποτενσιόμετρο στον LM393. Χρειάζεται να προηγηθεί πειραματισμός με αυξομείωση της λεγόμενης ευαισθησίας, περιστρέφοντας με ένα μικρό κατσαβίδι το ποτενσιόμετρο στον μπλε αντιστάτη της πλακέτας του μικροφώνου. Το LED2 του module ανάβει (πράσινο χρώμα) για την ψηφιακή τιμή 1/HIGH. Όταν περιστρέφω δεξιόστροφα, η τιμή από το ποτενσιόμετρο ελαττώνεται και από κάποια θέση και μετά θα δούμε το LED2 να ανάβει (1/HIGH). Έτσι, επιστρέφουμε σε μια θέση πριν το σημείο αυτό ώστε το LED2 να είναι σβηστό (0/LOW), και να ανάβει με τον σύντομο ήχο χεριών ή φωνής, αλλάζοντας το 0/LOW σε 1/HIGH.

Κώδικας

int buttonstate;
int ledstate;
void setup() {
pinMode(13, OUTPUT); 
pinMode(2, INPUT); 
}
void loop(){
buttonstate = digitalRead(2);
ledstate = digitalRead(13);
if (ledstate == HIGH && buttonstate == 1) { 
delay(250);
digitalWrite(13, LOW); 
delay(250);
}
if (ledstate == LOW && buttonstate == 1) { 
delay(250);
digitalWrite(13, HIGH); 
delay(250);
}
}


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου