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