WeggUp - en sovande cykel och ljus väckarklocka (9 / 11 steg)

Steg 9: programvara




Jag använde en "betyder" steack (mongodb, express.js, kantiga js och nod js) att genomföra allt i programvara.

Du kan hitta aktuellt (verkligen, verkligen alfa) källa koden på github

Det är flera skäl varför jag försökte denna kombination:

  • Jag ville prova det i en riktig projetc
  • Det är samma språk i frontend/backend/db
  • JavaScript är ganska bra på prototyper

Begrepp:

På en inbäddad projekt som detta har vi problemet med delade resurser (ljud och ljus i vårt fall). Så bara en process kan komma åt resursen vid varje given tidpunkt, eftersom vi har flera arbetslägen (ljus, humör ljus, larm, ljudbok-läge), kan dessa tjänster blockera varandra. Så för att hålla allting enkelt jag bestämde mig för en mycket enkel strategi: när en process vill komma åt en resurs, en annan eventuellt pågående process så att resursen kan användas igen av den nya processen stoppas. I vårt fall, detta är möjligen också en av de bästa lösningarna: ingen av processerna som gör verkligen behov en resurs + den enda gången utlösta processen är larmet: larmet bör alltid få resursen när det börjar, även när något annat körs. Alla andra processer är användare utlöst (och vi har bara en användare), så vi vill nog processen för att göra anspråk på resursen.

Gränsyta lysdioderna: pwm med Pi-blaster

Raspberry Pi har oftast bara 1 eller 2 pwm portar. För detta projekt dock behövde jag minst 4 av dem så jag använde pi-blaster projektet för att köra flera portar med pwm. Jag hade problem med flimmer medan dimming lysdioderna, så jag var tvungen att byta till en tidigare version som inte har problemet. Dessutom hade jag ändra källor för pcm-läge som standard, utmärkt pi-blaster använder klanggeneratorns för att producera pwm vilket resulterar i riktigt äckligt buller på högtalarna. Dessutom hade jag justera portar: Port 21 döptes till 27 i den senaste raspberry Pi versionen.

Loggning

Som förklaras i intro bestämde jag mig att logga alla sensor värden i mongodb att visa dem senare och analysera dem. Det finns ett stort bibliotek för samverkan med mcp3008 chip för noden. Man kan söka i poster i loggen med en REST api. På gränssnittet använde jag flot, en jquery biblioteket för plottning diagram.

Loggning av accelerometrar var lite svårare, eftersom jag i princip ville logga "Är det motion" inte "vad är ledning av förslaget". Därför jag kontinuerligt loggas den absoluta skillnaden mellan 2 mätningar och byggde ett glidande medelvärde över 100 prover (1 urval varje millisekund) leder till 10 mätningar per sekund. När genomsnittligt överskrider en viss threashold (empiriskt bestämd) avfyras en händelse, så att larm-Schemaläggaren och andra moduler kan ta enligt åtgärder. Som provet är frekvensen för rörelse ganska hög, jag bara värden loggas när de ändrar en viss från det senast sparade värdet. otherwhise det skulle vara för mycket I/O för hallon bromsa allt (plus det skulle ta evigheter att visa data).

Larm

Alarm lagras också i mongodb och nod-cron biblioteket används för att starta dem. De kan redigeras via en REST api. På front-end använde jag en övertoningsväljare och en ljud-plockare för att konfigurera sunrise-ljuset och stämningen ljud.

För att ha en förhandsgranskning av den valda färgen utan alltför stor fördröjning, La jag socket stöd för att garantera en snabb kommunikation vid plockning av färgvärden. När du redigerar den lätta lutningen, förhandsgranska den markerade färgen alltid på weggup. Ljud/ljus toning kan också vara helt förhandsgranskade och alla ljud kan spelas separat. Volymen av varje ljud kan vara justerade separat, även om det bör upprepas eller inte.

Ljudfilerna läses från en viss katalog på raspberry Pi, som också delas via samba.

Inse funktionen sleep cycle larm Schemaläggaren lyssnar till händelsen rörelse från loggern och kontrollerar om nästa ljuset sova fasen ligger inom en viss tidsram mellan vakna tid och en fastställd tid dessförinnan att schemalägga om larmet. Det största problemet är att förutse nästa ljuset sova fasen. Just nu använder jag en konstant längd på 3 timmar per sömncykel. När har jag samlat mer rörelse data kommer att jag justera detta eller hitta en annan metod att förutsäga nästa ljus sömn fas (beroende på insamlade data).

