- Работеща машина за претегляне на Arduino
- Компоненти, необходими за претегляща машина, базирана на Arduino
- Претегляща машина на базата на Arduino - Електрическа схема
- Осъществяване на веригата на пунктирана перфборд
- Изграждане на корпус за претегляща машина, базирана на Arduino
- Претегляща машина Arduino - код
Цифровите везни за натоварване са друго чудо на съвременното инженерство и дизайн. Да, говорим за везната, която често виждаме в повечето хранителни магазини и на други места, но замисляли ли сте се някога как работи везната? За да отговорим на този въпрос, в този проект ще разгледаме товарната клетка и нейната работа. И накрая, ще изградим преносима везна за натоварване на базата на Arduino със сензора за тегло HX711, който може да измерва тежести до 10 кг.
Тази машина за претегляне е идеална за местни магазини, където опаковат артикули в насипно количество. Подобно на търговските продукти, нашата везна ще има нулев бутон, който нулира скалата. Също така, има опция за задаване на тегло за измерване, когато измервателното тегло достигне зададеното тегло, зумер издава звуков сигнал и спира, когато зададеното тегло е равно на измерващото тегло. По този начин потребителят може да го опакова само като чуе звука и не би трябвало да гледа на дисплея. Тъй като това е много прост проект, ще го изградим много лесно, като използваме компоненти като Arduino и тензодатчик. Така че, без по-нататъшно забавяне, нека да влезем директно в него.
В предишна статия направихме проекти като базиран на Raspberry Pi сензор за тегло и интелигентен контейнер на IoT с предупреждение за електронна поща и уеб мониторинг, използвайки популярния модул за усилвател HX711. Така че, проверете дали това е вашето изискване.
Работеща машина за претегляне на Arduino
Основният компонент на този проект е модул за усилване на товарната клетка и HX711. Както можете да видите, едната страна е маркирана с десет килограма. Също така можете да забележите някакво бяло защитно лепило върху товарната клетка и излизат четири различни цвята проводници, които ще разкрият тайната под бялото защитно лепило и функцията на тези четирицветни проводници по-нататък в статията.
Товарната клетка е преобразувател, който преобразува силата или налягането в електрическа мощност. Той има две страни, да кажем дясната и лявата страна, и е направен от алуминиеви блокове. Както можете да видите в средата материалът се изтънява чрез поставяне на голяма дупка. Ето защо това е точката, която претърпява деформация при поставяне на товар от страната на монтажа. Сега си представете, че дясната клетка е монтирана към основата, а лявата страна е мястото, където е поставен товара, тази конфигурация деформира тензодатчика на товарната клетка поради гигантския отвор в средата.
Когато товар е поставен от страната на товара на товарната клетка, горната част ще претърпи напрежение, а долната част ще получи компресия. Ето защо алуминиевата пръчка се огъва надолу от лявата страна. Ако измерим тази деформация, можем да измерим силата, приложена към алуминиевия блок и точно това ще направим.
Остава въпросът какво има вътре в бялото защитно лепило? Вътре в това защитно лепило ще открием много тънък еластичен компонент, който се нарича тензодатчик. Деформатомер е компонент, който се използва за измерване на деформация. Ако разгледаме по-отблизо този компонент, можем да видим две свързващи подложки и тогава имаме проводящ проводник с повтарящи се отклонения. Този проводящ проводник има определено съпротивление. Когато го огънем, стойността на съпротивлението ще се промени? И така, едната страна на деформационния манометър е монтирана и фиксирана на място, ако поставим тежест от другата страна на алуминиевата пръчка, това ще принуди тензорезистора да се огъне, което ще доведе до промяна в съпротивлението. Как се случва това всъщност? Проводимият модел на тензомера е направен от мед, този проводник ще има определена площ и дължина, така че тези две единици ще дадат съпротивлението на проводника. Съпротивлението на проводник се противопоставя на потока на тока. Сега е очевидно, че ако площта на този проводник стане по-малка,по-малко електрони могат да преминат, което означава по-нисък ток. Сега, ако увеличим площта, това ще увеличи съпротивлението на проводник. Ако към този проводник се приложи някаква сила, това ще разтегне областта и тя ще стане по-малка в същото време, съпротивлението се увеличава. Но тази вариация на съпротивлението е много ниска. Ако опънем тензомера, съпротивлението ще се увеличи и ако го компресираме, съпротивлението ще намалее. За да измерим силата, трябва да измерим съпротивлението. Директното измерване на съпротивлението не винаги е практично, тъй като промяната е много малка. Така че вместо да измерваме съпротивлението, можем лесно да измерваме напреженията. Така че, в този случай трябва да преобразуваме изхода на габарита от стойностите на съпротивлението в стойностите на напрежението.Ако към този проводник се приложи някаква сила, това ще разтегне областта и тя ще стане по-малка в същото време, съпротивлението се увеличава. Но тази вариация на съпротивлението е много ниска. Ако опънем тензомера, съпротивлението ще се увеличи и ако го компресираме, съпротивлението ще намалее. За да измерим силата, трябва да измерим съпротивлението. Директното измерване на съпротивлението не винаги е практично, тъй като промяната е много малка. Така че вместо да измерваме съпротивлението, можем лесно да измерваме напреженията. Така че, в този случай трябва да преобразуваме изхода на габарита от стойностите на съпротивлението в стойностите на напрежението.Ако към този проводник се приложи някаква сила, това ще разтегне областта и тя ще стане по-малка в същото време, съпротивлението се увеличава. Но тази вариация на съпротивлението е много ниска. Ако опънем тензомера, съпротивлението ще се увеличи и ако го компресираме, съпротивлението ще намалее. За да измерим силата, трябва да измерим съпротивлението. Директното измерване на съпротивлението не винаги е практично, тъй като промяната е много малка. Така че вместо да измерваме съпротивлението, можем лесно да измерваме напреженията. Така че, в този случай трябва да преобразуваме изхода на габарита от стойностите на съпротивлението в стойностите на напрежението.съпротивлението ще намалее. За да измерим силата, трябва да измерим съпротивлението. Директното измерване на съпротивлението не винаги е практично, тъй като промяната е много малка. Така че вместо да измерваме съпротивлението, можем лесно да измерваме напреженията. Така че, в този случай трябва да преобразуваме изхода на габарита от стойностите на съпротивлението в стойностите на напрежението.съпротивлението ще намалее. За да измерим силата, трябва да измерим съпротивлението. Директното измерване на съпротивлението не винаги е практично, тъй като промяната е много малка. Така че вместо да измерваме съпротивлението, можем лесно да измерваме напреженията. Така че, в този случай трябва да преобразуваме изхода на габарита от стойностите на съпротивлението в стойностите на напрежението.
Можем да направим това с помощта на моста Уитстоун. Поставяме тензодатчика в моста на Уитстоун, ако мостът е балансиран, напрежението в средната точка трябва да е нула (преди това сме изградили проект, където сме описали как работи мостът на Уитстоун, можете да проверите това, ако искате да да знаете повече по темата). Когато тензодатчикът промени съпротивлението си, той ще дисбалансира моста и напрежението също ще се промени. И така, мостът Wheatstone преобразува вариациите на съпротивлението в стойности на напрежението.
Но тази промяна на напрежението все още е много малка, така че за да я увеличим, трябва да използваме модула HX711. HX711 е 24-битов диференциален ADC, по този начин можем да измерим много малки промени в напрежението. ще даде стойности от 0 до 2 експоненциално 24.
Компоненти, необходими за претегляща машина, базирана на Arduino
За да направим този проект възможно най-опростен, използвахме много общи компоненти, които можете да намерите във всеки местен магазин за хоби. Изображението по-долу ще ви даде представа за компонентите. Освен това разполагаме със спецификацията (BOM), изброена по-долу.
- Товарна клетка (ние използваме 10 кг товарна клетка)
- Усилвател модул HX 711
- Arduino Nano
- I2C LCD 16X2 - Съвместим с I2C
- 1k резистор -2 Nos
- Светодиоди -2Не
- Звънец
- Общи печатни платки
- 7.4V батерия (ако искате да е преносима)
- LM7805 регулатор на напрежение
Претегляща машина на базата на Arduino - Електрическа схема
Товарната клетка има четири проводника, които са червени, черни, зелени и бели. Този цвят може да варира в зависимост от производителите, така че е по-добре да се обърнете към листа с данни. Свържете червено към E + на платката HX711, свържете черно към E-, свържете бяло към A + и свържете зелено към A-, Dout и часовника на платката, съответно към D4 и D5. Свържете единия край на бутоните към D3, D8, D9 и други краища към земята. Имаме I2C LCD, така че свържете SDA към A4 и SCL към A5. Свържете земята на LCD, HX711 и Arduino към земята, също така свържете VCC към 5Vpin на Arduino. Всички модули работят на 5V, затова сме добавили регулатор на напрежение LM7805. Ако не искате да е преносим, можете директно да захранвате Arduino с помощта на USB кабел.
Осъществяване на веригата на пунктирана перфборд
Спояхме всички компоненти върху общ пунктиран перфборд. Използвахме женски хедъри за запояване на Arduino и ADC с платката, също така използвахме проводници за свързване на всички бутони и светодиоди. След като приключи целия процес на запояване, ние се уверихме, че правилните 5V излизат от LM7805. И накрая, сложихме превключвател за включване / изключване на веригата. След като всички приключихме, изглеждаше като изображението по-долу.
Изграждане на корпус за претегляща машина, базирана на Arduino
Както можете да видите, товарната клетка има някои винтови резби, така че можем да я монтираме на основна плоча. Ще използваме PVC дъска за основата на нашата скала, за това първо изрязахме квадрат 20 * 20 cm и четири правоъгълника 20 * 5 от PVC плочата. След това с помощта на твърдо лепило залепихме всяко парче и направихме малко заграждение.
Не забравяйте, че не отстранихме едната страна, защото трябва да поставим бутоните, светодиодите и LCD дисплея върху нея. След това използвахме пластмасова дъска за горната част на кантара. Преди да направим тази настройка постоянна, трябва да се уверим, че имаме достатъчно пространство от земята до товарната клетка, така че тя да може да се огъне, затова поставихме винт и гайки между товарната клетка и основата, също добавихме някои пластмасови дистанционни елементи между товарната клетка и горната част. използвахме кръгъл пластмасов лист като най-добрият интелигент за баланс.
След това поставихме LCD, светодиодите и бутоните към предния панел и всичко свързано с дълъг изолиран проводник. След като приключихме с процеса на окабеляване, залепихме предния панел към основната основа с известен наклон, така че можем да разчитаме много лесно стойностите от LCD. накрая закачихме главния превключвател отстрани на везната и това е всичко. Ето как направихме тялото за нашата тежест.
Можете да проектирате с вашите идеи, но не забравяйте да поставите товарната клетка подобно на изображението.
Претегляща машина Arduino - код
Тъй като сега приключихме с процеса на изграждане на нашия цифров мащаб, можем да преминем към частта за програмиране. За лесно програмиране ще използваме библиотеката HX711, библиотеката EEPROM и библиотеката LiquidCrystal. Можете да изтеглите библиотеката HX711 от официалното хранилище на GitHub или да отидете на инструменти > включва библиотека > управление на библиотека, след това да търсите библиотека с ключова дума HX711, след като изтеглите библиотеката, инсталирайте я в Arduino ide.
Първо, трябва да калибрираме товарната клетка и да съхраним тази стойност в EEPROM, за това отидете на файл> примери> HX 711_ADC, след което изберете калибриращия код. Преди да качите кода, поставете везната на стабилна равнинна повърхност. След това качете кода в Arduino и отворете серийния монитор. След това променете скоростта на предаване на 572600. Сега мониторът иска да вземе тежестта, за това трябва да натиснем t и да въведем.
Сега трябва да поставим известното тегло на везната, в моя случай това е 194gm. След като поставите известното тегло, напишете тегло на серийния монитор и натиснете Enter.
Сега серийният монитор ви пита дали искате да запазите стойността в EEPROM или не, така че напишете Y, за да изберете да. Сега можем да видим теглото на серийния монитор.
Основният код на този проект, който разработихме от примерния скиц на библиотеката HX711. Можете да изтеглите кода на този проект отдолу.
В раздела за кодиране първо добавихме и трите библиотеки. Библиотеката HX711 е за вземане на стойностите на товарната клетка. EEPROM е вградената библиотека на Arduino ide, която се използва за съхраняване на стойности в EEPROM, а библиотеката LiquidCrystal е за l2C LCD модула.
#include
След това се определят цели числа за различни пинове и присвоени стойности. Функцията за зареждане на клетката HX711_ADC е за настройка на щифта на изхода и часовника.
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; дълго t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; плуване надолу_бутонState = 0; плува надолу_ластButtonState = 0;
В раздела за настройка първо стартирахме серийния монитор, това е само за отстраняване на грешки. След това дефинирахме пиновите режими, като всички бутони са дефинирани като вход. С помощта на функцията Arduino PULL UP настройваме щифтовете на логически висок при нормално. Така че, не искаме да използваме външни резистори за това.
pinMode (tpin, INPUT_PULLUP); pinMode (6, ИЗХОД); pinMode (12, ИЗХОД); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
Следващите редове с код са за настройка на I2C LCD. Първо, показахме приветствения текст с помощта на функцията LCD.print () , след две секунди изчистихме дисплея с помощта на lcd.clear () . Тоест, в началото дисплеят показва ARDUINO BALANCE като текст за приветствие и след две секунди ще изчисти и покаже измервателните тегла.
lcd.init (); lcd. backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("нека измерим"); забавяне (2000); lcd.clear ();
След това започна да чете стойностите от loadcell с помощта на функцията loadCell.begin () , след това четем EEPROM за калибрираните стойности, правим това с помощта на функцията EEPROM.get () . Тоест, ние вече съхранихме стойността, използвайки калибрираща скица в адреса на EEPROM, ние просто я възвръщаме.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibrationValue);
В раздела за цикъл първо проверяваме дали има данни от товарната клетка с помощта на LoadCell.update (), ако има такива, четем и съхраняваме тези данни, за това използваме LoadCell.getData () . След това трябва да покажем запазената стойност в LCD. За целта използвахме функцията LCD.print () . също така отпечатваме зададеното тегло. Зададеното тегло се настройва с помощта на брояча на бутоните. Това беше обяснено в последния раздел.
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 ("тегло:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
След това задаваме стойността на тара, за това първо четем състоянието на бутона за тара с помощта на функцията digitalRead () , ако състоянието е ниско, тарираме това тегло на нула. Функцията за тариране на тази скала за тегло е да доведе показанията до нула. Например, ако имаме купа, в която са натоварени нещата, тогава нетното тегло ще бъде теглото на купата + теглото на вещите. Ако натиснем бутона за тара с купата върху товарната клетка, преди да натоварим нещата, теглото на кошницата ще бъде отменено и можем да измерим теглото на вещите сами.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Сега трябва да зададем условията за различни индикации като настройка на закъснението на зумера и светодиодното състояние. Направихме това, използвайки if условия, имаме общо три условия. Първо изчисляваме разликата между зададеното тегло и измерващото тегло, след което съхраняваме тази стойност в променливата k.
float k = buttonPushCounter-i;
1. Ако разликата между зададеното тегло и измервателното тегло е по-голяма или равна на 50gms, зумерът издава звуков сигнал със забавяне от 200 милисекунди (бавно).
if (k> = 50) { digitalWrite (6, HIGH); забавяне (200); digitalWrite (6, LOW); забавяне (200); }
2. Ако разликата между зададеното тегло и измервателното тегло е по-малка от 50 и по-голяма от 1 грам, зумерът издава звуков сигнал със закъснение от 50 милисекунди (по-бързо).
if (k <50 && k> 1) { digitalWrite (6, HIGH); забавяне (50); digitalWrite (6, LOW); забавяне (50); }
3. Когато измервателното тегло е равно или по-голямо от зададената стойност, това ще включи зеления светодиод и изключи зумера и червения светодиод.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); }
Имаме още две функции за отмяна () за задаване на зададеното тегло (за преброяване на натискането на бутона).
Функцията увеличава зададената стойност с 10 gms за всяко натискане. Това се прави с помощта на функцията digitalRead на Arduino, ако щифтът е нисък, което означава, че бутонът е натиснат и това ще увеличи стойността с 10 gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
По същия начин, чекдаун е за намаляване на зададената стойност с 10gms за всяко натискане.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
Това бележи края на програмната част.
Тази базирана на Arduino електронна везна е идеална за измерване на тежести до 10 кг (можем да увеличим тази граница, като използваме по-висока номинална клетка за натоварване). Това е 99% точно с първоначалните измервания.
Ако имате някакви въпроси относно тази схема на машина за балансиране на теглото на базата на Arduino, моля, публикувайте я в раздела за коментари, благодаря!