- Arduino weegmachine aan het werk
- Vereiste componenten voor op Arduino gebaseerde weegmachine
- Op Arduino gebaseerde weegmachine - schakelschema
- Het circuit maken op een gestippelde perfboard
- Een behuizing bouwen voor een op Arduino gebaseerde weegmachine
- Arduino weegmachine - Code
Digitale weegschalen zijn een ander wonder van moderne techniek en ontwerp. Ja, we hebben het over de weegschaal die we vaak in de meeste supermarkten en andere plaatsen zien, maar heb je je ooit afgevraagd hoe een weegschaal werkt? Om die vraag te beantwoorden, gaan we in dit project kijken naar de loadcel en zijn werking. Ten slotte zullen we een draagbare Arduino-gebaseerde weegschaal bouwen met de HX711-gewichtssensor, die gewichten tot 10 kg kan meten.
Deze weegmachine is perfect voor lokale winkels, waar ze artikelen in bulk verpakken. Net als commerciële producten heeft onze weegschaal een nulpuntknop die de weegschaal op nul zet. Ook heeft het een optie om het gewicht in te stellen voor meting, wanneer het meetgewicht het ingestelde gewicht bereikt, piept een zoemer snel en stopt wanneer het ingestelde gewicht gelijk is aan het meetgewicht. Op deze manier kan de gebruiker het inpakken door het geluid te horen en hoeft hij niet naar het scherm te kijken. Omdat dit een heel eenvoudig project is, zullen we dit heel gemakkelijk bouwen met behulp van componenten zoals Arduino en spanningsmeter load cell. Dus laten we er zonder verder uitstel meteen op ingaan.
In een vorig artikel hebben we projecten gemaakt zoals op Raspberry Pi gebaseerde gewichtssensor en IoT Smart Container met e-mailwaarschuwing en webmonitoring met behulp van de populaire HX711 loadcel-versterkermodule. Controleer dus of dat uw vereiste is.
Arduino weegmachine aan het werk
Het belangrijkste onderdeel van dit project is een Load cell en HX711 loadcel versterkermodule. Zoals u kunt zien, is een zijde gemarkeerd met tien kilogram. Je kunt ook een soort witte beschermende lijm over de weegcel opmerken en er komen vier verschillende kleuren draden uit, die het geheim onder de witte beschermende lijm en de functie van deze vierkleurige draden later in het artikel zullen onthullen.
Een load cell is een transducer die kracht of druk omzet in elektrische output. Het heeft twee kanten, laten we zeggen de rechterkant en linkerkant, en het is gemaakt van aluminium blokken. Zoals je kunt zien wordt het materiaal in het midden verdund door een groot gat te maken. Dat is de reden waarom dat het punt is dat vervormt wanneer een lading op de montagezijde wordt geplaatst. Stel je nu voor dat de rechtercel op de basis is gemonteerd en de linkerkant is waar de lading wordt geplaatst, deze configuratie vervormt de spanningsmeter-loadcel vanwege het gigantische gat in het midden.
Wanneer een last op de lastzijde van de loadcel wordt geplaatst, zal het bovenste deel onder spanning komen te staan en zal het onderste deel worden samengedrukt. Daarom buigt de aluminium staaf aan de linkerkant naar beneden. Als we deze vervorming meten, kunnen we de kracht meten die op het aluminium blok is uitgeoefend en dat is precies wat we gaan doen.
Nu blijft de vraag wat er in de witte beschermende lijm zit? Binnenin deze beschermende lijm vinden we een zeer dunne elastische component die een spanningsmeter wordt genoemd. Een rekstrookje is een onderdeel dat wordt gebruikt om rek te meten. Als we dit onderdeel van dichterbij bekijken, zien we twee verbindingspads en dan hebben we een geleidend draadpatroon met herhaalde doorbuigingen. Deze geleidende draad heeft een gedefinieerde weerstand. Als we het buigen, verandert de weerstandswaarde? Dus een kant van de rekstrookje wordt op een plaats gemonteerd en gefixeerd, als we een gewicht aan de andere kant van de aluminium staaf plaatsen, zal dit de spanningsmeter dwingen om te buigen, wat een verandering in weerstand zal veroorzaken. Hoe gebeurt dit eigenlijk? Het geleidende patroon van de spanningsmeter is gemaakt van koper, deze draad heeft een bepaalde oppervlakte en lengte, dus deze twee eenheden geven de weerstand van de draad. De weerstand van een draad verzet zich tegen de stroom. Nu is het duidelijk dat als het gebied van deze draad kleiner wordt,er konden minder elektronen passeren, wat een lagere stroom betekent. Als we nu het gebied vergroten, verhoogt dit de weerstand van een geleider. Als er wat kracht op deze draad wordt uitgeoefend, wordt het gebied uitgerekt en wordt het tegelijkertijd kleiner, de weerstand neemt toe. Maar deze weerstandsvariatie is erg laag. Als we de rekstrookjes uitrekken, neemt de weerstand toe en als we hem comprimeren, wordt de weerstand lager. Om de kracht te meten, moeten we de weerstand meten. Het is niet altijd praktisch om de weerstand direct te meten, omdat de verandering erg klein is. Dus in plaats van weerstand te meten, kunnen we spanningen gemakkelijk meten. Dus in dit geval moeten we de output van de meter omzetten van weerstandswaarden naar spanningswaarden.Als er wat kracht op deze draad wordt uitgeoefend, wordt het gebied uitgerekt en wordt het tegelijkertijd kleiner, de weerstand neemt toe. Maar deze weerstandsvariatie is erg laag. Als we de rekstrook uitrekken, neemt de weerstand toe en als we hem comprimeren, wordt de weerstand lager. Om de kracht te meten, moeten we de weerstand meten. Het direct meten van de weerstand is niet altijd praktisch, omdat de verandering erg klein is. Dus in plaats van weerstand te meten, kunnen we spanningen gemakkelijk meten. Dus in dit geval moeten we de output van de meter omzetten van weerstandswaarden naar spanningswaarden.Als er wat kracht op deze draad wordt uitgeoefend, wordt het gebied uitgerekt en wordt het tegelijkertijd kleiner, de weerstand neemt toe. Maar deze weerstandsvariatie is erg laag. Als we de rekstrook uitrekken, neemt de weerstand toe en als we hem comprimeren, wordt de weerstand lager. Om de kracht te meten, moeten we de weerstand meten. Het direct meten van de weerstand is niet altijd praktisch, omdat de verandering erg klein is. Dus in plaats van weerstand te meten, kunnen we spanningen gemakkelijk meten. Dus in dit geval moeten we de meteruitvoer van weerstandswaarden naar spanningswaarden converteren.de weerstand wordt lager. Om de kracht te meten, moeten we de weerstand meten. Het is niet altijd praktisch om de weerstand direct te meten, omdat de verandering erg klein is. Dus in plaats van weerstand te meten, kunnen we spanningen gemakkelijk meten. Dus in dit geval moeten we de output van de meter omzetten van weerstandswaarden naar spanningswaarden.de weerstand wordt lager. Om de kracht te meten, moeten we de weerstand meten. Het is niet altijd praktisch om de weerstand direct te meten, omdat de verandering erg klein is. Dus in plaats van weerstand te meten, kunnen we spanningen gemakkelijk meten. Dus in dit geval moeten we de output van de meter omzetten van weerstandswaarden naar spanningswaarden.
Dit kunnen we doen met behulp van de Wheatstone-brug. We plaatsen de spanningsmeter in de Wheatstone-brug als de brug in balans is, de spanning in het middelpunt moet nul zijn (eerder hebben we een project gebouwd waarin we hebben beschreven hoe een Wheatstone-brug werkt, dat kun je checken als je dat wilt meer weten over het onderwerp). Wanneer de spanningsmeter zijn weerstand verandert, zal het de brug uit balans brengen en zal de spanning ook veranderen. Dit is dus hoe de Wheatstone-brug weerstandsvariaties omzet in spanningswaarden.
Maar deze spanningsverandering is nog steeds erg klein, dus om dat te vergroten, hebben we de HX711-module nodig. HX711 is een 24-bit Differential ADC, op deze manier konden we zeer kleine spanningsveranderingen meten. het geeft waarden van 0 tot 2 exponentieel 24.
Vereiste componenten voor op Arduino gebaseerde weegmachine
Om dit project zo eenvoudig mogelijk te maken, hebben we zeer algemene componenten gebruikt die u in elke plaatselijke hobbywinkel kunt vinden. De onderstaande afbeelding geeft u een idee over de componenten. Verder hebben we de Bill of Materials (BOM) hieronder vermeld.
- Load cell (we gebruiken een load cell van 10 kg)
- HX 711 versterkermodule
- Arduino Nano
- I2C LCD 16X2 - I2C-compatibel
- 1k weerstand -2 nrs
- LED's -2 nrs
- Zoemer
- Veel voorkomende PCB
- 7.4V batterij (als je hem draagbaar wilt)
- LM7805 spanningsregelaar
Op Arduino gebaseerde weegmachine - schakelschema
De weegcel heeft vier draden die rood, zwart, groen en wit zijn. Deze kleur kan variëren naargelang de fabrikant, dus het is beter om de datasheet te raadplegen. Verbind rood met E + van het HX711-bord, verbind zwart met E-, verbind wit met A + en verbind groen met A-, Dout en de klok van het bord met respectievelijk D4 en D5. Verbind het ene uiteinde van de drukknoppen met D3, D8, D9 en het andere uiteinde met de grond. We hebben I2C LCD, dus sluit SDA aan op A4 en SCL op A5. Verbind de aarde van LCD, HX711 en Arduino met de grond, verbind ook VCC's met de 5V-pin van Arduino. Alle modules werken op 5V, daarom hebben we een LM7805 spanningsregelaar toegevoegd. Als je het niet zo draagbaar wilt hebben, kun je de Arduino rechtstreeks van stroom voorzien met een USB-kabel.
Het circuit maken op een gestippelde perfboard
We hebben alle componenten gesoldeerd op een gemeenschappelijk gestippeld perfboard. We hebben vrouwelijke headers gebruikt om de Arduino en ADC aan de printplaat te solderen, ook hebben we draden gebruikt om alle drukknoppen en LED's aan te sluiten. Nadat al het soldeerproces is voltooid, hebben we ervoor gezorgd dat de juiste 5V uit de LM7805 komt. Ten slotte hebben we een schakelaar geplaatst om het circuit aan / uit te zetten. Toen we allemaal klaar waren, zag het eruit als de onderstaande afbeelding.
Een behuizing bouwen voor een op Arduino gebaseerde weegmachine
Zoals je kunt zien, heeft de weegcel wat schroefdraad, zodat we hem op een basisplaat konden monteren. We zullen een PVC-plaat gebruiken voor de basis van onze schaal, daarvoor snijden we eerst 20 * 20 cm vierkant en vier 20 * 5 rechthoeken uit de PVC-plaat. Vervolgens hebben we met harde lijm elk stuk gelijmd en een kleine behuizing gemaakt.
Onthoud dat we niet één kant hebben gerepareerd, omdat we de drukknoppen, LED's en het LCD-scherm erop moeten plaatsen. Daarna gebruikten we een plastic bord voor de bovenkant van de schaal. Voordat we deze opstelling permanent maken, moeten we ervoor zorgen dat we voldoende ruimte hebben vanaf de grond tot de loadcel, zodat deze kan buigen, dus hebben we schroeven en moeren tussen de loadcel en de basis geplaatst, ook hebben we toegevoegd enkele plastic afstandhouders tussen de weegcel en het bovendeel. we gebruikten een rond plastic laken als de beste balans.
Vervolgens plaatsten we het LCD-scherm, de LED's en de drukknoppen op het voorpaneel en alles verbonden met lange geïsoleerde draad. Nadat we het bedradingsproces hadden voltooid, hebben we het voorpaneel met enige helling op de hoofdbasis gelijmd, zodat we de waarden heel gemakkelijk van het LCD-scherm kunnen aflezen. Ten slotte hebben we de hoofdschakelaar aan de zijkant van de balans bevestigd en dat is alles. Dit is hoe we het lichaam hebben gemaakt voor onze weegschaal.
U kunt ontwerpen met uw ideeën, maar vergeet niet om de laadcel te plaatsen zoals in de afbeelding.
Arduino weegmachine - Code
Omdat we nu klaar zijn met het bouwproces voor onze digitale weegschaal, kunnen we door naar het programmeergedeelte. Voor eenvoudige programmering gaan we de HX711-bibliotheek, EEPROM-bibliotheek en de LiquidCrystal-bibliotheek gebruiken. Je kunt de HX711-bibliotheek downloaden van de officiële GitHub-repository, of ga naar tools > include library > manage library, en doorzoek de bibliotheek met het trefwoord HX711, installeer deze na het downloaden van de bibliotheek in Arduino ide.
Eerst moeten we de weegcel kalibreren en die waarde op EEPROM opslaan, daarvoor ga je naar bestand> voorbeelden> HX 711_ADC en selecteer je de kalibratiecode. Plaats de weegschaal op een stabiel vlak oppervlak voordat u de code uploadt. Upload vervolgens de code naar Arduino en open de seriële monitor. Verander dan de baudrate in 572600. Monitor nu om het gewicht te nemen, daarvoor moeten we op t drukken en invoeren.
Nu moeten we het bekende gewicht op de balans plaatsen, in mijn geval is dat 194 gram. Nadat u het bekende gewicht hebt geplaatst, typt u gewicht op de seriële monitor en drukt u op enter.
Nu vraagt de seriële monitor u of u de waarde in EEPROM wilt opslaan of niet, dus typ Y om ja te kiezen. Nu kunnen we het gewicht op de seriële monitor zien.
De hoofdcode van dit project, die we hebben ontwikkeld op basis van de voorbeeldschets van de HX711-bibliotheek. U kunt de code van dit project hieronder downloaden.
In het coderingsgedeelte hebben we eerst alle drie de bibliotheken toegevoegd. De HX711-bibliotheek is voor het nemen van de weegcelwaarden. EEPROM is de ingebouwde bibliotheek van Arduino ide, die wordt gebruikt om waarden op te slaan in EEPROM en de LiquidCrystal-bibliotheek is voor de l2C LCD-module.
# omvatten
Vervolgens gedefinieerde gehele getallen voor verschillende pinnen en toegewezen waarden. HX711_ADC loadcell- functie is voor het instellen van de Dout en klokpen.
const int HX711_dout = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADC LoadCell (HX711_dout, HX711_sck); const int calVal_eepromAdress = 0; lange t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; zwevende knopPushCounter = 0; zweven up_buttonState = 0; zweven up_lastButtonState = 0; zweven down_buttonState = 0; zweven down_lastButtonState = 0;
In de setup-sectie hebben we eerst de seriële monitor gestart, dit is alleen voor foutopsporing. Vervolgens hebben we de pin-modi gedefinieerd, alle drukknoppen zijn gedefinieerd als invoer. Met behulp van de Arduino PULL UP-functie zetten we de pinnen normaal op een logische hoogte. Daarvoor willen we dus geen externe weerstanden gebruiken.
pinMode (tpin, INPUT_PULLUP); pinMode (6, UITGANG); pinMode (12, UITGANG); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
De volgende regels code zijn voor het instellen van I2C LCD. Eerst hebben we de welkomsttekst weergegeven met de functie LCD.print () , na twee seconden hebben we de weergave gewist met lcd.clear () . Dat wil zeggen, in het begin toont het display ARDUINO BALANCE als welkomsttekst, en na twee seconden wordt het gewist en worden de meetgewichten weergegeven.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("laten we meten"); vertraging (2000); lcd.clear ();
Vervolgens begonnen we de waarden van loadcell te lezen met de functie loadCell.begin () , daarna lezen we de EEPROM voor de gekalibreerde waarden, we doen dat door de functie EEPROM.get () te gebruiken. Dat wil zeggen, we hebben de waarde al opgeslagen met behulp van de kalibratieschets in het EEPROM- adres, we nemen die waarde gewoon opnieuw.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibratieValue);
In het lusgedeelte controleren we eerst of er gegevens van de loadcel beschikbaar zijn met LoadCell.update (), indien beschikbaar, lezen we die gegevens en slaan we die op, daarvoor gebruiken we LoadCell.getData () . Vervolgens moeten we de opgeslagen waarde op het LCD-scherm weergeven. Om dat te doen, hebben we de functie LCD.print () gebruikt. ook drukken we het ingestelde gewicht af. Het ingestelde gewicht wordt ingesteld met behulp van de Pushbutton-teller. Dat werd uitgelegd in de laatste sectie.
if (LoadCell.update ()) newDataReady = true; if (newDataReady) { if (millis ()> t + serialPrintInterval) { float i = LoadCell.getData (); lcd.setCursor (0, 0); lcd.print ("set wei:"); lcd.setCursor (9, 0); lcd.print (buttonPushCounter); lcd.setCursor (14, 0); lcd.print ("GM"); lcd.setCursor (0, 1); lcd.print ("gewicht:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Vervolgens stellen we de tarrawaarde in, daarvoor lezen we eerst de toestand van de tarra-drukknop met behulp van de functie digitalRead () , als de toestand laag is, tarreren we dat gewicht op nul. De tarrafunctie van deze weegschaal is om de meetwaarden op nul te brengen. Als we bijvoorbeeld een schaal hebben waarin de dingen worden geladen, dan is het nettogewicht het gewicht van de schaal + het gewicht van de dingen. Als we op de tarraknop drukken met de kom op de weegcel voordat we dingen laden, wordt het gewicht van de mand teniet gedaan en kunnen we alleen het gewicht van de dingen meten.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Nu moeten we de voorwaarden instellen voor verschillende indicaties, zoals het instellen van de vertraging van de zoemer en de led-status. We hebben dat gedaan met if- voorwaarden, we hebben in totaal drie voorwaarden. We berekenen eerst het verschil tussen het ingestelde gewicht en het meetgewicht en slaan die waarde vervolgens op in de variabele k.
zweven k = buttonPushCounter-i;
1. Als het verschil tussen het ingestelde gewicht en het meetgewicht groter is dan of gelijk is aan 50 gms, piept de zoemer met een vertraging van 200 milliseconden (langzaam).
if (k> = 50) { digitalWrite (6, HIGH); vertraging (200); digitalWrite (6, LOW); vertraging (200); }
2. Als het verschil tussen het ingestelde gewicht en het meetgewicht kleiner is dan 50 en groter dan 1 gram, piept de zoemer met een vertraging van 50 milliseconden (sneller).
if (k <50 && k> 1) { digitalWrite (6, HIGH); vertraging (50); digitalWrite (6, LOW); vertraging (50); }
3. Als het meetgewicht gelijk is aan of groter is dan de ingestelde waarde, gaat dit de groene led aan en de zoemer en rode led uit.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); }
We hebben nog twee lege functies () voor het instellen van het ingestelde gewicht (voor het tellen van het indrukken van de knop).
De functie verhoogt de ingestelde waarde met 10 gms bij elke druk. Dit wordt gedaan door de digitalRead- functie van Arduino te gebruiken. Als de pin laag is, betekent dit dat de knop wordt ingedrukt en dat de waarde met 10 gms wordt verhoogd.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Evenzo
checkdown is voor het verlagen van de ingestelde waarde met 10 gms voor elke druk.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Dit markeert het einde van het programmeergedeelte.
Deze op Arduino gebaseerde elektronische weegschaal is perfect voor het meten van gewichten tot 10 kg (we kunnen deze limiet verhogen door een weegcel met een hogere nominale waarde te gebruiken). Dit is 99% nauwkeurig op de originele metingen.
Als je vragen hebt over dit op Arduino gebaseerde LCD-weegschaalmachinecircuit, plaats het dan in het commentaargedeelte, bedankt!