Zelfbouw-keukenweegschaal (150708-71)

Elektor- en lezersprojecten met een Arduino

Zelfbouw-keukenweegschaal (150708-71)

Postby PimV » Sun Dec 31, 2017 10:43 pm

Ik denk dat dit topic eigenlijk onder "Actuele projecten" hoort, maar aangezien ik daar geen project kan toevoegen moet het maar hier.
Dit Elektor Labs Project gaat dus over de Zelfbouw-keukenweegschaal die in de Nederlandse Elektor nov-dec 2017 blz. 104 stond beschreven en die als kit in de Elektor Shop verkrijgbaar is (150708-71).

Het is eigenlijk een simpele kit met weinig onderdelen, maar niettemin is er meer dan genoeg ruimte voor het maken van fouten.
Zoals bij elke kit geldt dus: let goed op en controleer dubbel voordat je iets vastsoldeert.
Er staan wel wat bouwaanwijzingen in het artikel en er is een U-tube filmpje (https://www.youtube.com/watch?v=TJ5ZBX_tZVM), maar er zit geen bouwbeschrijving bij de kit.

Wat nergens staat is dat je moet opletten dat je start met de goede kant van de onderste perspexplaat (basisplaat) naar boven.
Die plaat heeft 7 gaten: 3 vlak langs de rand en 4 meer naar het midden. Die laatste zijn voor de bevestiging van de Arduino (met afstandshouders er tussen).
De plaat moet zo om liggen dat als je de Arduino erop legt (componentenzijde boven) de bevestigingsgaten van de Arduino matchen met die in de basisplaat.

Wat ook belangrijk is, en wél vermeld wordt:
- Het HX711 breakout-board past in connector K1. Merk op dat deze connector enkele millimeters 'zwevend' boven de print gemonteerd moet worden, anders past het breakout-board niet.
- De connector voor het OLed-display K2 wordt onder een hoek gemonteerd zodat het display goed leesbaar is.

De Elektor sketch "Weight_scale_V1.1" bestaat grofweg uit twee delen:
- Uitlezing van de weegschaal via het HX711-bordje m.b.v. externe bibliotheek "HX711.h".
- Besturing van het OLed-display m.b.v. externe bibliotheek "U8glib.h".

In de besturing van het display heb ik me nauwelijks verdiept want die werkte goed.
Het kalibreren lukte echter niet omdat ik de uiterste stand van 15-slagen potentiometer P1 al bereikte voordat het juiste gewicht op het display stond.
Daarom was het nodig om te kijken hoe de uitlezing van de weegschaal geprogrammeerd was.

Helaas is mijn conclusie dat die geprogrammeerd is door iemand die een paar stukjes programmatuur aan elkaar geplakt heeft zonder zich er voldoende in te verdiepen.
In de software moet een 'calibration_factor' ingevoerd worden die afhangt van de constructie van de weegschaal en de toegepaste load cell.
In de sketch van Elektor wordt een 'calibration_factor' van -7050 in gebruikt, afkomstig van een sketch van SparkFun (wat er in het commentaar ook bijstaat).
Het oorspronkelijke commentaar in de sketch van SparkFun luidt: "-7050 worked for my 440lb max scale setup".
Bij SparkFun ging het dus om een weegschaal met een maximum bereik van 440lb= 199,6 kg (en een opbouw die waarschijnlijk niet-identiek is aan die van Elektor).

Ik heb de oorspronkelijke "SparkFun_HX711_Calibration" sketch gebruikt om de 'calibration_factor' te bepalen en kwam uit op -405.9
Die sketch kan je vinden op deze webpagina van SparkFun: https://learn.sparkfun.com/tutorials/lo ... okup-guide
Let goed op dat je de juiste neemt want er staan meer sketches op deze webpagina!
In deze sketch wordt de 'calibration_factor' net zolang bijgewerkt tot het juiste gewicht (in mijn geval 150.0 g) op het display staat.
Denk eraan om in de regels 36 en 37 de definities van de aangesloten pinnen te wijzigen:
"#define DOUT 3" wijzigen in "#define DOUT A3"
"#define CLK 2" wijzigen in "#define CLK A2"
Ook is het beter in regel 41 de initiële waarde van de 'calibration_factor' te veranderen van -7050 naar -405.9
Verder kan je in regel 74 en 76 de stapgrootte veranderen waarmee de 'calibration_factor' wordt bijgewerkt (bijv. van 10 naar 0.1).
Als je begint met -405.9 zit je er waarschijnlijk al dicht bij en kan je met kleinere stapjes nauwkeuriger werken.
Mocht je een negatief gewicht op het display krijgen, verander dan het teken van de 'calibration_factor' van min naar plus (dus 405,9), zie onderstaand.

Omdat je nu werkt met de juiste 'calibration_factor' heb je in principe al het juiste gewicht op de display staan en kan je die (in mijn ogen) eigenaardige berekeningen met de van potmeter P1 verkregen waarde voor 'factor' versimpelen. Vervang de eerste regels van "void loop()" door:
-------------------------------------------------------------------------------------
void loop()
{
// Read potmeter and calculate factor
factor=0;
for (int i = 0; i < 100; i++) factor += analogRead(4); // Accumulate 100 values
factor = factor / 100.0; // Calculate average: between 0 and +1023
factor = factor-512; // Move zero-point halfway: between -512 and +511
factor = 1.0 + (factor / 5120); // Convert to range: between 0.9 and 1.0998

// The weight is averaged over 10 measurements
gram = scale.get_units(10);
gram = gram * factor;
ounce = gram * 0.0352739619;
-------------------------------------------------------------------------------------
Hiermee kan je via de potmeter het gewicht van min 10% tot (bijna) +10% corrigeren.
Uiteraard kan dit compacter geprogrammeerd worden, maar zo is de reden erachter simpeler te doorgronden.

In mijn geval kreeg in in eerste instantie een negatief gewicht op het display te staan.
De webpagina van Elektor Labs raad aan om dan de aansluiting van de witte en groene draad van de load cell te verwisselen, wat ik ook gedaan heb.
Achteraf denk ik dat die negatieve uitlezing veroorzaakt werd/wordt door de negatieve 'calibraton_factor'.
Ik had dus alleen het teken van min naar plus hoeven te veranderen.
Omdat ik niet nog een keer aan die draden en connector wilde solderen heb ik het zo gelaten.

'Mijn' weegschaal blijkt aardig nauwkeurig te zijn, of beter aardig lineair (verder dan 1 kg heb ik nog niet geprobeerd).
Maar helaas niet erg stabiel wat nulpunt betreft: zelfs direct na het tarreren wijkt hij direct al weer enige tienden van een gram af.
Nou is één tiende van een gram natuurlijk niet veel voor een zelf geknutselde weegschaal, maar ik wil me toch nog eens verdiepen in de bibliotheek-functie "scale.tare()" waarmee die tarrering wordt uitgevoerd.

De benaming "Calibrate/Tare" voor drukknop S1 vind ik misleidend. Het enige wat die knop doet is het op nul stellen van de weegschaal. Alleen "Tare" zou beter zijn. Je moet wel tarreren voor je gaat kalibreren, maar dat heeft niets met de functie van die knop te maken.
Verder vind ik de beide drukkopjes op een onhandige plek zitten, je kan er slecht bij.

Maar al met al toch een leuke kit met een prima prijs en tal van mogelijkheden om te experimenteren met een load cell, HX711 en OLed-display en de bijbehorende bibliotheken.
PimV
 
Posts: 2
Joined: Sat Dec 23, 2017 8:40 pm

Re: Zelfbouw-keukenweegschaal (150708-71)

Postby arjen h. » Wed Jan 03, 2018 12:09 pm

Bedankt voor je uitgebreide feedback, dit kan voor anderen zeker nuttig zijn. Ik zal Elektor vragen of ze dit bericht onder Actuele projecten willen plaatsen of niet.

Edit; het is een project met een Arduino; daar hebben we de Arduino rubriek voor. Topic is verplaatst.
Het Elektor forum is voor de lezers; voor een vraag aan de redactie kun je het beste Elektor een email sturen.
arjen h.
Moderator
 
Posts: 1288
Joined: Thu Jan 02, 2014 10:40 am


Return to Arduino

Who is online

Users browsing this forum: No registered users and 0 guests