Stap 9: Software
Ik gebruikte een steack "betekent" (mongodb, express.js, angular js en knooppunt js) alles te implementeren in software.
U vindt de huidige (echt, echt Alfa) source code op github
Er zijn verschillende redenen waarom ik heb geprobeerd deze combinatie:
- Ik wilde het proberen in een echte projetc
- Het is dezelfde taal in frontend/backend/db
- JavaScript is vrij goed in snelle prototyping
Concepten:
We hebben het probleem van de gedeelde bronnen op een ingesloten project als dit (geluid en licht in ons geval). Dus alleen een proces de bron kan benaderen op een bepaald moment, aangezien we hebben meerdere bewerkingsmodi (licht, licht van de stemming, alarm, audioboek modus), kunnen deze diensten blokkeren elkaar. Dus eenvoudig te houden alles heb ik voor een zeer eenvoudige strategie besloten: wanneer een proces wil toegang tot een bron, een ander eventueel momenteel lopende proces is gestopt, zodat de bron opnieuw kan worden gebruikt door het nieuwe proces. In ons geval, dit is wellicht ook een van de beste oplossingen: geen van de processen echt nodig een resource + de enige keer dat geactiveerde proces het alarm is: alarm altijd de resource moet krijgen als het begint, ook wanneer iets anders wordt uitgevoerd. Alle andere processen zijn gebruiker geactiveerd (en wij hebben slechts één gebruiker), zodat we waarschijnlijk willen dat het proces om te eisen van de resource.
Interfacing de LEDs: pwm met Pi-blaster
De raspberry Pi hoeft meestal alleen 1 of 2 pwm-poorten. Voor dit project echter nodig ik ten minste 4 van hen dus ik de pi-blaster -project gebruikte te rijden meerdere poorten met pwm. Ik had het probleem van flikkeren tijdens het dimmen van LEDs, dus ik moest overschakelen naar een eerdere versie die niet het probleem. Bovendien ik moest veranderen de bronnen voor het gebruik van pcm-modus standaard, otherwhise pi-blaster maakt gebruik van de klankmodule tot pwm, wat resulteert in echt walgelijk geluid uit de luidsprekers. Bovendien moest ik aanpassen van de havens: poort 21 werd omgedoopt tot 27 in de nieuwste raspberry Pi versie.
Logboekregistratie
Zoals uiteengezet in de intro besloot ik in te loggen alle de sensor-waardes mongodb hen later bekijken en analyseren. Er is een grote bibliotheek voor interfacing met de mcp3008 -chip voor knooppunt. De vermeldingen in het beveiligingslogboek kunnen worden opgevraagd met een REST api. Ik gebruikte op de frontend flot, een bibliotheek jquery plotten grafieken.
Logboekregistratie van de versnellingsmeters was een beetje moeilijker, omdat ik eigenlijk melden wilde "Is er beweging" niet "wat is de richting van de beweging". Daarom ik continu geregistreerd het absolute verschil tussen 2 metingen en bouwde een glijdende gemiddelde over 100 monsters (1 proeven elke milliseconde) leidt tot 10 metingen per seconde. Wanneer de gemiddelde een bepaalde threashold overschrijdt (empirisch bepaald) een gebeurtenis wordt gestart, zodat de alarm-scheduler en andere modules kunnen volgens acties uitvoeren. Als het monster is frequentie voor verkeer vrij hoog, dat ik inloggen alleen waarden wanneer zij een bepaald bedrag van de laatste opgeslagen waarde veranderen. otherwhise het zou teveel I/O voor de framboos alles vertragen (plus duurt eeuwig om de gegevens weer te geven).
Alarmen
Alarmen worden ook opgeslagen in mongodb en de knooppunt-cron bibliotheek wordt gebruikt om ze te starten. Ze kunnen worden bewerkt via een REST api. Op de front-end-gebruikte ik een Verloopkiezer en een geluid-picker voor het configureren van de zonsopgang-licht en de geluiden van de stemming.
Om een voorvertoning van de geselecteerde kleur zonder al te veel vertraging, voegde ik socket ondersteuning te garanderen een snelle communicatie bij het afhalen van de kleurwaarden. bij het bewerken van de lichte helling, is altijd de geselecteerde kleur weergegeven op de weggup. Het geluid/licht verloop kan ook volledig prospectieve en klinkt allemaal apart kunnen worden gespeeld. Het volume van elk geluid kunnen aangepaste apart, ook als het moet worden herhaald of niet.
De geluidsbestanden worden gelezen uit een bepaalde map op de raspberry Pi, die wordt gedeeld via samba.
Om de slaap cyclus functionaliteit de alarm-scheduler luistert naar de gebeurtenis van de beweging van de logger en controleert als het volgende licht slapen fase binnen een bepaalde termijn tussen wake-up tijd en een gedefinieerde tijd daarvoor ligt te plannen van het alarm. Het belangrijkste probleem is te voorspellen het volgende licht slapen fase. Op dit moment gebruik ik een constante duur van 3 uur per slaapcyclus. Wanneer heb ik zal meer verkeer gegevens verzameld zal ik dit dienovereenkomstig aan te passen of vinden van een andere methode voor het voorspellen van de volgende fase van de lichte slaap (afhankelijk van de verzamelde gegevens).
Geluid afspelen
Om het geluid afspelen zijn mplayer processen voortgebracht op de achtergrond in slave-modus, zodat zij gemakkelijk kunnen worden bediend vanuit knooppunt. Ik zal eventueel veranderen naar een andere speler, als de hardware-eisen, en derhalve de vertragingen zijn vrij hoog met mplayer.
De enkele knoop interface
Bij het indrukken van de bovenkant van de behuizing, wordt de interne knop ingedrukt. Deze gebeurtenis veroorzaakt de weggup inschakelen van fel licht, die fungeert als een lamp. Bij het indrukken van de knop, terwijl wordt uitgevoerd, wordt dit proces onmiddellijk gestopt. Dat wil zeggen de knop fungeert als een "shut off iets dat wordt uitgevoerd" switch en wanneer niets wordt uitgevoerd, het als "lichten op" schakelaar.
Andere modules:
Alle modules kunnen worden gestart en gestopt uit een webinterface. De configuratie van alle parameters kan er ook worden gecontroleerd. Ik heb een eenvoudige gemeenschappelijke Instellingenbeheer voor alle modules, geïmplementeerd zodat ik kan het toevoegen van nieuwe gemakkelijk (wanneer ik wat tijd hebt gevonden, ik maak pagina's met aangepaste instellingen voor alle modules, die meer comfortabel te gebruiken).
- Audioboek: de module audioboek leest een bestand na de andere uit een bepaalde directory. Na 10 minuten van lezing blijkt het volume lager met 50%. Wanneer de luisteraar in het bed beweegt en een motie-gebeurtenis wordt gestart, wordt het volume opduikt en blijft een ander 10 minuten. Wanneer de luisteraar in slaap is gevallen geen beweging evenement zal worden ontslagen en de audioboek stopt met afspelen. De positie van de laatste keer dat beweging wordt opgeslagen, zodat het afspelen begint op een punt waar de luisteraar zeker wakker was.
- moodlight: het verandert van kleur elk 10 +/-rand(5) seconden van de basiskleur op de kleur vervagen, de totale helderheid kan worden geconfigureerd (de kleur vector is genormaliseerd om ongeveer dezelfde helderheid hele tijd).
- licht: Hiermee schakelt u het licht met een configureerbare kleur. In deze module wordt gestart wanneer u op de top van de behuizing drukt.