
Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-23 15:10




Jag behövde en klocka för att hjälpa mina 4 -åriga tvillingar att lära sig sova lite längre (jag har fått nog av att behöva vakna 5:30 på morgonen på lördagar), men de kan inte läsa tid än. Efter att ha bläddrat igenom några artiklar på en mycket populär shoppingsajt tänkte jag, "Hur svårt skulle det vara att bara göra en ?!"
Så här är vad jag tänkte att jag ville ha i det här projektet. Det skulle använda några RGB -lysdioder (mest för att jag har ungefär femtio av dem från ett annat projekt) för att visa tre olika färger. Rött skulle innebära att somna om, det är för tidigt att vakna. Gult skulle innebära att de kan gå upp och spela tyst i sitt rum. Grönt betyder naturligtvis att du kan gå upp. Jag ville också kunna justera tiden, eftersom jag skulle vilja sova längre några dagar (helger/helgdagar vs vardagar och så).
Tillbehör
Raspberry Pi Zero W
Två RGB -lysdioder
Sex 220 Ohm motstånd
Filer (.stl, python, html) finns här
Olika små skruvar, trådar och små delar efter behov.
Steg 1: 3D -utskrift



Min dotter gillar verkligen enhörningar, så för det här projektet remixade jag Riven02: s Unicorn Nightlight, som är en remix av Apachcreations Unicorn Trophy, som finns på Thingiverse.com och används under en Creative Commons Icke-kommersiell licens. Jag modifierade enhörningsbasen för att passa en nätsladd för hallon pi zero. Jag råkade ha lite AMZ3D Red PLA som låg runt, så enhörningens bas och huvud blir röda. Jag använde klar/genomskinlig PLA för hornet.. Stl -filer och inställningar jag använde är:
Unicorn.stl
- Lagerhöjd: 0,02
- Väggtjocklek:.8
- Vägglinjeantal: 2
- Påfyllning: 15%
- Infillmönster: Rutnät
UnicornBase.stl
- Lagerhöjd: 0,02
- Väggtjocklek:.8
- Vägglinjeantal: 2
- Påfyllning: 15%
- Infillmönster: Rutnät
Horn.stl
- Lagerhöjd: 0,02
- Väggtjocklek: 0,8
- Vägglinjeantal: 3
- Fyllning: 0
Steg 2: Kretsen



