Inhoudsopgave:

Slimme wandkalender: 5 stappen
Slimme wandkalender: 5 stappen

Video: Slimme wandkalender: 5 stappen

Video: Slimme wandkalender: 5 stappen
Video: Wanneer een douche nemen te duur is... 2024, Juli-
Anonim
Slimme wandkalender
Slimme wandkalender

Mijn vrouw en ik hadden vroeger een klassieke papieren wandkalender, waarop we belangrijke datums markeerden. We gebruiken Google-agenda op onze smartphones ook voor het markeren van evenementen, dus dit betekende dubbel werk. Dus besloot ik een soort slimme muurkalender te maken, die onze herinneringen, evenementen en andere gegevens zal weergeven. Aangezien ik verschillende oude elektronische onderdelen heb rondslingeren, was mijn doel om ze zoveel mogelijk te hergebruiken en de kalender te bouwen met zo min mogelijk kosten.

In deze tutorial laat ik je zien hoe je een slimme muurkalender kunt bouwen, waarbij evenementen van verschillende Google-accounts worden weergegeven. Het zal ook tijd, datum, weer, temperatuur en wat aanvullende informatie weergeven. Het wordt aangedreven door een Raspberry Pi-computer met een Passive Infrared Sensor (PIR) bewegingssensor eraan bevestigd, zodat het scherm wordt ingeschakeld wanneer beweging wordt gedetecteerd in de kamer, maar wordt uitgeschakeld na enkele minuten van inactiviteit. Deze tutorial is gebaseerd op verschillende andere tutorials die ik op internet heb gevonden en ik zal de links naar hen geven voor een beter begrip. Enige basiskennis van programmeren is vereist (HTML, Python, …).

Stap 1: De hardware

Zoals eerder vermeld heb ik geprobeerd zoveel mogelijk oude elektronische onderdelen te hergebruiken om de kosten laag te houden. Sommige items moest ik echter kopen, dus ik zal alles opsommen wat nodig is voor de constructie.

- Een Raspberry Pi-kit. Aanvankelijk gebruikte ik mijn oude model 2 van een ander project. Het werkte, maar het bewerken en opnieuw laden van de webpagina kostte me veel tijd, dus ik ben uiteindelijk overgestapt op model 3, dat vloeiender werkt

- LCD scherm. Ik gebruikte het scherm van mijn oude laptop, dus ik hoefde er alleen maar een LVDS-stuurprogrammakaart voor te kopen en de voeding https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ stuurprogramma+LVDS+bord&_sacat=0

- Kunststof opbergdoos voor de elektronica

- Passieve infrarood bewegingssensor

- AM2302 temperatuur-/vochtigheidssensor

- Zwarte kunststof opschuifmap voor LCD-frame

- Diverse kabels (HDMI, 5.5mm voor gelijkstroom, soldeerloze breadboard jumperkabels, …)

Stap 2: Het LCD-scherm maken

Het LCD-scherm maken
Het LCD-scherm maken
Het LCD-scherm maken
Het LCD-scherm maken
Het LCD-scherm maken
Het LCD-scherm maken

Ik gebruikte het LCD-scherm van mijn oude verouderde laptop. Er zijn verschillende tutorials over hoe je dit moet doen, ik heb deze gevolgd:

www.instructables.com/id/How-to-reuse-the-old-LCD-Screen-of-your-broken-Lap/

Ik heb de hoes van mijn oude laptop gedemonteerd, het LCD-scherm eruit gehaald en het juiste LVDS-stuurprogrammabord besteld. Ik gaf de verkoper de productcode, die te vinden was op de achterkant van het LCD-scherm, in mijn geval is het LP171WE3 (TL)(A2) - zie label rechtsonder op de laatste foto, en toen stuurde hij me de juiste LVDS. Let op, je hebt ook de voeding voor het display nodig, dus vraag de verkoper om deze ook op te sturen. Ik heb ook een mooie plastic doos van 14,5 × 7,5 × 2 cm gekocht om mooi op het bestuurdersbord te passen en deze aan de achterkant van het LCD-scherm te bevestigen.

Nu heeft het LCD-scherm een metalen frame, wat er niet mooi uitziet. In eerste instantie heb ik het zwart gespoten, maar de verf begon af te schilferen. Dus nam ik vier zwarte plastic opschuifmappen, die meestal worden gebruikt voor het binden van vellen papier, dienovereenkomstig bijgesneden en bevestigd om het frame te bedekken. Dit zag er goed uit, dus ik heb alle kabels aangesloten, HDMI aangesloten op mijn oude Raspberry Pi en Voila - het werkte! Er was een afbeelding te zien op het display, dus ik was klaar om verder te gaan met de volgende stap: welke informatie op het display moet worden weergegeven en hoe deze moet worden weergegeven.

Stap 3: De software instellen

Toen ik op internet aan het zoeken was naar aanwijzingen voor het maken van een kalender, werd ik geïnspireerd door deze pagina https://dakboard.com/site. Ze leveren het eindproduct (het beeldscherm, de computer en werkende software), maar ze hebben ook een uitstekende tutorial voor doe-het-zelf-oplossingen (https://blog.dakboard.com/diy-wall-display/). Ik raad je aan om deze tutorial te volgen, in ieder geval voor het eerste deel met de instructies voor het voorbereiden en instellen van het systeem op Raspberry, zodat de browser de gewenste webpagina automatisch laadt bij het opstarten.

Dit werkte goed, maar ik was op zoek naar een oplossing die meer op mijn wensen kon worden afgestemd. Ik heb besloten om mijn eigen webserver op te zetten en een webpagina te maken, die naast de kalender ook aanvullende informatie zal tonen. Ik heb voor Wordpress.org gekozen, omdat het goed gedocumenteerd is en goede ondersteuning en een grote community heeft om je te helpen. Hier is de tutorial over het installeren van Wordpress op Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Met Wordpress geïnstalleerd, was het tijd om mijn homepage te ontwerpen. U kunt een van de vele aangeboden thema's gebruiken of helemaal opnieuw ontwerpen. Hiervoor is in ieder geval enige kennis van HTML-programmering vereist.

Ik heb mijn pagina zo ontworpen dat aan de linkerkant de kalender wordt getoond (https://sl.wordpress.org/plugins/google-calendar-events/), terwijl aan de rechterkant tijd en datum worden getoond (https://www.timeanddate.com/clocks/free.html en https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). De weersvoorspelling is van deze pagina (https://www.1a-vreme.si/vremensko-okno/), die een voorspellingswidget voor Sloveense steden biedt, maar ik denk dat er ook widgets voor andere landen op internet te vinden zijn. De temperatuur wordt gemeten met de AM2302-sensor (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), zoals uitgelegd aan het einde van dit hoofdstuk. Aan de onderkant bevindt zich een eenvoudige dagelijkse afteltimer, die aangeeft hoeveel dagen er nog over zijn tot een evenement (interessant voor mijn kinderen om te weten, hoeveel dagen zullen ze ergens op moeten wachten). In de rechterbovenhoek bevindt zich de MetaSlider-plug-in (https://wordpress.org/plugins/ml-slider/), die willekeurig naar geselecteerde foto's van mijn familie schuift. Daarnaast heb ik de Background Slider-plug-in (https://sl.wordpress.org/plugins/background-slider-master/) gebruikt om me een willekeurige afbeelding te laten zien voor een mooiere achtergrond.

Zoals eerder vermeld, wordt de binnentemperatuur verzameld met behulp van AM2302-sensor. Er zijn veel tutorials over hoe je temperatuur kunt krijgen, ik heb deze gevolgd: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Later heb ik deze sensor verplaatst naar een andere Raspberry Pi waarop Home Assistant draait, omdat het gemakkelijker is om waarden te lezen en te publiceren met behulp van de DHT-sensorcomponent (https://www.home-assistant.io/components/sensor.dht/). Home Assistant kan ook de buitentemperatuur meten met behulp van verschillende weercomponenten, ik gebruikte YR.no-component (https://www.home-assistant.io/components/sensor.yr/). Daarmee heb ik een automatiseringsscript geschreven om de binnen- en buitentemperatuur van deze componenten te verzamelen en deze naar een tekstbestand te schrijven, dat vervolgens op mijn wandkalender wordt weergegeven. Voor meer informatie over Home Assistant, zie de homepage (https://www.home-assistant.io/).

Stap 4: Optioneel - Het beeldscherm uitschakelen

Nu hebben we onze kalender ingesteld en uitgevoerd, precies zoals we het willen. Maar we willen niet dat het scherm 24/7 aan staat. We willen hem alleen aan hebben als er iemand thuis is. We willen ook niet dat het midden in de nacht wordt aangezet, als we naar het toilet gaan, is het te fel! Dus we zullen een infraroodsensor bevestigen om op te merken wanneer iemand ervoor staat, en wat tijdslimieten toevoegen, wanneer het moet worden ingeschakeld.

Houd er rekening mee dat mijn programmeervaardigheden nogal beperkt zijn, dus het volgende zou niet optimaal kunnen zijn, omdat ik het uit verschillende online forums en tutorials heb geplukt, maar in wezen werkt het. Toch is elke aanbeveling nog steeds welkom. Eerst beginnen we met een test om de monitor handmatig in of uit te schakelen. Daarvoor maken we twee bestanden (bijvoorbeeld monitor_on.sh en monitor_off.sh) en schrijven er wat code in. De eenvoudigste manier om dit te doen, is door in te loggen op uw Raspberry met SSH en type

sudo nano monitor_on.sh

en typ de volgende code:

tvservice --voorkeur;

startx /usr/bin/graphical_launcher `fgconsole`

Druk op CTRL+X om op te slaan en af te sluiten, en maak vervolgens het tweede bestand

sudo nano monitor_off.sh

en typ de volgende code:

tvservice --uit;

Druk nogmaals op CTRL+X om op te slaan en af te sluiten. Maak deze nieuw gemaakte bestanden uitvoerbaar:

sudo chmod +x monitor_on.sh

sudo chmod +x monitor_off.sh

Om te proberen of deze opdrachten werken, typt u

sudo./monitor_off.sh

sudo./monitor_on.sh

De monitor moet nu overeenkomstig worden uit- en ingeschakeld. Ik heb gemerkt dat het op Raspberry Pi 2 bijna 10 seconden duurde voordat de monitor werd ingeschakeld. Op Raspberry Pi 3 duurt het 1-2 seconden. Vervolgens zullen we een infraroodsensor aansluiten, die deze scripts zal activeren. Nogmaals, er zijn veel tutorials om Raspberry Pi en PIR in te stellen, ik heb deze gevolgd: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Maak in principe een bestand met behulp van nano-editor (bijvoorbeeld motion_sensor.py) en typ de juiste Python-code erin. Hieronder is het voorbeeld van mijn bestand:

import RPi. GPIO als GPIOimport timeimport sysimport subprocessimport datetime as dtimport osGPIO.setwarnings(False)# GPIO.setmode(GPIO. BOARD)GPIO.setmode(GPIO. BCM)GPIO.setup (17, GPIO. IN) #PIRturned_off = Falselast_motion_time = time.time()SHUTOFF_DELAY = 180 # secondswhile True:i=GPIO.input (17)if i==0: #Als de output van de bewegingssensor LAAG is, zet u de monitor UITindien niet uitgeschakeld en time.time() > (last_motion_time + SHUTOFF_DELAY):print "Geen indringers", iturned_off = Truetime.sleep(1)subprocess.call(['/home/pi/monitor_off.sh'], shell=True)elif i==1: #When output from motion sensor HOOG is, zet u de monitor ONprint op "Indringer gedetecteerd", itime.sleep(1)last_motion_time = time.time()sys.stdout.flush()indien uitgeschakeld en dt.datetime.now().hour > 5 en dt.datetime. now().hour < 23:turned_off = Falsesubprocess.call(['/home/pi/monitor_on.sh'], shell=True)if _name_ == '_main_':try:main()behalve KeyboardInterrupt:GPIO.cleanup ()

Merk op dat "GPIO.setup (17, GPIO. IN)" aangeeft dat de uitgangspin van PIR is verbonden met pin 17 op Raspberry Pi. Welke pin dat is, hangt af of u GPIO.setmode(GPIO. BOARD) of GPIO.setmode(GPIO. BCM) definieert. Het verschil wordt hier uitgelegd: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Ik heb # voor GPIO. BOARD, dus het wordt genegeerd en GPIO. BCM wordt gebruikt.

Let op de lijn

SHUTOFF_DELAY = 180 #seconden

Hier wordt vermeld hoe lang de monitor is ingeschakeld sinds de laatste beweging is gedetecteerd, voordat deze wordt uitgeschakeld. Dit is handig omdat ik niet wil dat de monitor constant wordt in- en uitgeschakeld wanneer ik er langs loop, maar ik wil hem een tijdje aan laten staan voordat hij uit gaat. Ik heb gekozen voor het interval van 180 seconden, zodat de monitor ongeveer 3 minuten nadat de laatste beweging is gedetecteerd uitschakelt.

Eindelijk, deze regel

indien uitgeschakeld en dt.datetime.now().hour > 6 en dt.datetime.now().hour < 23:

geeft aan dat de monitor alleen aangaat tussen 6:00 en 23:00 uur, dus ik heb er 's nachts geen last van. De lijnen

print "Geen indringers", i

en

print "Indringer gedetecteerd", i

zijn alleen voor het testen van het script, je kunt ze later verwijderen, als het werkt. Test nu het script:

sudo python motion_sensor.py

U zou de berichten "Indringer gedetecteerd" moeten zien als u boven de sensor zwaait, anders is het "Geen indringers". Wanneer dit script is getest en werkt, stelt u het in om te starten bij het opstarten:

sudo nano ~/.config/lxsession/LXDE-pi/autostart

en voeg de volgende regel toe:

@sudo /usr/bin/python /home/pi/motion_sensor.py

Natuurlijk moet je de juiste bestandsnaam opgeven van het Python-script dat je hebt gemaakt.

Stap 5: Hang de kalender op

Als alles klaar is, is het tijd om de kalender aan de muur te hangen!

Aanvankelijk dacht ik eraan om de Raspberry Pi achter het LCD-scherm te verbergen, zodat er maar één kabel (DC-stroom) nodig zou zijn. Maar aangezien Raspberry op 5V werkt en het LCD-scherm op 12V werkt, zou ik een extra transformator nodig hebben. Ook is de Raspberry-behuizing vrij dik, wat betekent dat het LCD-scherm ongeveer 3 centimeter van de muur zou worden geplaatst. Daar heb ik dus van afgezien en alleen de LCD-elektronica achter de LCD gelaten, zodat deze nu nog geen 1 centimeter van de muur verwijderd is. Ik heb twee 5 meter lange kabels aangeschaft, een HDMI en een 5,5 mm voor gelijkstroomvoeding. Beide kabels zijn wit, net als de muur, waardoor ze niet veel opvallen. Ik heb het LCD-scherm aan de muur gemonteerd en Raspberry op de koelkast aan de tegenoverliggende muur geplaatst, dus het is eigenlijk verborgen, maar toch gemakkelijk toegankelijk.

Aanbevolen: