Inhoudsopgave:

Raspberry Pi Smart Scale - Ajarnpa
Raspberry Pi Smart Scale - Ajarnpa

Video: Raspberry Pi Smart Scale - Ajarnpa

Video: Raspberry Pi Smart Scale - Ajarnpa
Video: Raspberry Pi Smart Scale | GIT TECH'D 2024, Juli-
Anonim
Image
Image

Ben je het zat om elke ochtend naar die saaie, oude, slechte nieuwsweegschaal te staren? Degene die je vaak "ik haat je" tegen je zegt, elke keer dat je erop stapt. Waarom heeft niemand een weegschaal gemaakt die echt leuk of motiverend is om te gebruiken? Het is tijd om een weegschaal te maken die niet alleen slim is, maar ook een beetje meer persoonlijkheid heeft om je dag op te fleuren. We gaan onze eigen hackbare weegschaal voor gewichtsregistratie en sms-berichten bouwen die wordt geleverd met een ingebouwd gevoel voor humor.

Dit is een leuk, eenvoudig project dat een Wii-balansbord, een Raspberry Pi en een online data-analyseplatform combineert om een web-verbonden weegschaal te creëren die wordt bestuurd door een Python-script dat je kunt hacken.

Projectniveau: Beginner Geschatte tijd om te voltooien: 20 minuten Fun factor: Onmetelijk

In deze stapsgewijze zelfstudie leert u:

  • sluit een Wii-balanceerbord aan op een Raspberry Pi via bluetooth voer een Python-script uit dat je gewicht meet wanneer je op het balansbord stapt
  • gebruik een Raspberry Pi om uw gewicht naar een cloudservice te streamen (initiële status)
  • stel een sms-melding in elke keer dat je jezelf weegt
  • bouw een dashboard voor gewichtsregistratie waartoe u toegang hebt in uw webbrowser

Stap 1: Apparatuur

Wii Balance Board-schaal
Wii Balance Board-schaal