Spela ljud

Om du vill spela upp ljud är mplayer processer lekt i bakgrunden i slav-läge, så att de enkelt kan styras från noden. Jag kommer eventuellt ändra till en annan spelare, som krav på hårdvara, och förseningar är därför ganska hög med mplayer.

Den enda knapp gränssnittet

När du trycker upp i huset, blir den inre knappen nedtryckt. Denna händelse orsakar weggup att slå på starkt ljus, agerar som en lampa. När du trycker på knappen, när allt är igång, är denna process omedelbart stoppas. Knappen fungerar dvs som en "stänga av något som kör" växla, och när ingenting är igång, den fungerar som en "ljus på" switch.

Andra moduler:

Alla moduler kan startas och stoppas från ett webbgränssnitt. Konfigurationen av alla parametrar kan även styras där. Jag har genomfört en enkel gemensam Inställningshanteraren för alla moduler, så jag kan lägga till nya lätt (när jag hittar lite tid, jag kommer att skapa anpassade inställningssidor för alla moduler, som är mer bekväm att använda).

  • Ljudbok: modulen ljudbok läser en fil efter den andra från en viss katalog. Efter 10 minuters behandlingen vänder det ner volymen med 50%. När lyssnaren rör sig i sängen och en motion händelse avfyras, vänder upp och fortsätter en annan 10 minuter. När lyssnaren har somnat ingen motion händelse kommer att avskedas och ljudbok slutar spelas upp. Placera av motion senast lagras så att uppspelningen börjar vid en punkt där lyssnaren var definitivt vaken.
  • moodlight: det ändrar dess färg varje 10 +/-rand(5) sekunder blekning från färgerna, den totala ljusstyrkan kan konfigureras (färg vektorn är normaliserat för att ha ungefär samma ljusstyrka hela tiden).
  • ljus: tänds ljuset med en konfigurerbar färg. Denna modul startas när du trycker på toppen av skåpet.
Se Steg
Relaterade Ämnen

Hur man bygger en $10 cykel piska ljus: synas och vara säker

