Elektronisk våg, Raspberry Pi och HX711

Raspberry Pi kan göra mycket, men finns det något den inte vågar, eller vägrar? Nej, det gör det nog inte. Hur som helst ska vi här gå igenom hur man kan Pi-bestycka en elektronisk köksvåg!

Hur fungerar en elektronisk våg?

Lastcell, med fästplatta för vågplattan. Som synes på den mindre bilden är maxvikt 5kgEn elektronisk våg består i princip av ett variabelt motstånd (en ”lastcell”) och en ADC (Analog-till-digital-konverterare) som omvandlar returströmmen till ett digitalt värde.
Lastcellen sitter under själva ”vågplattan” och kan se ut på lite olika sätt. Maxvikten varierar också, och gissningsvis även hur exakta mätvärden man kan få ut.
Jag köpte en billig köksvåg jag tänkte pimpa med en Raspberry Pi med skärm, och så här ser den ut inuti:

HX711

Nu vill vi kunna läsa av lastcellen från exempelvis Raspberry Pi. För detta behöver vi en passande ADC, anpassad för just lastceller. Valet faller på HX711, som är billig och fungerar mycket bra. På ena sidan finns anslutningar för de fyra kablarna som sticker ut från lastcellen, och på andra sidan signalanslutningar som i sin tur kopplas till den enhet som ska läsa av värdet (seriellt).

Att ansluta lastcellen till HX711 görs enligt anvisningarna på denna Github-sida, som också går igenom hur den i sin tur ska anslutas till Raspberry Pi. Jag kopplade min enligt ett annat diagram, och då blev det lite tokigt vid mjukvarukonfigurationen, men mer om det senare.

Koppla till Raspberry Pi

VCC till 5V, GND till jord/Ground. Dessa kan koppla enligt diagrammet, eller använda andra, motsvarande pinnar på GPIOn. DT (data) och SCK (klocka) kopplas till BCM 5 och BCM 6, enligt Github-exemplet. Eftersom jag hade en GPIO-skärm ovanpå GPIOn fick jag säkerställa att det inte fanns några ”kollisioner” på vilka pinnar som används, men det gjorde det lyckligtvis inte. Min kollega Åsa hjälpte mig att löda på några kablar på undersidan av Pi:n, till vilka jag kan ansluta HX711:an.

Jag fick kapa upp ett större hål i vågens hölje för den nya skärmen, och som synes på bilden har jag fäst denna (och en 3D-utskriven ram som täcker såghålet) med smältlim från undersidan.

Därefter gjorde jag ett hål i ”mittenstycket” för en USB-kabel till spänningsmatning och monterade ihop allting. Tyvärr är Pi+skärm lite för ”tjocka” för att få ihop chassit helt, men man kan inte få allt 😉

Mjukvarukonfiguration

Precis som det rekommenderas på Github-repot bör man basera sin kod på spikeless_example.py för att få så vettig data som möjligt. Den konfiguration man behöver göra för att få rätt vikt är att räkna ut sin ”Reference unit”. Detta görs genom att sätta den till ”1” och köra koden, och räkna ut ett medelvärde på det viktvärde som fås utan vikt, samt med 1 kg vikt på vågplattan. Sen tar man det större värdet minus det mindre för att få fram differensen, och delar detta värde med 1000. I mitt fall hade jag också råkat ha kablarna från vågen kopplade på ett annat sätt än det som angavs på Github-repot, så jag fick ett negativt värde. Det löste jag genom att göra min ”Reference Unit” negativ, istället för att löda om kablarna.

Slutligen la jag in skriptet på autostart för varje ny terminal, och ändrade utskriften för att hamna i nedre högra hörnet. It’s alive!

I nuläget har vågen alltså ett helt CLI-baserat interface, trots att skärmen har touch. Detta kanske jag får lösa i framtiden på något häftigt sätt 🙂

Tare-funktionen går därmed heller inte att använda, utan man får starta om vågen för att nollställa värdet. Och av någon anledning verkar det registrerade värdet hela tiden långsamt bli lägre, så räkna med många omstarter om du inte löser Tare-funktionen 😛

Det var allt för denna gång, vill man ha min exempelkod kan det gå att lösa men jag har inte ändrat så mycket jämfört med Github-koden. Mycket nöje! 😀

Kommentera