Hier is een lijst van alle apparatuur die we in deze tutorial zullen gebruiken met links naar waar je elk item kunt kopen.

  • Raspberry Pi 3 met SD-kaart en voeding (https://init.st/psuufmj)
  • Wii Balance Board (https://init.st/qg4ynjl)
  • Wii Fit oplaadbare batterij (https://init.st/iyypz2i)
  • 3/8" viltkussens (https://init.st/8gywmjj)
  • Potlood (ik geef je geen link naar waar je een potlood kunt kopen … je zou er een moeten hebben)

Let op: Als je een Raspberry Pi 1 of 2 hebt, heb je een bluetooth-adapter nodig (https://init.st/7y3bcoe)

Stap 2: Wii Balance Board-weegschaal

Waarom een Wii Balance Board? Het blijkt een hele mooie, duurzame weegschaal te zijn met bluetooth-connectiviteit. Dit stelt ons in staat om het aan te sluiten op een single-board computer (Raspberry Pi) om je gewicht in een Python-script te lezen en die metingen naar een online dataservice te sturen om coole dingen te doen. Bovendien is de kans groot dat jij of iemand die je kent er al een heeft die gewoon stof staat te verzamelen.

We zullen een paar eenvoudige aanpassingen moeten doen aan ons Wii Balance Board om dit project echt praktisch en gemakkelijk te maken.

Stap 3: Bluetooth instellen

De Raspberry Pi 3 wordt geleverd met ingebouwde bluetooth, alles wat we nodig hebben om te communiceren met het Wii Balance Board. Als je een Raspberry Pi 1 of 2 hebt, zullen we een van onze USB-poorten moeten gebruiken om een adapter aan te sluiten.

Schakel je Pi in (ik neem aan dat je Raspbian al hebt geïnstalleerd en het start op) en ga naar je Raspberry Pi-terminalvenster. U kunt het adres van uw bluetooth-dongle zien met de opdracht "hcitool dev":

$ hcitool devDevices:hci0 00:1A:7D:DA:71:13

Installeer de bluetooth-modules die we gaan gebruiken in onze Python-scripts:

$ sudo apt-get install python-bluetooth

Nadat de installatie is voltooid, zijn we klaar om verbinding te maken en te communiceren met het Wii Balance Board. We zullen ons bord niet permanent aan onze Pi koppelen zoals we doen met de meeste van onze Bluetooth-apparaten. Het Wii Balance Board was nooit bedoeld om te worden gekoppeld aan iets anders dan een Wii, en permanent koppelen bleek een behoorlijk verwarrende uitdaging te zijn. Het koppelen gebeurt elke keer dat we ons Python-script uitvoeren.

Stap 4: De schaal lezen

Het is tijd om ons Wii Balance Board aan te sluiten op onze Raspberry Pi. We zullen dit doen door een versie van het Gr8W8Upd8M8.py-script van Stavros Korokitakis te wijzigen (https://github.com/skorokitakis/gr8w8upd8m8). Het python-script dat we voor deze stap zullen gebruiken, bevindt zich hier. Je kunt de inhoud van dit bestand kopiëren naar een bestand dat je op je Raspberry Pi maakt of je kunt alle python-bestanden klonen die we voor dit hele project zullen gebruiken. Laten we dat laatste doen. Typ de volgende opdrachten in een terminal op je Raspberry Pi:

$ cd ~$ git clone $ git clone https:github.com/initialstate/smart-scale.git cloning in 'smart-scale'… remote: Objecten tellen: 14, klaar. afstandsbediening: Objecten comprimeren: 100% (12/12), klaar. remote: Totaal 14 (delta 1), hergebruikt 8 (delta 0), pack-hergebruikt 0 Objecten uitpakken: 100% (14/14), klaar. Verbinding controleren… klaar.

klonen naar 'smart-scale'… remote: Objecten tellen: 14, klaar. afstandsbediening: Objecten comprimeren: 100% (12/12), klaar. remote: Totaal 14 (delta 1), hergebruikt 8 (delta 0), pack-hergebruikt 0 Objecten uitpakken: 100% (14/14), klaar. Verbinding controleren… klaar.

Je zou twee python-bestanden moeten zien in de nieuwe smart-scale directory - smartscale.py en wiiboard_test.py.

$ cd smart-scale$ lsREADME.md smartscale.py wiiboard_test.py

Voer het wiiboard_test.py-script uit om de communicatie te testen en gewichtsmetingen te doen van het Wii Balance Board:

$ sudo python wiiboard_test.py

U krijgt het volgende antwoord te zien:

Bord ontdekken…Druk nu op de rode synchronisatieknop op het bord

Verwijder het batterijklepje onder het bord om de rode synchronisatieknop te vinden. Zorg ervoor dat u binnen een paar seconden na het uitvoeren van het script op de knop drukt, anders treedt er een time-out op. Als dit eenmaal is gelukt, ziet u iets dat lijkt op het volgende:

Wiiboard gevonden op adres 00:23:CC:2E:E1:44Trying to connect…Verbonden met Wiiboard op adres 00:23:CC:2E:E1:44Wiiboard aangeslotenACK naar data schrijven ontvangen84.9185297 lbs84.8826412 lbs84.9275927 lbs

Het wiiboard_test.py-script neemt het aantal gewichtsmetingen gespecificeerd op regel 10 en geeft het gemiddelde weer:

# --------- Gebruikersinstellingen ---------WEIGHT_SAMPLES = 500# ------------------------- --------

U kunt met dit getal spelen door de waarde te wijzigen en het script opnieuw uit te voeren om de variatie in het gemeten gewicht en de benodigde tijd voor elke meting te zien. Weeg jezelf, weeg je hond, weeg wat dan ook en kijk of de metingen kloppen. Druk op CTRL+C om het script te stoppen.

Je hebt nu je Wii Balance Board met succes omgezet in een Raspberry Pi-aangesloten weegschaal. Laten we er nu een coole schaal van maken.

Stap 5: Hardware-tweaks

Hardware-aanpassingen
Hardware-aanpassingen

Nintendo ging ervan uit dat je je Wii Balance Board altijd van stroom zou voorzien met vier AA-batterijen en dat er geen wisselstroomadapter werd meegeleverd. Alleen batterijvoeding hebben zou onhandig zijn omdat we ons Wii-bord niet permanent via bluetooth aan onze Pi kunnen koppelen. We moeten het synchroniseren en het vervolgens laten synchroniseren zonder de batterijen leeg te maken, zodat we eenvoudig op de weegschaal kunnen stappen en wegen. Gelukkig zijn er verschillende externe adapters gemaakt voor het Wii Balance Board die we kunnen gebruiken om constant stroom te leveren via een stopcontact. Vervang de batterijen door een batterijpak en steek de AC-adapter in een stopcontact.

Het moeten koppelen van het Wii Balance Board en Raspberry Pi elke keer dat we ons Python-script uitvoeren, levert nog een ander ongemak op vanwege de locatie van de synchronisatieknop. De synchronisatieknop bevindt zich aan de onderkant van het Wii-bord, wat betekent dat we hem elke keer dat we moeten synchroniseren, moeten omdraaien. We kunnen dit oplossen door een kleine hendel te maken met een potlood en drie 3/8" viltkussentjes, zoals hierboven weergegeven. Het oplaadbare batterijpakket stelt de synchronisatieknop bloot aan de onderkant van het bord. Plak een potlood (of iets dergelijks) vast dat overspant van de synchronisatieknop naar de buitenkant van het bord. Stapel drie 3/8" viltkussentjes (of iets dergelijks) in het midden van het potlood om een stationaire spil te creëren. Pas op dat u niet te veel van het potlood uit het bord haalt, omdat u niet wilt dat iemand het per ongeluk eruit schopt. Draai het bord om en je kunt op de synchronisatieknop drukken door simpelweg op de hendel te drukken. Een beetje een hack maar effectief.

Afhankelijk van hoe je je Wii-bord opbergt, wil je misschien de rubberen grippads van de voetjes van het bord verwijderen (de pads zijn gewoon stickers die je kunt verwijderen). 3/8 viltkussens kunnen op de voeten van het bord worden geplaatst om gemakkelijk te schuiven.

Stap 6: Oorspronkelijke staat

Oorspronkelijke toestand
Oorspronkelijke toestand

We willen ons gewicht / onze gegevens naar een cloudservice streamen en die service onze gegevens laten omzetten in een mooi dashboard dat we kunnen openen vanaf onze laptop of mobiele apparaat. Onze gegevens hebben een bestemming nodig. We gebruiken de beginstatus als die bestemming.

Stap 1: Registreer voor Initial State AccountGa naar https://iot.app.initialstate.com en maak een nieuw account aan.

Stap 2: Installeer de ISStreamerInstalleer de Initial State Python-module op uw Pi: Voer de volgende opdracht uit bij een opdrachtprompt (vergeet niet eerst SSH naar uw Pi te sturen):

$ cd /home/pi/$ \curl -sSL https://get.initialstate.com/python -o - | sudo bash

Stap 3: Maak wat Automagic Na stap 2 ziet u iets dat lijkt op de volgende uitvoer op het scherm:

pi@raspberrypi ~ $ \curl -sSL https://get.initialstate.com/python -o - | sudo bashPassword: Begin ISStreamer Python Eenvoudige installatie! Dit kan een paar minuten duren om te installeren, neem wat koffie:) Maar vergeet niet terug te komen, ik heb later vragen!

Easy_install gevonden: setuptools 1.1.6

Gevonden pip: pip 1.5.6 van /Bibliotheek/Python/2.7/site-packages/pip-1.5.6- py2.7.egg (python 2.7) pip hoofdversie: 1 pip kleine versie: 5 ISStreamer gevonden, bijwerken… Vereiste al up-to-date: ISStreamer in /Library/Python/2.7/site-packages Opschonen… Wil je automatisch een voorbeeldscript krijgen? [j/N]

(de uitvoer kan anders zijn en langer duren als u de Initial State Python-streamingmodule nog nooit eerder hebt geïnstalleerd)

Wanneer u wordt gevraagd om automatisch een voorbeeldscript op te halen, typt u y. Hiermee wordt een testscript gemaakt dat we kunnen uitvoeren om ervoor te zorgen dat we gegevens vanaf onze Pi naar de beginstatus kunnen streamen. U wordt gevraagd:

Waar wil je het voorbeeld opslaan? [standaard:./is_example.py]:

U kunt een aangepast lokaal pad typen of op Enter drukken om de standaard te accepteren. U wordt gevraagd om uw gebruikersnaam en wachtwoord die u zojuist hebt gemaakt toen u uw Initial State-account registreerde. Voer beide in en de installatie wordt voltooid.

Stap 4: Toegangssleutels

Laten we eens kijken naar het voorbeeldscript dat is gemaakt.

$ nano is_voorbeeld.py

Op regel 15 ziet u een regel die begint met streamer = Streamer(bucket_ …. Deze regel maakt een nieuwe gegevensbucket aan met de naam "Python Stream Voorbeeld" en is gekoppeld aan uw account. Deze koppeling vindt plaats vanwege de access_key="…". parameter op diezelfde regel. Die lange reeks letters en cijfers is de toegangssleutel van uw Initial State-account. Als u in uw webbrowser naar uw Initial State-account gaat, klikt u op uw gebruikersnaam in de rechterbovenhoek en gaat u naar "Mijn instellingen", vindt u diezelfde toegangssleutel onderaan de pagina onder “Toegangssleutels streamen”.

Elke keer dat u een gegevensstroom maakt, leidt die toegangssleutel die gegevensstroom naar uw account (deel uw sleutel dus met niemand).

Stap 5: Voer het voorbeeld uit

Voer het testscript uit om er zeker van te zijn dat we een gegevensstroom naar uw Initial State-account kunnen maken. Voer het volgende uit:

$ python is_voorbeeld.py

Stap 6: Winst

Ga terug naar uw Initial State-account in uw webbrowser. Een nieuwe data-bucket genaamd "Python Stream-voorbeeld" zou aan de linkerkant in uw logplank moeten verschijnen (mogelijk moet u de pagina vernieuwen). U kunt de gegevens in Tiles bekijken om dezelfde gegevens in dashboardvorm te zien.

Stap 7: Eindscript

Ervan uitgaande dat je de opdracht "git clone https://github.com/InitialState/smart-scale.git" in deel 2 hebt uitgevoerd, heet het laatste script dat alles samenbrengt smartscale.py in je ~/smart-scale directory. (https://github.com/InitialState/smart-scale/blob/master/smartscale.py)

Er moeten een paar instellingen in het script worden ingesteld voordat u het kunt uitvoeren. Open smartscale.py in uw favoriete teksteditor zoals nano.

$ cd ~$ cd smart-scale$ nano smartscale.py

Bovenaan dit bestand bevindt zich een sectie Gebruikersinstellingen.

# --------- Gebruikersinstellingen ---------BUCKET_NAME = ":apple: Mijn gewichtsgeschiedenis"BUCKET_KEY = "weight11"ACCESS_KEY = "PLAATS UW EERSTE TOEGANGSSLEUTEL HIER"METRIC_UNITS = FalseWEIGHT_SAMPLES = 500THROWAWAY_SAMPLES = 100WEIGHT_HISTORY = 7# ---------------------------------

  • BUCKET_NAME stelt de naam in van de gegevensbucket voor de beginstatus waarnaar uw gewicht/gegevens worden gestreamd. Dit kan hier worden ingesteld en later in de gebruikersinterface worden gewijzigd.
  • BUCKET_KEY is de unieke bucket-ID die aangeeft waar uw gegevens naartoe worden gestreamd. Als u een andere bucket/dashboard wilt maken, gebruikt u hier een andere identifier (*opmerking, als u een bucket archiveert, kunt u de sleutel niet opnieuw gebruiken in een nieuwe bucket).
  • ACCESS_KEY is uw accountsleutel voor de oorspronkelijke staat. Als u uw ACCESS_KEY niet in dit veld invoert, worden uw gegevens niet weergegeven in uw account.
  • METRIC_UNITS stelt u in staat uw gewicht in kg te specificeren indien ingesteld op True of lb indien ingesteld op False.
  • WEIGHT_SAMPLES geeft aan hoeveel metingen er worden genomen en gemiddeld om uw werkelijke gewicht te krijgen. 500 metingen duren ongeveer 4-5 seconden en geven redelijk nauwkeurige resultaten.
  • THROWAWAY_SAMPLES specificeert het aantal samples dat wordt weggegooid wanneer je voor het eerst op het bord stapt. Dit voorkomt dat de eerste stappen en verschuivingen de uiteindelijke meting afwerpen. Dit moet altijd veel minder zijn dan WEIGHT_SAMPLES.
  • WEIGHT_HISTORY stelt het aantal metingen in voordat een extra update wordt verzonden. Alleen metingen die twee uur of meer uit elkaar zijn genomen, tellen mee voor de geschiedenis.

Nadat u elke parameter in deze sectie hebt opgegeven en uw wijzigingen hebt opgeslagen, bent u klaar om het definitieve script uit te voeren. Laten we, voordat we het script uitvoeren, doornemen wat het gaat doen.

  • Aan het begin van het script wordt je gevraagd om je Wii Balance Board te koppelen met je Raspberry Pi. Gebruik de hendel die je samen hebt gehackt in deel 2: Hardware Tweaks om op de synchronisatieknop te drukken wanneer daarom wordt gevraagd.
  • Zodra het script loopt, stap je op het Wii-bord om je gewicht te meten. Na 4-5 seconden wordt uw gewicht automatisch naar uw Initial State-account gestuurd.
  • Nadat we sms-meldingen hebben ingesteld (in een paar stappen), ontvang je kort na je meting een sms-bericht.

Voer het script uit om de magie te starten.

$ sudo python smartscale.py

Stap 8: Dashboard

Dashboard
Dashboard

Ga naar uw Initial State-account en klik op de nieuwe databucket met de naam die overeenkomt met de parameter BUCKET_NAME (d.w.z. Mijn gewichtsgeschiedenis). Klik op Tegels om uw gewichtsgeschiedenisdashboard te bekijken. De eerste keer dat u uw gegevens in Tegels bekijkt, zou u drie tegels moeten zien - Update, Gewichtsdatum en Gewicht (lb). U kunt uw dashboard aanpassen door de afmetingen en verplaatsing van tegels te wijzigen, weergavetypen te wijzigen en zelfs tegels toe te voegen. Dit dashboard geeft u de mogelijkheid om uw gewichtsgeschiedenis in één oogopslag te zien. Het is mobielvriendelijk en je kunt het zelfs delen met andere mensen.

U kunt een achtergrondafbeelding aan uw dashboard toevoegen om uw gegevens meer persoonlijkheid en context te geven.

Stap 9: SMS

sms
sms

Laten we een sms-waarschuwing maken wanneer de weegschaal een gewichtsmeting uitvoert. Zorg ervoor dat de gegevensbucket voor uw gewichtsgeschiedenis is geladen.

  1. Klik op de instellingen van de bucket (onder de naam) in het venster van de databucket.
  2. Klik op het tabblad Triggers.
  3. Selecteer de gegevensstroom om op te activeren. U kunt de vervolgkeuzelijst gebruiken om uit bestaande streams te selecteren zodra een databucket is geladen, of u kunt de streamnaam/sleutel handmatig invoeren. In het voorbeeldscherm hierboven is "Update" geselecteerd.
  4. Selecteer de voorwaardelijke operator, in dit geval 'match'.
  5. Selecteer de triggerwaarde die een actie activeert (typ handmatig de gewenste waarde in). Typ lb als u geen metrische eenheden gebruikt of typ kg als u metrische eenheden gebruikt. Telkens wanneer de stream "Update" "lb" (of "kg") bevat, ontvangt u een sms-melding.
  6. Klik op de knop '+' om de triggervoorwaarde toe te voegen.
  7. Voer uw e-mailadres of telefoonnummer in het veld "Contacten om op de hoogte te stellen" in.
  8. Klik op de knop '+' om de contactgegevens toe te voegen.
  9. Voer een verificatiecode in als u een nieuw telefoonnummer toevoegt om de installatie te voltooien.
  10. Klik onderaan op de knop Gereed om terug te keren naar het hoofdscherm. Je trigger is nu live en wordt geactiveerd wanneer aan de voorwaarde is voldaan.

Zodra de installatie is voltooid, ontvang je elke keer dat je jezelf weegt een sms met daarin je gewicht, hoeveel je gewicht is veranderd sinds de laatste meting, en een willekeurige grap / belediging / compliment.

Stap 10: Conclusie

Er zijn onbeperkte mogelijkheden om voort te bouwen op wat je nu hebt gemaakt. Hier zijn enkele ideeën voor dit project:

  • U kunt gegevens uit andere bronnen streamen naar hetzelfde dashboard voor gewichtsgeschiedenis (info) om uw eigen persoonlijke gezondheidsdashboard te maken.
  • U kunt de grappen in de functies messageWeighFirst, messageWeighLess, messageWeighMore en messageWeighSame aanpassen aan uw eigen gevoel voor humor.
  • Je kunt de grappen veranderen in praktische berichten of ze verwijderen en de weegschaalcode gebruiken om het gewicht van iets belangrijkers dan je eigen lichaamsgewicht bij te houden.
  • Op dezelfde manier kun je je eigen slimme bier-/wijnkoelkast maken. Hier is al een geweldige tutorial voor gemaakt.

Hack weg en laat me weten of deze tutorial je inspireert om iets geweldigs te maken.

Aanbevolen: