Dispozitiv de monitorizare pentru bebelusi:
Folosind un senzor de zgomot, dispozitivul sesizeaza plansetele copilului si porneste un avertisment sonor pentru parinti. Totodata, are incorporat un senzor de lumina care aprinde o matrice de leduri la lasarea intunericului. Pe un ecran lcd va rula o animatie ce are ca scop captarea atentiei bebelusului.
Schema bloc :
Componente :
Realizata folosind Autodesk Fusion
Pentru o intelegere mai buna a modului in care sunt conectate componentele, atasez un close-up al placutei:
Mediul de dezvoltare folosit a fost Visual Studio Code, folosind extensia PlatformIO. Impreuna cu etapele implementarii sunt incluse fragmente de cod pentru o intelegere mai usoara a rationamentului.
Am inceput prin a construi animatia redata pe lcd : dupa ce am ales imaginile, le-am convertit in siruri de octeti folosind image2cpp. Acestea sunt stocate si redate din memoria flash a microcontroller-ului, folosind functii specifice bibliotecii TFT_HX8357. Urmatorul fragment de cod este inclus in metoda loop():
if (millis() - lastImageChangeTime >= 4000) { // Schimba imaginea la următoarea în slideshow switch (currentImage) { case 1: tft.drawBitmap(0, 0, image1, IMAGE_WIDTH, IMAGE_HEIGHT, TFT_CYAN); currentImage = 2; delay(2000); tft.fillScreen(TFT_DARKCYAN); break; case 2: tft.drawBitmap(0, 0, image2, IMAGE_WIDTH, IMAGE_HEIGHT, TFT_CYAN); currentImage = 1; // Resetăm contorul pentru a începe slideshow-ul de la început delay(2000); tft.fillScreen(TFT_DARKCYAN); break; } lastImageChangeTime = millis(); // Actualizăm momentul ultimei schimbări de imagine }
Mai apoi, am configurat lampa de veghe. Am ales sa fac aceasta caracteristica putin mai interactiva, asa ca, atunci cand fotorezistorul nu mai sesizeaza lumina, pe matricea de LED-uri se reda o animatie cu o inima care bate. Pentru asta folosesc functiile :
// un exemplu de frame const byte heart3[8] = { B00000000, B01100110, B11111111, B11111111, B01111110, B00111100, B00011000, B00000000 }; void displayHeartFrame(const byte* frame) { for (int row = 0; row < 8; row++) { lc.setRow(0, row, frame[row]); } } void animateHearts() { for (int i = 0; i < 5; i++) { displayHeartFrame(heartFrames[i]); delay(100); // Ajustăm viteza animației } }
In metoda loop() pornim LED-urile in functie de valorile semnalate de fotorezistor :
// Dacă nivelul de lumină este sub pragul stabilit, activăm matricea de LED-uri if (lightLevel < LIGHT_THRESHOLD) { animateHearts(); } else { lc.clearDisplay(0); // Stingem toate LED-urile }
Ultima si cea mai greu de testat etapa o reprezinta alarma pentru parinti. Cea mai solicitanta parte a fost configurarea buzzer-ului astfel incat sa produca un sunet controlat atunci cand microfonul sesizeaza zgomote ce trec de pragul stabilit. Astfel, in metoda loop() configuram buzzer-ul sa cante o melodie simpla ce formeaza un semnal scurt de avertizare pentru parinti ca bebelusul a inceput sa planga:
// Dacă nivelul de zgomot este peste pragul stabilit, activăm buzzer-ul if (soundLevel > NOISE_THRESHOLD) { buzzerEndTime = millis() + 1 * 1000; // Activăm buzzer-ul // Redăm o melodie simplă for (int thisNote = 0; thisNote < 8; thisNote++) { int noteDuration = 1000 / noteDurations[thisNote]; tone(BUZZER_PIN, melody[thisNote], noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(BUZZER_PIN); // Oprește tonul curent } }
Pentru un aspect mai organizat si potrivit pentru copii, am ales sa introduc piesele intr-o cutie. Inainte de a o inchide complet, am fotografiat asezarea componentelor in interior; Atasez si o fotografie cu proiectul atunci cand fotorezistorul nu sesizeaza lumina ambientala si aprinde matricea de LED-uri.
Pentru a surprinde intreaga functionalitate am incarcat un video in care este surprinsa reactia dispozitivului la zgomot si la lumina https://youtu.be/NcxkkqK_NjU
Cred ca am invatat multe pe parcursul realizarii acestui proiect si ca este mai satisfacator sa lucrezi la un cod si sa poti vedea o materializare a functionalitatilor sau disfunctionalitatilor sale.
Aici puteti regasi arhiva ce contine codul pe care l-am creat:
Pentru realizarea acestui proiect am folosit urmatoarele biblioteci :
In structurarea si implementarea acestuia, am urmarit indicatiile din urmatoarele laboratoare :
Acestea m-au ajutat sa folosesc LCD-ul cu protocolul SPI, sa calibrez senzorii si matricea de LED-uri si sa ma folosesc de buzzer-ul activ.