Och m sade: “Varde ljus“; och det vart ljus.

LED-ljus är något nästan heligt på m och vi försöker få in det överallt där vi kan. Nästa ställe var således trappen!

Men att bara lysa upp den räcker inte. Vi vill kunna styra den på något smart sätt och gärna med så mycket färg som möjligt! Således blev det en variant med Neopixlar och en D1 mini!

För detta projekt behövs

Förberedelser:

Installera senaste versionen av Arduino IDE.

Från bibliotekshanteraren i Arduinomjukvaran installera Adafruits NeoPixel bibliotek.

Under inställningar lägg till följande adress i fältet för “Additional Boards Manager URLs”: http://arduino.esp8266.com/stable/package_esp8266com_index.json

Sist men inte minst, gå till “Board Manager” och installera esp8266:

Gör så här:

Hårdvara

Vi börjar som vanligt med vår D1 mini med att löda på headers.

Vi fortsätter och löder på våra PIR-sensorer direkt på levelshift shielden. 5V och jord går till deras respektive pinne. För signalen spelar det inte så stor roll, men undvik pinne D3 då knappen på levelshift shielden är kopplad till den. Vi valde D1 och D2.

Passa även på att löda på ett par motstånd mellan jord och pinnarna för PIR-sensorerna.

Sist men inte minst kopplar vi in vår list till skruvterminalerna. Notera att CLK inte har något kabel kopplad till sig. Observera också att skruvterminalerna på levelshift shielden och usbporten på D1 mini skall peka åt samma håll vid monteringen.

Mjukvara

Nu till den spännande biten!

Vi programmerar som vanligt i Arduinos IDE och hela koden hittar du på vår Github.

Om du bara vill använda vår kod rakt av är det några saker du måste ändra. På rad 7 byter du ut “mySSID” till namnet på ditt nätverk och på rad 8 anger du lösenordet.

7: const char* ssid = "mySSID";  
8: const char* password = "myPassword";

Rad 9 talar om vilken effekt som skall köras som default (vid spänningsbortfall t ex). Mer om det senare.

Rad 10 är om du monterat elektroniken i toppen eller botten av trappen. Default är toppen, men ändra till “false” om du monterat elektroniken i botten av trappan.

9: int currentMode = 1;   
10: bool topToBottom = true; 

Rad 14-16 definierar vilka pinnar vi använder. LED_PIN skall aldrig ändras, men FIRST_PIR_PIN och LAST_PIR_PIN är vilka pinnar du lödde på dina PIR sensorer. FIRST är den som är i toppen på trappen och LAST är den som är i botten.

14: #define LED_PIN    D7
15: #define FIRST_PIR_PIN    D1
16: #define LAST_PIR_PIN    D2 

Sist men inte minst behöver vi definiera vår trapp! Det görs på raderna 18 och 19.

18: int theStair[] = {10, 12, 15, 15, 12, 10};
19: int LED_COUNT = 72;  

Rad 18 innehåller en “dictionary” med hur många dioder varje trappsteg är. Första trappsteget är där första LEDen på slingan är.

Rad 19 är helt enkelt hur många dioder vi totalt har om vi slår ihop alla trappsteg.

Styr trappen

Vår kod innehåller en liten webbserver och “trappen” kommer koppla upp sig på ditt WIFI. Om du har serielmonitorn uppe när den startar så skrivs IP-nummer ut, annars brukar det gå att lista ut i din router.

Gå nu till IP-numret för din trapp och du kommer mötas av följande gränssnitt:

Här kan du se vilket program som är aktiverat för närvarande, byta program, ändra färg samt välja om programmet skall aktiveras av rörelsesensorerna eller vara igång hela tiden.

Vill du kontrollera trappen från t ex din styrenhet istället så bygger all styrning på web-hooks. URLen är uppbyggd enligt följande där X är önskat program:

http://ip-nummer/setmodeX

I program där man kan ändra färg definieras färgen med GRBW koder som argument enligt nedan, där G/R/B/W är en siffra mellan 0 och 254:

http://ip-nummer/setmodeX?g='+G+'&r='+R+'&b='+B+'&w='+W

Tillgängliga program:

Mode 0: Alltid avstängd

Mode 1: Dimma ett steg i taget från det håll man kommer gående i trappen. Endast vit färg.

Mode 2: Samma som mode 1 men plockar färgen från gränssnittet

Mode 3: Tänd hela trappen i en färg. Om rörelse är aktiverat släcks trappen efter 5 sekunder. Färgen ställs in i gränssnittet.

Mode 4: “Masken” i regnbågens alla färger. Kör åt det hållet man kommer gående i trappen.

Mode 5: “Vattenfall”. Tänder 2 steg i taget och försöker simulera ett vattenfall, uppifrån och ner. Om rörelse är aktiverad släcks det efter 5 sekunder. Färg ställs in i gränssnittet.

Mode 6: Partymode! Hela trappan blinkar i regnbågens alla färger! Om rörelse är aktiverad så släcks det efter 5 sekunder.

MQTT (endast avancerade användare)

För de lite mer avancerade användarna har vi även skapat en version av programmet som istället för en webbserver använder MQTT. Även den koden finns på github men vi kommer inte förklara den närmare i detta inlägg.

Men den som är van vid MQTT borde ganska snabbt kunna lista ut vad som behöver ändras. Skickar och tar emot kommandon på formatet “PROGRAM, RÖRELSE, GRÖN, RÖD, BLÅ, VIT”;
– Där program är valt mode, 0-6
– Rörelse är 0 om den alltid skall vara igång, 1 om den startar vid rörelse
– Grön är mängden grön färg. 0-255
– Röd är mängden röd färg. 0-255
– Blå är mängden blå färg. 0-255
– Vit är mängden vit färg. 0-255