Printr-un senzor de mișcare se va detecta prezența unei persoane în apropierea cutiei și se va porni automat un servomotor conectat printr-un fir de capacul cutiei. Odată deschisă cutia va începe o melodie preluată din repo-ul public Github
Schema bloc:
Piese folosite:
Schemă circuit:
Schema electrică:
Descrierea codului aplicaţiei (firmware):
Idei principale ale dezvoltării cu ajutorul funcțiilor:
void setup()
sg90.attach(8);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
duration = pulseIn(echo,1);
distance = duration*0.034/2;
if (distance < 30)
Explicație a melodiei, calcului duratei plus funcțiile folosite:
int notes = sizeof(melody) / sizeof(melody[0]) / 2;
int wholenote = ( 60000 * 4 ) / tempo;
// Itereazăm până la finalul notelor melodiei
// Vectorul de note conține atât notele cât și durata fiecăreia
for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) {
// Calculăm durata fiecărei note
divider = pgm_read_word_near(melody+thisNote + 1);
if (divider > 0) {
// Notă obișnuită, merge mai departe
noteDuration = (wholenote) / divider;
// Dacă nota este cu durată negativă atunci se ia valoarea pozitivă însă se mărește durata cu jumătate
} else if (divider < 0) {
noteDuration = (wholenote) / abs(divider);
noteDuration *= 1.5;
}
// Cântăm nota doar pentru 90% din durată, lăsând 10% ca pauză
tone(buzzer, pgm_read_word_near(melody+thisNote), noteDuration * 0.9);
// Asteptăm durata specificată înainte de a reda următoarea notă
delay(noteDuration);
// Oprește generarea formei de undă înainte de următoarea notă
noTone(buzzer);
pgm_read_word_near()
tone(buzzer, pgm_read_word_near(melody+thisNote), noteDuration * 0.9);
noTone(buzzer);
Proiectul s-a dovedit a fi o provocare din care am acumulat cunoștințe noi de lucru cu Arduino.
Creare: 28.04.2022
Modificări: 16.05.2022