Kretsen är ganska lätt. Jag valde sex olika GPIO -stift för att styra på/av för RGB: s olika färger. Dessa stift och motsvarande LED -färger är:
- Stift 11 till RGB 1 RÖD
- Pin 13 till RGB 1 GRÖN
- Stift 15 till RGB 1 BLÅ
- Stift 16 till RGB 2 RÖD
- Stift 18 till RGB 2 GRÖN
- Stift 36 till RGB 2 BLÅ
- Pin 39 till Ground
Varje stift är ansluten till motståndet genom ett 220 ohm strömbegränsande motstånd (med undantag för marken förstås.) Jag lödde motståndet i linje och täckte det med värmekrympslang.
Steg 3: Raspberry Pi -förberedelse
Jag ville kunna ställa in tider för sömntränarklockan med ett webbgränssnitt. Så jag behövde konfigurera en Apache- och PHP -server på Raspberry Pi. Det första du alltid bör göra när du installerar ny programvara på en Raspberry Pi är att se till att den är uppdaterad genom att skriva:
sudo apt-get uppdatering
Efter det kan vi verkligen komma igång. Vi gör det genom att installera Apache2:
sudo apt -get install apache2 -y
detta bör installera Apache -webbservern. Du kan testa detta genom att använda en webbläsare på Raspberry pi och navigera till:
localhost/
eller genom att navigera från en annan dators webbläsare till din Raspberry Pi: s IP -adress. Så här hittar du din ip -adress:
värdnamn -I
Om du gör dessa leder det till en standard Apache Web Server -sida. Detta kan ändras genom att ersätta index.html som finns i katalogen/var/www/html/. Den kan ersättas med min egen index.html -fil.
Därefter konfigurerar vi Apache -webbservern för att kunna köra PHP -filer. Börja med att skriva:
sudo apt-get install php libapache2-mod-php -y
du ska nu kunna placera sleepset.php -filen i/var/www/html med index.html -filen.
För att navigera till den här sidan i ditt eget nätverk måste du konfigurera din Raspberry Pi med en statisk ip -adress (eller så kan du bara försöka ta reda på den nya ip -adressen när ditt nätverk förnyar den då och då). Du måste redigera ett par filer för att detta ska fungera. Du måste redigera filen /etc/dhcpcd.conf med följande:
gränssnitt wlan0
statisk ip_address = 192.168.1.static routers = 192.168.1.1 static domain_name_servers = 192.168.1.1
Ersätt med din nätverksinformation. Det enda du behöver göra nu är att starta om.
sudo starta om
Placeringen av filerna från länken till Google Drive ska vara följande:
- index.html och sleepset.php bör placeras i katalogen/var/www/html
- sleepset.txt och sleeptrainer1_1.py bör placeras i katalogen/home/pi/pythoncode (tips: du måste skapa den här katalogen)
Efter att ha placerat dessa filer i rätt katalog måste filen rc.local ändras för att programmet sleeptrainer1_1.py ska kunna köras vid start. Du behöver åtkomst på rotnivå för att ändra rc.local-filen, så skriv:
sudo nano /etc/rc.local
I redigeraren, rulla ner och strax före utgång 0 -raden lägger du till:
python /home/pi/pythoncode/sleeptrainer1_1.py &
Det finns två saker att komma ihåg här:
- Använd den absoluta filvägen så att LINUX inte tror att filen sleeptraner1_1.py finns i samma katalog som rc.local.
- Glöm inte ampersand (&) i slutet. Detta gör att LINUX kan köra den här filen i bakgrunden och fortsätta starta.
Spara nu filen genom att skriva ctrl-x och sedan y när du uppmanas att spara och sedan ENTER.
Skriv sedan sudo reboot.
Det bör nämnas någonstans här att (åtminstone) du bör ändra ditt Raspberry Pi -lösenord med passwd -kommandot. Om du inte har gjort detta än, skulle det vara en bra tid nu.
Steg 4: Koden
Följande är koden från filen sleeptrainer1_1.py. Jag använde ett datetime -objekt för att jämföra tider med de som lästes i filen sleepset.txt. Textfilen är helt enkelt två rader, den första för timme, den andra för minuter. sleeptrainer1_1.py sover i en minut mellan loop -iterationer för att inte binda upp processorn. Det gröna ljuset kom ursprungligen ut för starkt, så jag använde pulsbreddsmodulering för att dämpa det när det användes med rött för att göra gult.
Python -kod:
importera RPi. GPIO som GPIO
från datetime import datetime som dt importtid GPIO.setmode (GPIO. BOARD) GPIO.setwarnings (False) red1 = 11 red2 = 16 green1 = 13 green2 = 18 blue1 = 15 blue2 = 36 GPIO.setup (red1, GPIO. OUT) GPIO.setup (red2, GPIO. OUT) GPIO.setup (green1, GPIO. OUT) GPIO.setup (green2, GPIO. OUT) GPIO.setup (blue1, GPIO. OUT) GPIO.setup (blue2, GPIO. OUT) p1 = GPIO. PWM (green1, 100) p2 = GPIO. PWM (green2, 100) def readset (): setfile = open ("/home/pi/pythoncode/sleepset.txt", 'r') a = setfile. readline () b = setfile.readline () a = int (a) b = int (b) return a, b def ledlight (color): if (color == "red"): GPIO.output (red1, GPIO. HIGH) GPIO.output (red2, GPIO. HIGH) p1.stop () p2.stop () GPIO.output (blue1, GPIO. LOW) GPIO.output (blue2, GPIO. LOW) elif (color == "blue"): GPIO.output (red1, GPIO. LOW) GPIO.output (red2, GPIO. LOW) p1.stop () p2.stop () GPIO.output (blue1, GPIO. HIGH) GPIO.output (blue2, GPIO. HIGH) elif (color == "green"): GPIO.output (red1, GPIO. LOW) GPIO.output (red2, GPIO. LOW) p1.start (100) p2.start (100) GPIO.output (blue1, GPIO. LOW) GPIO.output (blue2, GPIO. LOW) elif (color == "gul"): p1.start (60) p2.start (60) GPIO.output (red1, GPIO. HIGH) GPIO.output (red2, GPIO. HIGH) GPIO.output (blue1, GPIO. LOW) GPIO.output (blue2, GPIO. LOW) elif (color == "off"): GPIO.output (red1, GPIO. LOW) GPIO.output (red2, GPIO. LOW) GPIO.output (blue1, GPIO. LOW) GPIO.output (blue2, GPIO. LOW) p1.stop () p2.stop () medan True: settime = readset () time, minute = setime om minut == 0: om dt (dt.now (). år, dt.now (). månad, dt.now (). dag, timme-2) <dt.now () <dt (dt.now ().år, dt.now (). månad, dt.now (). dag, timme-1, minut+30): ledlight ("röd") elif dt (dt.now (). år, dt.now (). månad, dt.now (). dag, timme-1, minut+30) <dt.now () <dt (dt.now (). år, dt.now (). månad, dt.now ().dag, timme, minut): ledlight ("gul") elif dt (dt.now (). år, dt.now (). månad, dt.now (). dag, timme, minut) <dt.now () <dt (dt.now (). år, dt.now (). månad, dt.now (). dag, timme+1, minut): ledlight ("grön") else: ledlight ("off") elif dt (dt.now (). år, dt.now (). månad, dt.now (). dag, ho ur-2) <dt.now () <dt (dt.now (). år, dt.now (). månad, dt.now (). dag, timme, minut-30): ledlight ("röd") elif dt (dt.now (). år, dt.now (). månad, dt.now (). dag, timme, minut-30) <dt.now () <dt (dt.now (). år, dt.now (). månad, dt.now (). dag, timme, minut): ledlight ("gul") elif dt (dt.now (). år, dt.now (). månad, dt.now ().dag, timme, minut) <dt.now () <dt (dt.now (). år, dt.now (). månad, dt.now (). dag, timme+1, minut): ledlight ("grön") else: ledlight ("off") time.sleep (60)
Filen index.html är en grundläggande form utformad i HTML. Den tar innehållet i två textrutor och skickar dem till sleepset.php -filen för formulärhantering. PHP -filen skriver helt enkelt över sleepset.txt -filen med uppdaterad data.
Steg 5: Sätta ihop allt