Välkommen,I detta Instructable kommer jag visa dig hur man bygger en cykel piska ljus från några ganska vanliga material.Denna idé kom till mig som jag arbetade på ett liknande projekt för en ATV piska ljus (som jag hoppas att lägga någon gång snart....

Blinky cykel en ljus system för cyklar

När befria för din pendla eller för nöje, att vara synliga på vägen är alltid en mardröm, som antingen är din cykel ljus system i dagsljus inte synlig, eller eftersom drivrutiner aldrig känt när du slår i natt villkor.Blinky Bike projektet är den ult...

Bygga en bambu cykel (och tänds det!)

Om du någonsin har velat bygga din egen cykelram, men inte har råd en framebuilding klass eller material att löda en ram, bygga en av bambu och kolfiber är ett bra och relativt billigt sätt att komma igång. I detta Instructable, jag kommer att förkla...

RGB cykel Rim ljus

Efter att ha fått en tech box från Instructables med massor av fantastiska godsaker och begäran om att göra något med det, ville jag verkligen göra något bra med den. Lådan innehöll några bra verktyg, men endast ett fåtal byggmaterial. Jag försökte (...

EL Wire cykel Rim ljus

Kolla in denna guide som visar hur jag gjorde min El wire cykel Rim ljus!Steg 1: IdénHej killar,Jag tänkte hur man gör min cykel fälgar belysta, skinande och cool under natten,och alla projekt jag kunde hitta var med hjälp av lysdioder.Så jag började...

Cykel Rim ljus

idén var enkel. Köpa en LED rep ljus, skär den upp, driva det med batterier, väva det i ekrarna och har du några söta rim ljus för din cykel. Men det var för lätt. Verkligheten var ett mycket mer komplicerat och det tog ett tag. Men resultatet är ett...

Spänning reglerad [5v] cykel Dynamo ljus & USB-laddare

även om det finns gott om "Dynamo cykel Light" instruktionerna på denna webbplats, jag tänkte jag skulle dela gruvor. Den stora nyheten, det finns inget motstånd i min krets. Den har en fast 5 volt output, så kan du åka så fort du vill utan att...

Blinkande cykel flaska ljus

när du cykla i mörkret, du vet att du ska ha en ljus någonstans så andra kan se dig, men ibland det extra bulk är bara för mycket. Det finns fick vara ett bättre sätt! Nu, utan vidare adjö, jag presenterar för er...Blinkande cykel flaska ljus!Inte ba...

Förbättrad högeffekts LED cykel huvudet ljus med integrerad kylfläns

efter skur i världen för rätt delar, är följande en uppdaterad version av min koppar montering baserad LED cykel huvudet ljus. Se den ursprungliga högeffekts LED cykel huvudet ljus med integrerad kylfläns instructable för detaljer om den tidigare ver...

Bygga en slumpmässig musik och ljus Generator och glimt bevis för Gud

skapa verkligt slumptal verkar vara omöjligt. Det är, men ganska lätt att använda en mikrokontroller att generera pseudo random nummer och sedan använda dem för att Visa ljud och olika färgade lampor. Medan musiken som genereras är inte precis Beetho...

Hur man bygger en Spooky arbetar vindbrygga med ljud och ljus

när vi först tänkt tanken på att lägga en vindbrygga till vår medeltida tema hemsökta skogen, vi tänkt en enkel träbro med lite spooky kedjor. Men jag är säker många av er vet, "enkla" idéer sällan förbli när kvar i medvetandet hos människor som...

Barnets ljud och ljus blomma

A toy för våra 3 månader gamla barn (jag är farfar) för att hålla hennes uppmärksamhet dras med hjälp av ljud och ljus inbäddade i en ikea-blomma. Detta var monterad på hennes basinet. Det använder en arduino decimillia mikrokontroller styrelse, bipo...

Kontrollera AC apparater via sms-använder Arduino fjärrstyra fläkt och ljus

Hej vänner, jag är Ostin. Jag ska förklara, hur man styr en fläkt och ljus med hjälp av arduino via sms.Låt oss slå på/av en fläkt och ljus genom sms-kommandon, faktiskt jag har för projektet för att styra en bevattning motor i jordbruksmark, bara fö...

Fontän med ljud och ljus system (Letourneau EPM-projektet)

Hej, mitt namn är Namkyoung Lee.Vårt team gjorde en fontän med ljud och ljus system.Det är en del av LeTourneau university EPM lab projekt.Denna fontän drivs av fristående batteri och har 2 arduino unos; en är för ljus systemet och den andra för vatt...

"Vik" en icke-hopfällbar cykel och undvika Airline avgifter

"Veck" någon cykel och gömma det i en påse i några minuter. Undvik regler för flygbolag och tåg och cykel avgifter.Det tar cirka fem minuter när du lär dig hur. Verkligen. Det går snabbt.Här är Mirko Silvestrini och hans cykel, redo att rida Amt...

Artemis & Apollo: Dans med Arduino och ljus upptäckt

enligt den antika grekiska mytologin, Artemis och Apollon var odödliga tvillingar födda länge sedan på en bergig ö i Egeiska havet. Artemis, hennes jakt båge redo och fleet fötter stoppning skogsmarken, regerade som gudinna av månen. Hennes tvillingb...

Snabb Tips #3 - snabb och enkel rörelse aktiverat cykel chef ljus

Min El-cykel ledde huvudet ljus inte hade arbetat sedan jag fick den. Så... vad göra vad göra...?Jag bestämde mig snarare än avfall strålkastare eftersom den ser bra ut på cykeln, tills jag kan fixa det på rätt sätt, jag var tvungen att tillfälligt t...

Arduino cykel larm och ljus

detta larm är ett bra sätt att varna dig om någon bråkar med din cykel. Jag hade en cykel stulen ett tag tillbaka och beslutade att det måste finnas ett bättre sätt att hålla min cykel säkert. När jag sökte för cykel larm, var allt jag kunde hitta la...

Cykel LED ljus

I denna kompatibel använder jag ett tvättbart batteripaket och några lysdioder för att sy en mjuk krets i manschetten för rida din cykel på natten.Steg 1: Gör en skiss av din kretsRita i batteriet med (+) och (-) hål märkt och lägga till en rad av ly...