Weegschaal (HX711)

Omdat de meeste weegschalen digitaal werken, is het natuurlijk ook mogelijk om gewichten te meten met Raspberry Pi. Het enige dat we hiervoor nodig hebben is een zogenaamde load cel, een interface (HW711), een Raspberry Pi en een Python script. Hoe het werkt leg ik in deze tutorial uit.

Wat heb je nodig?
Het belangrijkste onderdeel om jouw eigen weegschaal te bouwen, is de ‘load cel’, een metalen staaf met een gat in het midden (zie afbeelding hierboven). Deze is beschikbaar voor verschillende gewichtsklassen (tot 100, 200 of 500 gram, 1 kg, 5 kg, of 50 kg, etc.). Hoewel sommige een andere vorm hebben, zijn ze allemaal voorzien van vier kabels.

Afbeeldingen: Een load cel en een strain gauge

Hoe werkt een load cel
De load cel is gebaseerd op een Wheatstone-brug en twee zgn. strain gauges. Vervolgens hebben we een circuit nodig die de meetwaarden omzet om een sensor met hoge precisie te verkrijgen.

Vin is de voeding van de brug (V = Volts) en Vout het uitgangssignaal (mV = millivolts).

Afbeelding: de Wheatstone-brug

Met deze opstelling kunnen zeer kleine veranderingen in de weerstand AR worden gemeten, die optreedt in de strain gauges (rekstrook) die in de armen van de brug zijn geplaatst: R1, R2, R3 en R4
 
Strain gauges zijn vervormingssensoren die zijn vastgelijmd aan het elastische lichaam van de weegcellen. Een inspanning die de gauge (meter) vervormt zal een verandering van AR veroorzaken in de weerstandswaarde Rg. Deze kleine weerstandsverandering op elke meter wordt vergroot door de onbalans die geproduceerd wordt in de Wheatstone-brug. Hieruit volgt een uitgangssignaal dat evenredig is aan de uitgeoefende kracht. Wanneer de load-cel geen belasting heeft, staan ​​de vier meters in rust en hebben dezelfde ohmse waarde, de nominale waarde van de spanningsmeter Rg: 

R1 = R2 = R3 = R4 = Rg 

Dan is het uitgangssignaal Vout, het verschil tussen Vout+ en Vout, is 0 Volt (nul van de load cel). Bij het belasten van de load cel veranderen de rekstrookjes de weerstandswaarde in een zeer kleine verhouding AR: 

R1 = Rg – AR
R2 = Rg + AR
R3 = Rg – AR
R4 = Rg + AR

We zullen dan een uitgangssignaal Vout verkrijgen, evenredig met de weerstandsvariatie van de rekstrookjes. Dit is op hetzelfde moment evenredig met de vervorming van het elastische lichaam van de cel, die evenredig is aan de uitgeoefende kracht. Daardoor verkrijgt een krachtomzetter met een elektrisch uitgangssignaal evenredig aan de uitgeoefende kracht. 
 
Opgemerkt moet worden dat dit resistieve (= drukkracht) circuit ook evenredig is met de ingangsspanningstoevoer, dus de output van de load cel wordt meestal uitgedrukt in mV / V, millivolts per volt (voeding).

HX711
Om de waarden van de verschillende rekstrookjes uit te lezen, is ook de HX711-weegsensor versterker vereist. Deze versterker is verkrijgbaar in meerdere varianten met kleine verschillen, maar zijn theoretisch gezien allemaal gelijk aan elkaar.

Afbeelding: HX711 weegsensor versterkers

Assemblage van de weegschaal
Voordat de load cel wordt aangesloten op de HX711-weegsensor versterker, moet deze op de twee platen worden gemonteerd (zie afbeeldingen).

Afbeelding: Mijn weegschaal
Afbeelding: Zijaanzicht van mijn weegschaal

Hierboven zie je het zijaanzicht van de weegschaal nadat beide borden zijn gemonteerd. Nu de constructie voltooid is, kunnen we naar de HX711-weegsensor versterker gaan. De vier kabels van de load cel moeten op de interface worden aangesloten. De HX711-weegsensor versterker heeft echter zes aansluitingen, waarvan we er maar vier nodig hebben.

De verbinding is als volgt:
– Rood : E+
– Zwart : E-
– Groen : A-
– Wit : A+

Afbeelding: Load cell verbonden met HX711-module

De printaansluitingen B+ en B- blijven leeg. Er zijn versies van de sensor waar de pinnen zijn gelabeld S+ en S- in plaats van A+ en A-.

Verbinden van de onderdelen
Nu hoef je alleen maar de HX711-weegsensor versterker aan te sluiten op de Raspberry Pi. Omdat deze ook maar vier aansluitingen heeft, is de bedrading vrij eenvoudig:

  • GND naar Raspberry Pi – Pin 6 (GND)
  • DT naar Raspberry Pi – Pin 29 (GPIO 5)
  • SCK naar Raspberry Pi – Pin 31 (GPIO 6)
  • VCC naar Raspberry Pi – Pin 2 (+5V)

Ik heb een aansluittabel gemaakt waar alle verbindingen zichtbaar zijn. De HX711-module staat hier centraal.

Afbeelding: Aansluittabel

Python script
Om het gewicht van een object te kunnen meten en de waarde uit te lezen gebruiken we een Python-bibliotheek. Eerst klonen we het project met:

git clone https://github.com/tatobari/hx711py.git

De download bevat een example.py bestand dat kan worden gebruikt. Om echter de juiste metingen te kunnen doen zijn nog enkele aanpassingen nodig.

cd hx711py

sudo nano example.py

Open example.py met nano en zoek de regel waarin de referentie-unit is ingesteld. Becommentarieer deze met een hashtag-teken (#) zodat de regel er als volgt uitziet:

#hx.set_reference_unit(92)

Sla het script op met Ctrl+o en sluit af met Ctrl+x. De waarde tussen haakjes achter de referentie-unit is de deelfactor. Welke dit voor jouw weegschaal is moeten we eerst uitzoeken in de volgende stap. Ondertussen kun je het voorbeeldscript uitvoeren (afbreken met Ctrl-c). De gemeten waarden zullen hoogstwaarschijnlijk niet kloppen en alle kanten uitschieten, maar dit is op dit moment niet belangrijk.

sudo python example.py

Kalibreren
De juiste kalibratie van de gewichtssensor en de Raspberry Pi-balans is cruciaal. Hiervoor hebben we een vergelijkingsobject nodig waarvan we het gewicht weten. Ik heb hiervoor een blik met inhoud genomen en deze gewogen. Het gewicht van het blik is 469 gram. Mijn load cel is nauwkeurig tot 1 kg. Het is verstandig een gewicht te nemen dat de helft van de load cel belast.

Afbeelding: Een gewicht van 469 gram

Plaats het voorwerp op de weegschaal en voer het script opnieuw uit met het commando:

sudo python example.py

De weergegeven waarden kunnen zowel positief als negatief zijn. In mijn geval werd het blik (469 gram) weergegeven rond de waarde -1031272. Dit komt niet zo nauw. Mijn referentiewaarde is dus -1031272/ 469= -2194.

Het script example.py moet nu worden aangepast zoals hierboven beschreven. Verwijder de hashtag voor commentaar en voer de berekende waarde in. Mijn regel ziet er nu als volgt uit:

hx.set_reference_unit(-2194)

Na het opslaan en starten van het bestand, zou het gewicht nu goed weergegeven moeten worden. Soms zakken de waarden onder de 0 weg. Dit zou niet moeten kunnen. Er is daarom een scriptregel aangepast waarin de waarde wordt uitgelezen. Hierdoor worden geen negatieve gewichten meer weergegeven.

val = max(0, int(hx.get_weight(5)))

Zoals te zien is in de video, is de meting verbazingwekkend nauwkeurig. Het is echter belangrijk om ervoor te zorgen dat de gemonteerde plaat niet te veel buigt (met name de vloerplaat moet goed worden vastgezet). Houd er echter rekening mee dat de waarden buiten het bereik van de sensor (bijv. boven de 1 kg, zoals bij mijn sensor) niet langer nauwkeurig zijn, een andere load cel met een eigen kalibratie is dan nodig.

Opdracht
Het is een leuke opdracht om de gemeten waarde op een LCD-display weer te geven. Maak er wat moois van!

Have A Nice Day!