Inhoudsopgave:

Wake Me Up - een slimme wekker - Ajarnpa
Wake Me Up - een slimme wekker - Ajarnpa

Video: Wake Me Up - een slimme wekker - Ajarnpa

Video: Wake Me Up - een slimme wekker - Ajarnpa
Video: Review: slimme wekker met ingebouwde Google Assistent van Lenovo 2024, November
Anonim
Wake Me Up - een slimme wekker
Wake Me Up - een slimme wekker

Wake me up is een slimme wekker die ook als slimme lamp kan worden gebruikt.

De ingebouwde ledstrip simuleert natuurlijk licht dat je kamer binnenkomt. Dit zorgt voor een rustige, natuurlijke manier om uw dag te beginnen.

Verder is de wekker voorzien van een 4*7 segment display voor het aflezen van de tijd, speakers om wakker te worden met je favoriete muziek, een touchbutton, een ldr voor het aanpassen van de helderheid van de ledstrip en een temperatuursensor waarmee je de temperatuur van uw kamer.

Benodigdheden

Een lijst met de exacte prijzen die ik heb betaald, vind je hier:

Microcontrollers en computers:

Raspberry Pi 4I gebruikte de raspberry pi 4 4GB, maar elk raspberry pi-model 3+ zou in orde moeten zijn

Arduino Uno

De arduino wordt gebruikt om het 4*7 segment klokdisplay te bedienen.

Sensoren:

  • TMP36: temperatuursensor
  • LDR: Lichtafhankelijke weerstand

Aandrijvingen:

  • WS2801: Individueel adresseerbare ledstrip
  • LCD-scherm: een 16 * 2 LCD-scherm.
  • 4*7 segment klokweergave

IC's:

  • 74HC595: Schakelregister voor het lcd-scherm
  • MCP3008: 8-bit analoog naar digitaal converter
  • Logic level converter: wordt gebruikt om te communiceren tussen raspi en arduino

Andere dingen:

  • Een adafruit MAX9744-versterker om de luidsprekers van stroom te voorzien
  • Elke luidspreker, ik gebruikte een Visaton 4Ohm 8Watt full range luidspreker (Art. Nr. 2240)
  • Een 9 volt voeding om de versterker van stroom te voorzien
  • Een 5volt voeding om de ledstrip en andere componenten te voeden. Houd er rekening mee dat elke led in de ledstrip 60mA kan verbruiken dus zorg ervoor dat je voeding voldoende is.
  • Een paar 220Ohm weerstanden
  • Een klein breadboard om in je koffer te plaatsen.

Gereedschap:

  • Een soldeerbout.
  • Iets om de behuizing te maken (ik gebruikte een 3D-printer met PLA en PETG en wat vinylstickers om het houten effect te krijgen.)

Stap 1: De Raspberry Pi instellen

De Raspberry Pi is onze belangrijkste microcontroller.

De raspberry pi draait onze lokale webserver, database, bestuurt de ledstrip, luidsprekers, …

Deel 1: Raspbian installeren

Gebruik deze tutorial om raspbian te installeren:

Zorg ervoor dat SSH is ingeschakeld

Deel 2: Verbinding maken

Om verbinding te maken met internet, moet u toegang krijgen tot de terminal van uw raspberry pi. Ik raad aan om stopverf te gebruiken. In het terminaltype:

wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

"YourNetwork" is de naam van uw wifi-netwerk en "YourSSID" is het wachtwoord van het netwerk.

Nadat u het netwerk hebt toegevoegd, probeert u de Raspberry Pi opnieuw op te starten.

Typ het commando 'ping 8.8.8.8' dit zal een pakket naar de google servers sturen als je antwoord krijgt, je netwerk is ingesteld en werkt!

Deel 3: Installeer de benodigde programma's

We moeten wat extra programma's installeren om dit project op gang te krijgen.

Voordat we aan de slag gaan, voert u deze 2 opdrachten uit om ervoor te zorgen dat alles is geüpgraded.

sudo apt update

sudo apt-upgrade

Dit kan even duren.

Apache

sudo apt installeer apache2 -y

sudo apt installeer php libapache2-mod-php -y

MariaDB

sudo apt install mariadb-server mariadb-client -y

sudo apt install php-mysql -y

PHPMijnAdmin

sudo apt install phpmyadmin -y

Python-pip

We moeten pip installeren om sommige python-bibliotheken in te schakelen

pip3 installeer mysql-connector-python

pip3 install flask-socketio

pip3 installeer flask-cors

pip3 installeren gevent

pip3 installeren gevent-websocket

Stap 2: De elektronica aansluiten

De elektronica aansluiten
De elektronica aansluiten
De elektronica aansluiten
De elektronica aansluiten

Ik heb 2 schema's toegevoegd, 1 is een breadboard-schema voor testdoeleinden. Ik raad aan om het eerste schema te bouwen en te proberen de code te laten werken.

Ik heb de fritzing-bestanden hieronder toegevoegd.

Stap 3: Database-ontwerp

Database-ontwerp
Database-ontwerp

Dit is het databaseschema dat ik heb gemaakt. De woorden zijn in het Nederlands, maar ik zal elke tabel in detail uitleggen.

Tabel 1: tblMuziek

Dit is een vrij basic tafel. Het slaat de artiestennaam, de naam van het nummer en de bestandsnaam van een nummer op.

Tabel 2: tblLedstrip

Deze tabel houdt de huidige status van de ledstrip bij en slaat de status van de ledstrip op. Deze hebben we nodig voor de smartlight functie.

Tabel 3: tblSensoren

Deze tabel houdt de sensoren in ons alarm bij. We slaan de naam van de sensor en het kanaal van de MCP3008 op

Tabel 4: tblMeting

Deze tabel slaat de waarden van onze sensoren samen met hun tijd op.

Tabel 5: tblWekker

In deze tabel staan het wachtwoord en de naam van je wekker (bijv. Slaapkamer) Deze tabel is niet verplicht maar ik heb hem toegevoegd omdat ik ervan uit ga dat je meer dan 1 wekker in huis hebt.

Tabel 6: tblAlarm

Dit is waarschijnlijk de belangrijkste tabel. Het houdt bij welke wekkers je hebt ingesteld en wat de klok moet doen (welk liedje je moet spelen, welke led-reeks, op welke dagen moet het afgaan, …). Het is erg belangrijk om 2 data bij te houden. 1 datum wordt gebruikt om op te slaan op welk uur het alarm moet afgaan. De andere houdt bij wanneer het alarm voor het laatst is afgegaan. Om te weten op welke weekdag het moet gaan heb ik een varchar gebruikt die een getal van 7 cijfers bevat. Het eerste cijfer is maandag, het tweede dinsdag, … Als het een 1 is, moet het afgaan, als het een 0 is, zou het niet moeten. Voorbeeld: 1111100 dit betekent dat dit alarm af moet gaan op maandag, dinsdag, woensdag, donderdag en vrijdag.

Stap 4: Arduino-installatie

Deze stap is heel eenvoudig. Er zal een link naar mijn github zijn bij de volgende stap waar je het arduino-bestand kunt downloaden.

Wat doet het programma?

Het programma wacht op seriële gegevens die van de pi binnenkomen.

Zodra de gegevens zijn ontvangen, ontleedt het de string en stuurt het een bevestiging terug naar de pi.

De string ziet er ongeveer zo uit: '1201' dit betekent dat het 12:01 is. Ik gebruikte een gemeenschappelijke anode 7segment-display, dit betekent dat de cijfers hoog moeten zijn en de A, B, C, D, E, F, G en DP laag moeten zijn om ze in te schakelen. Als u een gewone kathode gebruikt, moet u HOOG in LAAG en LAAG in HOOG veranderen.

Hier is een link met meer info over hoe 7 segment displays werken. (met gebruik van bibliotheek):

www.instructables.com/id/Using-a-4-digit-7…

Hier is een link over 7 segment displays zonder het gebruik van een bibliotheek:

create.arduino.cc/projecthub/SAnwandter1/p…

Stap 5: Raspberry Pi-backend

Raspberry Pi-backend
Raspberry Pi-backend

Je kunt mijn code downloaden met Github. (https://github.com/VanHevelNico/WakeMeUp)

Hoe het programma te installeren:

De backend is geschreven in python met behulp van kolf. U kunt een service maken die dit programma (app.py) automatisch start.

Je moet de frontend-code in het html-bestand van de apache-server plaatsen die we eerder hebben gedownload. (/var/html)

Hoe werkt het programma?

Wanneer de wekker is ingeschakeld, gaat u naar het ip-adres van uw klok (het wordt weergegeven op het lcd-scherm)

Zodra je in je browser naar dat ip-adres gaat, stuurt je computer een socket.io-verzoek naar de backend waarin staat dat een client verbinding heeft gemaakt. Wanneer de backend dit ontvangt, zullen er een paar threads starten die ik hieronder zal uitleggen.

Opstelling

Dit initialiseert alle benodigde objecten.

GetTemp

Deze leest het mcp3008 kanaal 0 en converteert de binaire gegevens naar de werkelijke temperatuur en zet deze in de database met de huidige datum en uur.

GetTempGrafiek

Dit krijgt de afgelopen 20 waarden van de temperatuursensor en zendt deze naar de frontend.

tijd_sturen

Deze methode haalt de huidige tijd op en controleert of de minuut is gewijzigd. Als het is gewijzigd, stuurt het programma de nieuwe tijd naar de Arduino via seriële communicatie

checkAlarmen

Dit is de belangrijkste methode. Het ontvangt alle alarmen die zijn ingeschakeld en controleert of een van deze alarmen tussen nu en 5 minuten geleden moet afgaan (dit is een buffer om ervoor te zorgen dat elk alarm afgaat wanneer dat nodig is). Als het alarm moet afgaan starten we de muziek, de ledstrip, … We lezen de krachtgevoelige weerstand continu uit en als de waarde onder de 1000 zakt (lees de fsr wordt ingedrukt) We zetten het alarm uit en updaten het alarm in de databank. De datum waarop het alarm voor de laatste keer afging hebben we ingesteld op de huidige datum.

statusLicht

Deze methode zendt de waarde van de ledstrip uit en zet de ledstrip aan indien nodig.

lichtAanpassen

Dit is een extra methode om ervoor te zorgen dat de ledstrip en het alarmlampje niet met elkaar in conflict komen.

Stap 6: zaak

Geval
Geval
Geval
Geval
Geval
Geval

De link naar mijn bestanden is hier te vinden:

Ik heb een 3D-printer gebruikt om de behuizing te printen. Het is gedrukt in 4 verschillende delen:

  1. De frontplaat met gaten voor de luidspreker en enkele wanden voor het 7 segment display
  2. De buitenste ring voor de ledstrip in transparant PETG.
  3. Het middelste deel
  4. De achterplaat met een gat voor het lcd-scherm en een gat voor de kabels.

In het originele model was er geen gat voor het 7 segment display maar dit is nodig omdat anders het licht van het 7 segment display niet doorschijnt.

Zoals je kunt zien heb ik na het plaatsen van alle onderdelen vinyl stickers met een houten look gebruikt om het eindresultaat er beter uit te laten zien. De klokweergave schijnt door de sticker heen wat een heel mooi effect geeft.

Aanbevolen: