Hur man bygger en ljusavkännande smart switch med Raspberry Pi och IFTTT
Annons
Dusk-til-gryning switchar och timer switchar är båda praktiska sätt att automatisera dina ljus. Skulle det inte vara bra om du kunde kombinera de två eller till och med ansluta dem till internet för ett riktigt smart belysningssystem?
En Raspberry Pi, ett relä, en ljussensor och en streck kod är allt du behöver för att uppnå denna automatiska belysningsnirvana på en skoband.
Vad du behöver
Komponenter för din ljusavkännande smarta switch är lätta att källa. Du kommer att behöva:
- Alla modeller Raspberry Pi som kör Raspbian.
- En reläbräda, lätt att hitta på Amazon.
- En Adafruit TSL2561 lyssensor.
- Jumpertrådar.
- Några ljus att automatisera!
Så fungerar en ljusavkännande smart switch
Genom att använda ett relä på samma sätt som vårt automatiska garageportöppnarprojekt Hur automatisera din garageport med IFTTT och Raspberry Pi Så automatiserar du din garageport med IFTTT och Raspberry Pi I den här handboken visar vi dig hur du automatiserar din garageport med ingenting annat än Raspberry Pi och IFTTT. Läs mer, du kan programmera en Raspberry Pi för att slå på och stänga av en belysningskrets vid fasta tider. Om du lägger till en lyssensor till mixen kan Pi upptäcka den omgivande ljusnivån och välja att slå på lamporna endast när de verkligen behövs.
Eftersom en Pi är en liten dator som kan anslutas till ett nätverk kan du också ställa in den för att kontrolleras över internet också. Dina smarta lampor har tre ingångar för att avgöra när de tänds:
- Ett programmerat schema.
- Den omgivande ljusnivån.
- En åsidosättningssignal skickad över nätverket.
Steg 1: Anslut Raspberry Pi till reläet
Om du är ny på att använda GPIO börjar du med att läsa Allt du behöver veta om Raspberry Pi GPIO Pins.
Kontrollera först om ditt reläkort har en bygel som ansluter VCC- och JD-VCC-stiften tillsammans. Om den har det, ta bort den.
När allt är avstängt ansluter du reläkortet till din Pi enligt följande:
- Pi Pin 2 (5v) till JD-VCC på reläkortet.
- Pi Pin 6 (GND) till GND på reläkortet.
- Pi Pin 15 (GPIO 22) till IN1 på reläkortet
- Pi Pin 17 (3.3v) till VCC på reläkortet.
Steg 2: Anslut Luminosity Sensor
TSL2561 är en ljussensor som kan upptäcka infrarött, fullspektrat och synligt ljus. Det kan skicka en mycket exakt digital läsning till Raspberry Pi. Sensorn rapporterar ljusnivån i en skala från 0, 1 (inget ljus) till 40 000 (ljus sol).
TSL2561-styrelsen pratar med Raspberry Pi med i2c-protokollet. I2C behöver bara två anslutningar, en för en klocka för att hålla de två enheterna synkroniserade, och en för data som överförs. Naturligtvis behöver lux-sensorn också lite ström, så det finns fyra anslutningar att göra helt och hållet:
- Anslut Pi Pin 1 (3.3v) till Vin (eller VCC) på lux-sensorn
- Anslut Pi Pin 3 (SDA) till SDA på lux-sensorn
- Anslut Pi Pin 5 (SCL) till SCL på lux-sensorn
- Anslut Pi Pin 9 (GND) till GND på lux-sensorn
Steg 3: Konfigurera och installera beroenden
Innan du går längre måste du kontrollera att I2C är aktiverat på din Raspberry Pi (den är som standard inaktiverad). Skriv in följande i terminalen:
sudo raspi-config
Välj gränssnittsalternativ> P5 I2C och välj sedan Ja .
Tryck på Enter och välj sedan Finish för att lämna konfigurationsskärmen. Starta om din Pi för att ändringen ska träda i kraft:
sudo reboot
Vissa beroenden är nödvändiga för att Pi ska kunna kommunicera med sensorkortet. Skriv in följande kommandon:
sudo apt-get update sudo apt-get install -y python-smbus sudo apt-get install -y i2c-tools
Du kan kontrollera att allt fungerar genom att skriva:
sudo i2cdetect -y 1
Om dina beroenden är installerade och din lux-sensor är korrekt ansluten ser du ett svar som detta:
Här rapporterar verktyget att det har hittat en I2C-enhet (lux-sensorn) på I2C-adress 39.
Du är inte riktigt klar med beroenden ännu. Du kommer också att behöva några bibliotek. Skapa först en mapp för att behålla allt som är relaterat till detta projekt i:
mkdir ~/lighting cd ~/lighting
Hämta nästa flaska, en lätt ram som skapar en enkel webbserver på din Pi. Du använder det för att kontrollera dina lampor från webben.
wget https://bottlepy.org/bottle.py
De andra biblioteken du behöver finns på Github, så om din Raspberry Pi inte redan har Git installerat, lägg till det nu:
sudo apt-get install git
Klona nu två bibliotek, så här:
git clone https://github.com/adafruit/Adafruit_Python_GPIO.git git clone https://github.com/adafruit/Adafruit_Python_PureIO.git
Och slutligen, skapa ett testskript genom att skapa en ny fil:
nano test.py
Klistra in den här koden (med tillstånd av Adafruit):
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import absolute_import, division, print_function, unicode_literals from tsl2561 import TSL2561 if __name__ == "__main__": tsl = TSL2561(debug=True) print(tsl.lux())
Tryck på Ctrl + X för att spara, följ instruktionerna på skärmen för att avsluta.
När du är klar kör du testskriptet:
python test.py
Om allt är installerat och fungerar får du tillbaka ett nummer. Detta nummer är en lux-avläsning från sensorn. Försök blockera sensorn eller flytta den så att den blir mer eller mindre ljus. Kör sedan testskriptet igen och se hur numret ändras.
Steg 4: Skapa automatiseringsskript
Raspberry Pi slår på lamporna när det blir mörkt, men stänger också av dem vid vissa tider. Till exempel kanske du vill att dina lampor ska tända när det blir mörkt på kvällen och sedan släcka runt midnatt för att spara el. De kunde komma på igen tidigt på morgonen och sedan stänga av sig när det blir lätt.
För att hantera ett schema med flera tidszoner som detta finns det två olika skript. En ( onzone.py ) kommer att köras varje minut under de tider du vill att dina lampor ska vara tända om det är mörkt. Den andra ( offzone.py ) kommer att köras varje minut under de tider du vill att lamporna ska vara släckta oavsett ljusnivå.
Skripten kommer att schemaläggas med cron-jobb. Hur man planerar uppgifter i Linux med Cron och Crontab Hur man planerar uppgifter i Linux med Cron och Crontab Förmågan att automatisera uppgifter är en av de futuristiska tekniker som redan finns här. Varje Linux-användare kan dra nytta av schemaläggningssystem och användaruppgifter, tack vare cron, en lättanvänd bakgrundstjänst. Läs mer . Genom att välja vilka timmar på dagen och natten som varje skript körs kommer det att vara lätt att ställa in timmarna som dina lampor ska tända automatiskt. Du kan ställa in så många av och på perioder du vill.
Förutom skript för att automatiskt kontrollera lamporna finns det ett tredje skript för att hantera åsidosättande situationer. På så sätt kan du tända lamporna på distans oberoende av den omgivande ljusnivån.
Manus 1: ON-zonen
Detta Python-skript körs varje minut på dagen som du vill att lamporna ska tända om det är mörkt. Ladda ner skriptet genom att kopiera och klistra in detta kommando i terminalen:
wget https://gist.githubusercontent.com/hamishdownell/ea151d2ff7c888ac09f8a850afaab4ee/raw/10b0e9d8ec42f8577750941da46a93d16b597c05/onzone.py
Varje gång onzone.py körs, kommer det att få ett lux-värde från sensorn för att se om det är mörkt. Om det är det, kommer det att kontrollera om lamporna är på eller av. Om de är avstängda, kommer det att slå på dem. Om det inte är mörkt kommer manuset att se om lamporna är på. Om de är det kommer det att stängas av om de inte har åsidosatts.
Skriptet använder en variabel som kallas lowlux för att bestämma vid vilken tidpunkt det är tillräckligt mörkt för att slå på lamporna. Du kan ändra det till något som passar din egen installation genom att ändra värdet i den här raden nära toppen av onzone.py:
lowlux = 50
Manus 2: OFF-zonen
Det här skriptet körs varje minut på dagen som du vill att lamporna ska stanna av, såvida de inte har åsidosatts. Ladda ner skriptet:
wget https://gist.githubusercontent.com/hamishdownell/fb8970909145bbfefbbef8dba5f5a00f/raw/eae5a6057a51ca4727907c7d061f0a48b07da944/offzone.py
Det här skriptet bryr sig inte om hur ljust eller mörkt det är. Det är bara att stänga av lamporna om de är på (om de inte har åsidosatts).
Skript 3: Serveren åsidosätter
Detta skript skapar en enkel webbtjänst som kan acceptera kommandon för att göra följande åtgärder:
- Slå på lamporna i ett antal minuter oavsett ljusnivå i omgivningen.
- Stäng av lamporna.
- Ta reda på om lamporna för närvarande är på eller av.
- Ta reda på hur mycket längre lamporna ska stanna när de har åsidosatts.
Ladda ner skriptet:
wget https://gist.githubusercontent.com/hamishdownell/2303bfd9fb30d42e79923bdb7e69ed4e/raw/7dcb456b81b8ae58ae48efa225adb41ba7d7f69c/lightserver.py
Innan du går vidare till nästa steg kör du skriptet offzone.py så här:
python offzone.py
Detta skapar kontrollfilerna som skripten använder för att hålla reda på allt.
Steg 5: Planera skripten
Din Raspberry Pi kan köra automatiseringsskript med cron. Ställ in schemat så här:
sudo crontab -e
Klistra in dessa två rader i textredigeraren:
* 7, 8, 9, 17, 18, 19, 20, 21, 22, 23 * * * python /home/pi/lighting/onzone.py > NULL * 0, 1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16 * * * python /home/pi/lighting/offzone.py > NULL
Obs: Om användarnamnet du loggade in på din Raspberry Pi med inte var standardpi, ändra sökvägen i enlighet därmed.
Lista alla timmar där du vill att lamporna ska tända när det är mörkt i den första raden. Alla timmar där du vill att lamporna ska vara av går i den andra raden.
Ställ nu åsidosättningsskriptet så att det körs automatiskt när Pi startar:
sudo nano /etc/rc.local
Klistra in den här raden längst ner i filen, spara och avsluta:
nohup python /home/pi/lighting/lightserver.py &
Slutligen, starta om Raspberry Pi så att du kan kontrollera att serverskriptet laddas som det ska
sudo reboot
Steg 6: Testa reläet
Innan du ansluter lamporna ska du testa att allt fungerar med hjälp av åsidosättningsfunktionen. Skriv följande i en webbläsare i samma nätverk som din Pi och ersätt IP-adressen med adressen till din egen Raspberry Pi:
11.22.33.44:1234/overrideon/3
Om allt är bra hör du reläklicket och webbläsaren svarar att lamporna har tändts i tre minuter.
Medan reläet är stängt kan du testa de andra åsidosättningsfunktionerna. Detta berättar hur många minuter lamporna kommer att tända på grund av åsidosättningen:
11.22.33.44:1234/getoverrideremaining
Detta skulle säga att lamporna är tända:
11.22.33.44:1234/lightstatus
Slutligen kan du stänga av dem igen med:
11.22.33.44:1234/overrideoff
Reläet kommer att klicka när det öppnas.
Steg 7: Anslut dina ljus
Stäng av och koppla ur Raspberry Pi innan du ansluter lamporna till reläet. Använd de normalt öppna (NO) -anslutningarna på reläkortet istället för en vanlig omkopplare, så här:
Slutligen kan du installera din lux-sensor på en plats där den fångar den omgivande ljusnivån. Observera att TSL2561 kommer att rapporteras vara mättad om den möter direkt starkt solljus, så det är bäst att hålla den i skuggan om möjligt.
Fler Raspberry Pi-projekt som du kan prova
Att fjärrstyra din nya smarta belysningsinställning genom att skriva kommandon i en webbläsare är ganska besvärligt. Ett bättre sätt är att ansluta något som en Amazon Echo för att göra det lättare. Att kombinera Alexa-tjänsten och Webhooks-tjänsten på IFTTT är ett enkelt sätt att lägga till röststyrning.
Se vår guide för att använda IFTTT för att hjälpa dig komma igång.
Ett annat alternativ är att använda Siri-genvägar. En enda genväg med menyer kan fråga status för lamporna och använda åsidosättningsfunktionerna för att slå på och stänga av dem.
Om du gillade det här projektet, var noga med att kolla in dessa konstiga Raspberry Pi-projekt 10 Konstiga Raspberry Pi-projekt 10 Konstigaste Raspberry Pi-projekt Det finns en galen forskare i var och en av oss, och Raspberry Pi låter din inre loon komma ut och spela. Ibland blir saker konstiga. Väldigt konstigt. Läs mer för fler idéer.
Utforska mer om: IFTTT, Raspberry Pi, Smart Lighting.