Med kodningen klar och alla delar tryckta är det dags för montering. Jag följde dessa steg för att sätta ihop allt:
- Borra två små hål med RGB -lysdioder i botten av hornet och placera lysdioderna i dessa hål.
- Placera hornet i hålet i enhörningshuvudet och dra igenom det tills det är tätt. Använd lim från insidan för att säkra hornet.
- Fäst Raspberry Pi Zero W på insidan av enhörningshuvudet. (Med hjälp av hetlimpistol kanske)
- Fäst enhörningshuvudet till enhörningsbasen.
- Anslut nätsladden och fäst hela enheten på väggen.
- Anslut klockan.
Vid denna tidpunkt har jag en fungerande barns sömntränarklocka.
Steg 6: Ett år senare …

Ett år senare:
Mina tjejer sover lite längre. Vi har vant oss vid att vakna till små barn i vårt rum och säga "pappa, ljuset är grönt." och det är jättebra. Lång historia kort, vi vaknar bara 05:30 på en lördag när vi planerar det längre.
Saker jag planerar att förbättra i framtiden:
- Kanske lägga till några sensorer eller andra objekt som en mikrofon och högtalare.
- Kanske redigera koden för att arbeta med en högtalare som ska användas som väckarklocka eftersom mina barn snart börjar skolan.
Rekommenderad:
Ta fantastiska bilder med en iPhone: 9 steg (med bilder)

Ta fantastiska bilder med en iPhone: De flesta av oss har en smartphone med oss överallt nuförtiden, så det är viktigt att veta hur du använder din smartphone -kamera för att ta fantastiska bilder! Jag har bara haft en smartphone i ett par år, och jag har älskat att ha en bra kamera för att dokumentera saker jag
Hur: Installera Raspberry PI 4 Headless (VNC) med Rpi-imager och bilder: 7 steg (med bilder)

Hur: Installera Raspberry PI 4 Headless (VNC) med Rpi-imager och bilder: Jag planerar att använda denna Rapsberry PI i ett gäng roliga projekt tillbaka i min blogg. Kolla gärna in det. Jag ville börja använda mitt Raspberry PI men jag hade inte ett tangentbord eller en mus på min nya plats. Det var ett tag sedan jag installerade en hallon
Hur man digitaliserar bilder och filmnegativ med en DSLR: 12 steg (med bilder)

Hur man digitaliserar diabilder och filmnegativ med en DSLR: En mångsidig och stabil inställning för digitalisering av diabilder och negativ med en DSLR eller en kamera med ett makroalternativ. Denna instruerbara är en uppdatering av Hur man digitaliserar 35 mm negativ (uppladdad juli 2011) med flera förbättringar för att utöka dess
Hur man tar isär en dator med enkla steg och bilder: 13 steg (med bilder)

Hur man tar isär en dator med enkla steg och bilder: Detta är en instruktion om hur man demonterar en dator. De flesta av de grundläggande komponenterna är modulära och lätt att ta bort. Det är dock viktigt att du är organiserad kring det. Detta hjälper dig att inte förlora delar, och även för att göra ommonteringen
Hur man får älvor att dyka upp på ditt barns födelsedagsfest !: 4 steg

Hur man får älvor att dyka upp på ditt barns födelsedagsfest !: Min snart 8 -åriga dotter ville ha en födelsedag med tema, så jag bestämde mig för att göra det till en extra speciell sådan. Jag skapade en mycket enkel effekt som fick alla festbesökare att tycka att riktiga älvor dök upp bara för dem