- Arduino-vägningsmaskin fungerar
- Komponenter som krävs för Arduino-baserad vägningsmaskin
- Arduino-baserad vägningsmaskin - kretsschema
- Att göra kretsen på en prickad perfboard
- Bygga ett hölje för Arduino-baserad vägningsmaskin
- Arduino vägningsmaskin - kod
Digitala lastvågar är ett annat mirakel inom modern teknik och design. Ja, vi pratar om den våg som vi ofta ser i de flesta livsmedelsbutiker och andra ställen, men har du någonsin undrat hur en vikt skala fungerar? För att svara på den frågan kommer vi i det här projektet att ta en titt på lastcellen och dess funktion. Slutligen kommer vi att bygga en bärbar Arduino-baserad lastskala med HX711 Weight Sensor, som kan mäta vikter upp till 10 kg.
Denna vägningsmaskin är perfekt för lokala butiker där de packar varor i bulk. Liksom kommersiella produkter kommer vår viktskala att ha en nollknapp som nollställer skalan. Det har också ett alternativ att ställa in vikt för mätning, när mätvikten når den inställda vikten, piper en summer snabbt och stannar när den inställda vikten är lika med mätvikten. På så sätt kan användaren packa det bara genom att höra ljudet och behöver inte titta på skärmen. Eftersom detta är ett mycket enkelt projekt kommer vi att bygga detta mycket enkelt med hjälp av komponenter som Arduino och belastningsmätare. Så, utan ytterligare dröjsmål, låt oss gå in i det.
I en tidigare artikel har vi gjort projekt som Raspberry Pi-baserad viktsensor och IoT Smart Container med e-postvarning och webbövervakning med den populära HX711-förstärkarmodulen. Så kolla in det om det är ditt krav.
Arduino-vägningsmaskin fungerar
Huvudkomponenten i detta projekt är en belastningscell- och HX711-belastningscellförstärkarmodul. Som du kan se är en sida markerad med tio kilo. Du kan också märka någon form av vitt skyddande lim över lastcellen och fyra olika färger av ledningar kommer ut, kommer att avslöja hemligheten under det vita skyddslimet och funktionen hos dessa fyrfärgstrådar senare i artikeln.
En lastcell är en omvandlare som omvandlar kraft eller tryck till elektrisk utgång. Den har två sidor, låt oss säga höger och vänster sida, och den är gjord av aluminiumblock. Som du ser i mitten av materialet tunnas ut genom att sätta ett stort hål. Det är därför det är den punkt som drabbas av deformation när en last placeras på fästsidan. Föreställ dig nu att högercellen är monterad på basen och den vänstra sidan är där lasten placeras, denna konfiguration deformerar belastningscellen för töjningsmätaren på grund av det gigantiska hålet i mitten.
När en last placeras på lastcellens lastsida kommer den övre delen att drabbas av spänning och den nedre delen kommer att drabbas av kompression. Det är därför aluminiumstången böjer sig nedåt på vänster sida. Om vi mäter denna deformation kan vi mäta kraften som applicerades på aluminiumblocket och det är precis vad vi kommer att göra.
Nu kvarstår frågan vad som finns i det vita skyddslimet? Inuti detta skyddslim kommer vi att hitta en mycket tunn elastisk komponent som kallas en töjningsmätare. En töjningsmätare är en komponent som används för att mäta töjning. Om vi tittar närmare på denna komponent kan vi se två anslutningskuddar och sedan har vi ett ledande trådmönster med upprepade avböjningar. Denna ledande tråd har ett definierat motstånd. När vi böjer det ändras motståndsvärdet? Så, den ena sidan av töjningsmätaren är monterad och fixerad på en plats, om vi lägger en vikt på den andra sidan av aluminiumstången kommer detta att tvinga töjningsmätaren att böjas, vilket kommer att orsaka en förändring av motståndet. Hur detta faktiskt händer? Det ledande mönstret för töjningsmätaren är gjord av koppar, den här tråden kommer att ha en viss yta och längd, så dessa två enheter ger trådens motstånd. En tråds motstånd motsätter strömflödet. Nu är det uppenbart att om området för denna tråd blir mindre,färre elektroner kan passera vilket betyder en lägre ström. Om vi nu ökar arean kommer det att öka motståndet hos en ledare. Om någon kraft appliceras på denna tråd, kommer detta att sträcka ut området och det blir mindre samtidigt, motståndet ökar. Men denna motståndsvariation är mycket låg. Om vi sträcker töjningsmätaren ökar motståndet och om vi komprimerar det blir motståndet lägre. För att mäta kraften måste vi mäta motståndet. Att mäta motståndet direkt är inte alltid praktiskt, eftersom förändringen är mycket liten. Så istället för att mäta motstånd kan vi enkelt mäta spänningar. Så i det här fallet måste vi konvertera mätutgången från motståndsvärden till spänningsvärden.Om någon kraft appliceras på denna tråd, kommer detta att sträcka ut området och det blir mindre samtidigt, motståndet ökar. Men denna motståndsvariation är mycket låg. Om vi sträcker töjningsmätaren ökar motståndet och om vi komprimerar det blir motståndet lägre. För att mäta kraften måste vi mäta motståndet. Att mäta motståndet direkt är inte alltid praktiskt, eftersom förändringen är mycket liten. Så istället för att mäta motstånd kan vi enkelt mäta spänningar. Så i det här fallet måste vi konvertera mätutgången från motståndsvärden till spänningsvärden.Om någon kraft appliceras på denna tråd, kommer detta att sträcka ut området och det blir mindre samtidigt, motståndet ökar. Men denna motståndsvariation är mycket låg. Om vi sträcker töjningsmätaren ökar motståndet och om vi komprimerar det blir motståndet lägre. För att mäta kraften måste vi mäta motståndet. Att mäta motståndet direkt är inte alltid praktiskt, eftersom förändringen är mycket liten. Så istället för att mäta motstånd kan vi enkelt mäta spänningar. Så i det här fallet måste vi konvertera mätutgången från motståndsvärden till spänningsvärden.motståndet blir lägre. För att mäta kraften måste vi mäta motståndet. Att mäta motståndet direkt är inte alltid praktiskt, eftersom förändringen är mycket liten. Så istället för att mäta motstånd kan vi enkelt mäta spänningar. Så i det här fallet måste vi konvertera mätutgången från motståndsvärden till spänningsvärden.motståndet blir lägre. För att mäta kraften måste vi mäta motståndet. Att mäta motståndet direkt är inte alltid praktiskt, eftersom förändringen är mycket liten. Så istället för att mäta motstånd kan vi enkelt mäta spänningar. Så i det här fallet måste vi konvertera mätutgången från motståndsvärden till spänningsvärden.
Vi kan göra detta med hjälp av Wheatstone-bron. Vi placerar töjningsmätaren i Wheatstone-bron om bron är balanserad, spänningen i mittpunkten ska vara noll (tidigare har vi byggt ett projekt där vi har beskrivit hur en Wheatstone-bro fungerar, du kan kolla in det om du vill veta mer om ämnet). När töjningsmätaren ändrar sitt motstånd kommer den att balansera bryggan och spänningen kommer också att ändras. Så detta omvandlar Wheatstone-bron motståndsvariationer till spänningsvärden.
Men denna spänningsförändring är fortfarande väldigt liten, så för att öka det måste vi använda HX711-modulen. HX711 är en 24-bitars differentiell ADC, på detta sätt kan vi mäta mycket små spänningsförändringar. det ger värden från 0 till 2 exponential 24.
Komponenter som krävs för Arduino-baserad vägningsmaskin
För att göra detta projekt så enkelt som möjligt har vi använt mycket generiska komponenter som du kan hitta i vilken lokal hobbybutik som helst. Bilden nedan ger dig en uppfattning om komponenterna. Dessutom har vi Stycklistan (BOM) listade nedan.
- Lastcell (vi använder en 10 kg lastcell)
- HX 711 förstärkarmodul
- Arduino Nano
- I2C LCD 16X2 - I2C Kompatibel
- 1k motstånd -2 Nos
- Lysdioder -2No
- Summer
- Vanligt PCB
- 7.4V batteri (om du vill ha det bärbart)
- LM7805 spänningsregulator
Arduino-baserad vägningsmaskin - kretsschema
Lastcellen har fyra ledningar som är röda, svarta, gröna och vita. Den här färgen kan variera beroende på tillverkarna, så det är bättre att hänvisa till databladet. Anslut rött till E + på HX711-kortet, anslut svart till E-, anslut vitt till A + och anslut grönt till A-, Dout och klocka på kortet anslut till D4 respektive D5. Anslut ena änden av tryckknapparna till D3, D8, D9 och andra ändar till marken. Vi har I2C LCD, så anslut SDA till A4 och SCL till A5. Anslut marken på LCD, HX711 och Arduino till marken, anslut också VCC till 5Vpin på Arduino. Alla moduler fungerar på 5V, så vi har lagt till en spänningsregulator LM7805. Om du inte vill ha den som bärbar kan du driva Arduino direkt med en USB-kabel.
Att göra kretsen på en prickad perfboard
Vi har lödt alla komponenter på en gemensam prickad perfboard. Vi använde kvinnliga rubriker för att lödda Arduino och ADC med kretskortet, vi har också använt ledningar för att ansluta alla tryckknappar och lysdioder. Efter att alla lödprocesser är avslutade har vi försäkrat oss om att korrekt 5V kommer ut ur LM7805. Slutligen har vi satt en omkopplare för att slå på / av kretsen. När vi alla var klara såg det ut som bilden nedan.
Bygga ett hölje för Arduino-baserad vägningsmaskin
Som du kan se har lastcellen några skruvgängor så att vi kan montera den på en basplatta. Vi kommer att använda ett PVC-kort för basen av vår skala, för det skär vi först 20 * 20 cm kvadrat och fyra 20 * 5 rektanglar från PVC-kortet. Sedan limmade vi varje bit med hårt lim och gjorde ett litet hölje.
Kom ihåg att vi inte fixade ena sidan, för vi måste placera tryckknappar, lysdioder och LCD-skärmen på den. Sedan använde vi ett plastbräde till toppen av vågen. Innan vi gör denna inställning permanent måste vi se till att vi har tillräckligt med utrymme från marken till lastcellen så att den kommer att kunna böjas, så vi placerade skruvar och muttrar mellan lastcellen och basen, också några plastavstånd mellan lastcellen och överdelen. vi använde en rund plastplåt som balansens bästa smarta.
Sedan placerade vi LCD, lysdioder och tryckknappar på frontpanelen och allt som var anslutet med lång isolerad kabel. När vi har avslutat kopplingsprocessen, limmade vi frontpanelen till huvudbasen med en viss lutning, så att vi lätt kan läsa värdena från LCD. äntligen fäste vi huvudströmbrytaren vid sidan av vågen och det är det. Så här skapade vi kroppen för vår vikt.
Du kan designa med dina idéer men kom ihåg att placera den lastcellliknande som på bilden.
Arduino vägningsmaskin - kod
Eftersom vi nu är färdiga med byggprocessen för vår digitala skala kan vi gå vidare till programmeringsdelen. För enkel programmering ska vi använda HX711-biblioteket, EEPROM-biblioteket och LiquidCrystal-biblioteket. Du kan ladda ner HX711-biblioteket från det officiella GitHub-förvaret, eller gå till verktyg > inkludera bibliotek > hantera bibliotek, sök sedan i biblioteket med nyckelordet HX711, efter att du laddat ner biblioteket, installera det i Arduino ide.
Först måste vi kalibrera lastcellen och lagra det värdet på EEPROM, för det, gå till fil> exempel> HX 711_ADC och välj sedan kalibreringskoden. Innan du laddar upp koden, placera balansen på en stabil plan yta. Ladda sedan upp koden till Arduino och öppna den seriella bildskärmen. Ändra sedan baudhastigheten till 572600. Nu ska monitorn be att ta vikten, för det måste vi trycka på t och gå in.
Nu måste vi lägga den kända vikten på balansen, i mitt fall är det 194 gm. När du har placerat den kända vikten skriver du vikten på den seriella bildskärmen och trycker på Enter.
Nu frågar den seriella monitorn om du vill spara värdet i EEPROM eller inte, så skriv Y för att välja ja. Nu kan vi se vikten på den seriella bildskärmen.
Huvudkoden för detta projekt, som vi utvecklade från exemplets skiss av HX711-biblioteket. Du kan ladda ner koden för detta projekt nedan.
I kodningsavsnittet lade vi först till alla tre biblioteken. HX711-biblioteket är för att ta belastningscellvärdena. EEPROM är det inbyggda biblioteket i Arduino ide, som används för att lagra värden i EEPROM och LiquidCrystal-biblioteket är för l2C LCD-modulen.
#omfatta
Definierade sedan heltal för olika stift och tilldelade värden. HX711_ADC loadcell- funktion är för att ställa in Dout och klockstift.
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; lång t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; flyta upp_lastButtonState = 0; float down_buttonState = 0; flyta ned_lastButtonState = 0;
I installationssektionen startade vi först den seriella bildskärmen, det här är bara för felsökning. Sedan definierade vi stiftlägena, alla tryckknappar definieras som ingång. Med hjälp av Arduino PULL UP-funktionen ställer vi in stiften till en logisk hög som normalt. Så vi vill inte använda några externa motstånd för det.
pinMode (tpin, INPUT_PULLUP); pinMode (6, OUTPUT); pinMode (12, OUTPUT); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Följande kodrader är för inställning av I2C LCD. Först visade vi välkomsttexten med LCD.print () -funktionen, efter två sekunder rensade vi skärmen med lcd.clear () . I början visar displayen ARDUINO BALANCE som välkomsttext och efter två sekunder rensas den och visar mätvikterna.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("låt oss mäta"); fördröjning (2000); lcd.clear ();
Började sedan läsa värdena från loadcell med hjälp av loadCell.begin () -funktionen, efter det läste vi EEPROM för de kalibrerade värdena, det gör vi med funktionen EEPROM.get () . Det vill säga, vi har redan lagrat värdet med hjälp av kalibreringsskiss i EEPROM- adressen, vi tar bara om det värdet.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibrationValue);
I loop-avsnittet kontrollerar vi först om någon data från lastcellen är tillgänglig med LoadCell.update (), om det är tillgängligt läser vi och lagrar dessa data, för det använder vi LoadCell.getData () . Därefter måste vi visa det lagrade värdet i LCD. För att göra det använde vi funktionen LCD.print () . också skriver vi ut den inställda vikten. Inställt vikt ställs in med hjälp av tryckknappsräknaren. Det förklarades i det sista avsnittet.
om (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 ("vikt:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Därefter ställer vi in taravärdet, för det läser vi först tillståndet för taraknappen med digitalRead () -funktionen, om tillståndet är lågt tar vi den vikten till noll. Tara-funktionen i denna viktskala är att sätta avläsningarna till noll. Till exempel, om vi har en skål där sakerna laddas, kommer nettovikten att vara skålens vikt + sakerna. Om vi trycker på taraknappen med skålen på lastcellen innan du laddar saker kommer korgens vikt att negeras och vi kan ensam mäta vikten på sakerna.
om (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Nu måste vi ställa in villkoren för olika indikationer som att ställa in fördröjningen för summern och ledstatus. Vi gjorde det med om villkor, vi har totalt tre villkor. Först beräknar vi skillnaden mellan inställd vikt och mätvikt och lagrade sedan värdet i variabeln k.
float k = buttonPushCounter-i;
1. Om skillnaden mellan inställd vikt och mätvikt är större än eller lika med 50 gram, piper ljudet med en fördröjning på 200 millisekunder (långsamt).
om (k> = 50) { digitalWrite (6, HIGH); fördröjning (200); digitalWrite (6, LOW); fördröjning (200); }
2. Om skillnaden mellan inställd vikt och mätvikt är lägre än 50 och större än 1 gram, piper ljudet med en fördröjning på 50 millisekunder (snabbare).
if (k <50 && k> 1) { digitalWrite (6, HIGH); fördröjning (50); digitalWrite (6, LOW); fördröjning (50); }
3. När mätvikten är lika med eller större än det inställda värdet, tänds den gröna lysdioden och av summern och den röda lysdioden.
om (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HÖG); }
Vi har ytterligare två ogiltiga funktioner () för att ställa in den inställda vikten (för att räkna med knapptryckningen).
Funktionen ökar det inställda värdet med 10 gram för varje tryck. Detta görs med hjälp av Arduinos digitalRead- funktion om stiftet är lågt vilket innebär att knappen trycks ned och det kommer att öka värdet med 10gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
Liknande, checkdown är för att minska det inställda värdet med 10gms för varje tryck.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Detta markerar slutet på programmeringsdelen.
Denna Arduino-baserade elektroniska våg är perfekt för att mäta vikter upp till 10 kg (vi kan öka denna gräns genom att använda en högre belastningscell). Detta är 99% korrekt i förhållande till originalmått.
Om du har några frågor angående denna Arduino-baserade LCD-viktbalansmaskinkrets, vänligen lägg upp den i kommentarsektionen, tack!