ساخت ترازو قابل حمل با آردوینو (اندازه گیری و تنظیم وزن بسته)
محتویات
ترازوی بار دیجیتال یکی دیگر از معجزه های مهندسی و طراحی است. بله ، ما در مورد ترازوی وزنی صحبت می کنیم که اغلب در اکثر فروشگاه های مواد غذایی و جاهای دیگر مشاهده می کنیم ، اما آیا تا به حال فکر کرده اید که ترازو دیجیتالی چگونه کار می کند؟ برای پاسخ به این سوال ، در این پروژه ، ما قصد داریم نگاهی به لودسل و عملکرد آن بیندازیم. در نهایت ، ما یک ترازو قابل حمل مبتنی بر آردوینو با سنسور وزن HX711 ایجاد می کنیم که می تواند وزن را تا 10 کیلوگرم اندازه گیری کند.
این دستگاه توزین برای فروشگاه های محلی مناسب است ، جایی که اقلام را به صورت عمده بسته بندی می کنند. مانند محصولات تجاری ، مقیاس وزن ما دارای دکمه صفر است که مقیاس را صفر می کند. همچنین ، یک گزینه برای تنظیم وزن برای اندازه گیری وجود دارد ، هنگامی که وزن اندازه گیری به وزن تنظیم شده برسد ، یک بازر بوق می زند و وقتی وزن تنظیم شده برابر وزن اندازه گیری می شود ، متوقف می شود. به این ترتیب ، کاربر می تواند آن را فقط با شنیدن صدا بسته بندی کند و مجبور نباشد به صفحه نمایش نگاه کند.
ما قبلا یک ترازو دیجیتالی با آردوینو طراحی کرده بودیم.
ماژول سنسور وزن لودسل و HX711
Load Cell مبدل است که نیرو یا فشار را به خروجی الکتریکی تبدیل می کند. بزرگی این خروجی الکتریکی به طور مستقیم با نیرویی که اعمال می شود متناسب است. مقاومت مؤثر این سنسور ها در اثر افزایش فشار و نیروی وارده تغییر می کند. سلول بار (Load Cell) در محدوده های مختلفی از قبیل 5 کیلوگرم ، 10 کیلوگرم ، 100 کیلوگرم و … وجود دار ، در اینجا ما برای تست پروژه از یک لودسل با قابلیت وزن 40 کیلو گرم استفاده میکنیم.
سیگنال های الکتریکی تولید شده توسط سلول بار در چند میلی ولت است، بنابراین آنها باید توسط تقویت کننده، تقویت شوند و به همین دلیل از ماژول HX711 استفاده میکنیم. ماژول حسگر توزین HX711 دارای تراشه HX711 است که یک مبدل آنالوگ به دیجیتال با دقت بالای 24 بیت است. HX711 دارای دو کانال ورودی آنالوگ است و با برنامه نویسی این کانال ها می توانیم به 128 دست پیدا کنیم.
لودسل با استفاده از چهار سیم به HX711 متصل میشود.
- سیم قرمز به E + وصل شده است
- سیم سیاه به E وصل شده است
- سیم سفید به A- وصل شده است
- سیم سبز یا آبی به A + وصل شده است
پروژه های دیگر ما با لودسل :
- پروژه ظرف هوشمند رزبری پای با هشدار ایمیل و نمایش در اینترنت
- پروژه باز شدن اتوماتیک درب با سنسور وزن و رزبری پای پایتون
شماتیک مدار ترازو قابل حمل با آردوینو
لودسل دارای چهار سیم قرمز ، سیاه ، سبز و سفید است. این رنگ ممکن است با توجه به سازنده لودسل شما متفاوت باشد ، بنابراین بهتر است به دیتاشیت لودسل خود مراجعه کنید. رنگ قرمز را به E+ برد HX711 وصل کنید ، رنگ مشکی را به E- ، رنگ سفید را به A+ وصل کنید و رنگ سبز را به ترتیب به A- متصل کنید. Dout و clock را به ترتیب به D4 و D5 وصل کنید. یک سر دکمه های فشاری را به D3 ، D8 ، D9 و انتهای دیگر را به GND وصل کنید. ما LCD با پروتکل ارتباطی I2C داریم ، بنابراین SDA را به A4 و SCL را به A5 وصل کنید. اگر نمی خواهید این دستگاه قابل حمل باشد ، می توانید آردوینو را مستقیماً با استفاده از کابل USB تغذیه کنید.
قطعات مورد نیاز
تصویر زیر قطعات مورد نیاز این پروژه را به شما نشان میدهد.
- لودسل (ما از لودسل 10 کیلویی استفاده می کنیم)
- ماژول تقویت کننده HX711
- آردوینو نانو
- ال سی دی کاراکتری 16*2 I2C
- مقاومت 1k -2 شماره
- LED ها – 2 عدد
- بازر
- باتری 7.4 ولت (در صورت تمایل قابل حمل)
- تنظیم کننده ولتاژ LM7805
ساختن مدار ترازو روی برد سوراخدار
ما تمام اجزاء را روی یک برد چوبی معمولی نقطه ای لحیم کرده ایم.
ساخت محفظه برای دستگاه توزین مبتنی بر آردوینو
همانطور که می بینید ، لودسل دارای چند پیچ است ، بنابراین می توانیم آن را روی یک صفحه پایه نصب کنیم. ما از پایه PVC برای پایه ترازو خود استفاده می کنیم ، برای این کار ابتدا یک مربع 20*20 سانتی متر و چهار مستطیل 20*5 را از تخته PVC برش می دهیم. سپس با استفاده از چسب سخت، هر قطعه را چسباندیم و یک محفظه کوچک ساختیم.
باید مطمئن شویم که از زمین تا لودسل فضای کافی داریم)می تواند خم شود) بنابراین پیچ و مهره ها را بین لودسل و پایه قرار دادیم ، همچنین چند فاصله گیر پلاستیکی بین لودسل و قسمت بالایی اضافه کردیم. ما از یک ورق پلاستیکی گرد به عنوان بالاترین سطح استفاده کردیم.
سپس LCD ، LED ها و دکمه های فشاری را روی پنل جلویی قرار دادیم و همه چیز را با سیم عایق بلند متصل کردیم. پس از اتمام مراحل سیم کشی ، پنل جلویی را با کمی تمایل به پایه اصلی چسباندیم ، بنابراین می توانیم مقادیر را از LCD به راحتی بخوانیم. سرانجام ، کلید اصلی را به طرف ترازو وصل کردیم.
شما می توانید این محفظه را با ایده های خود طراحی کنید اما به یاد داشته باشید که لود سل را مانند تصویر قرار دهید.
کد دستگاه توزین با آردوینو
با اتمام مراحل ساخت مقیاس دیجیتال ، می توانیم به قسمت برنامه نویسی برویم. برای برنامه نویسی آسان ، ما از کتابخانه HX711 ، کتابخانه EEPROM و کتابخانه LiquidCrystal استفاده می کنیم. می توانید کتابخانه HX711 را از GitHub بارگیری کنید ، یا به Tools> Include Library> Library Manager بروید ، سپس با استفاده از کلمه کلیدی HX711 کتابخانه را جستجو کنید و پس از بارگیری کتابخانه ، آن را در Arduino ide نصب کنید.
ابتدا ، ما باید لودسل را کالیبره کنیم و آن مقدار را در EEPROM ذخیره کنیم ، برای این کار به flies>Examples> HX 711_ADC بروید ، سپس calibration code را انتخاب کنید. قبل از بارگذاری کد ، ترازو را روی سطح پایدار قرار دهید. سپس کد را در Arduino بارگذاری کرده و سریال مانیتور را باز کنید. سپس نرخ baud را به 572600 تغییر دهید. حالا مانیتور را بخواهید تا وزن را بگیرد ، برای این کار باید t را فشار داده و وارد کنید.
در حال حاضر ، ما باید یک شیئ که وزن آن را میداریم روی ترازو قرار دهیم ، من یک موبایل 194 گرمی را قرار میدهم. پس از قرار دادن شیئ با وزن شناخته شده ، وزن را روی مانیتور سریال تایپ کنید و Enter را بزنید.
اکنون ، مانیتور سریال از شما می پرسد که آیا می خواهید مقدار را در EEPROM ذخیره کنید یا نه ، بنابراین برای انتخاب بله Y را تایپ کنید. اکنون می توانیم وزن را روی مانیتور سریال ببینیم.
کد کامل پروژه در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا قسمت های مختلف کد را توضیح میدهیم.
در بخش کدگذاری ، ابتدا هر سه کتابخانه را اضافه کردیم. کتابخانه HX711 برای گرفتن مقادیر لودسل است. EEPROM کتابخانه داخلی Arduino ide است که برای ذخیره مقادیر در EEPROM و کتابخانه LiquidCrystal برای ماژول LCD l2C استفاده می شود.
#include <HX711_ADC.h> #include <EEPROM.h> #include <LiquidCrystal_I2C.h>
سپس متغیر ها را برای پین های مختلف و مقادیر تعیین شده تعریف میکنیم. عملکرد HX711_ADC loadcell برای تنظیم Dout و پین clock است.
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; long t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; float down_buttonState = 0; float down_lastButtonState = 0;
در بخش setup ، ابتدا ، مانیتور سریال را پیکربندی کردیم ، استفاده ز سریل مانیتور فقط برای اشکال زدایی است. سپس ما حالت پین ها را تعریف کردیم ، همه دکمه های فشاری به عنوان ورودی تعریف شده اند. با کمک PULL UP ، پین ها را در حد حالت معمولی در سطح منطقی 1 قرار می دهیم. بنابراین نیازی نیست از هیچ مقاومت خارجی برای آن استفاده کنیم.
pinMode(tpin, INPUT_PULLUP); pinMode(6, OUTPUT); pinMode(12, OUTPUT); pinMode( Up_buttonPin , INPUT_PULLUP); pinMode( Down_buttonPin , INPUT_PULLUP);
خطوط کد زیر برای تنظیم LCD I2C است. ابتدا ، متن خوش آمد گویی را با استفاده از تابع ()LCD.print نمایش دادیم ، پس از دو ثانیه ، صفحه را با استفاده از lcd.clear() پاک کردیم. یعنی در ابتدا نمایشگر ARDUINO BALANCE را به عنوان متن خوش آمد گویی نشان می دهد و پس از دو ثانیه پاک میکند.
lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("ARDUINO BALANCE"); lcd.setCursor(0, 1); lcd.print("let's measure"); delay(2000); lcd.clear();
سپس شروع به خواندن مقادیر loadcell با استفاده از تابع loadCell.begin() می کنیم ، پس از آن ، EEPROM را برای مقادیر کالیبره شده می خوانیم ، این کار را با استفاده از تابع ()EEPROM.get انجام می دهیم. یعنی ، ما قبلاً مقدار را با استفاده از کالیبراسیون در آدرس EEPROM ذخیره کرده ایم ، فقط آن مقدار را مجدداً گرفته ایم.
LoadCell.begin(); EEPROM.get(calVal_eepromAdress, calibrationValue);
در بخش loop، ابتدا ، بررسی می کنیم که آیا داده ای از لودسل با استفاده از 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("weight :"); lcd.setCursor(9, 1); lcd.print(i); lcd.setCursor(14, 1); lcd.print("GM");
در مرحله بعد ، مقدار tare را تعیین می کنیم ، برای این کار ابتدا وضعیت دکمه tare را با استفاده از تابع digitalRead() می خوانیم ، اگر حالت LOW باشد ، آن وزن را به صفر می رسانیم. عملکرد tare این ترازو این است که خوانش ها را به صفر برساند. به عنوان مثال ، اگر کاسه ای داریم که وسایل در آن قرار داده شده اند ، وزن خالص، وزن کاسه + وزن وسایل خواهد بود. اگر قبل از بارگیری وسایل ، دکمه tare را با کاسه روی لودسل فشار دهیم ، وزن سبد منفی می شود و می توانیم وزن اجسام را به تنهایی اندازه گیری کنیم.
if (digitalRead(tpin) == LOW) { LoadCell.tareNoDelay();
اکنون ، ما باید شرایطی را برای نشانه های مختلف مانند تنظیم بازر و وضعیت LED تعیین کنیم. ما این کار را با استفاده از if انجام دادیم ، در مجموع سه شرط داریم. ابتدا ، تفاوت بین وزن مجموعه و اندازه گیری وزن را محاسبه می کنیم ، سپس آن مقدار را در متغیر k ذخیره می کنیم.
float k = buttonPushCounter-i ;
اگر تفاوت بین وزن تنظیم شده و وزن اندازه گیری بزرگتر یا مساوی 50 گرم باشد ، بازر با 200 میلی ثانیه تأخیر (به آرامی) بوق می زند.
if ( k >= 50 ) { digitalWrite (6, HIGH); delay(200); digitalWrite (6, LOW); delay(200); }
اگر تفاوت بین وزن تنظیم شده و وزن اندازه گیری کمتر از 50 و بیشتر از 1 گرم باشد ، زنگ با 50 میلی ثانیه تاخیر (سریعتر) بوق می زند.
if ( k < 50 && k > 1 ) { digitalWrite (6, HIGH); delay(50); digitalWrite (6, LOW); delay(50); }
هنگامی که وزن اندازه گیری مساوی یا بیشتر از مقدار تعیین شده باشد ، چراغ سبز روشن و بازر و ال ای دی قرمز خاموش می شوند.
if(i>=buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); }
ما دو تابع void دیگر برای تنظیم وزن تنظیم شده (برای شمارش فشردن دکمه) داریم.
هر بار فشردن دکمه وزن تنظیم شده را 10 گرم افزایش میدهد. این کار با استفاده از عملکرد digitalRead آردوینو انجام می شود ، اگر پین LOW باشد ، این بدان معناست که دکمه فشار داده شده است و مقدار 10 گرم افزایش داده میشود.
up_buttonState = digitalRead(Up_buttonPin); if (up_buttonState != up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
به طور مشابه، برای کاهش مقدار وزن تنظیم شده هر بار فشار دکمه وزن را 10 گرم کاهش میدهد.
down_buttonState = digitalRead(Down_buttonPin); if (down_buttonState != down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
این پایان بخش برنامه نویسی است.
این ترازوی الکترونیکی مبتنی بر آردوینو برای اندازه گیری وزن تا 10 کیلوگرم مناسب است (ما می توانیم این محدودیت را با استفاده از لودسل با درجه بالاتر افزایش دهیم). این سیستم دارای دقت 99 درصد در اندازه گیری است.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام وقت به خیر برنامه رو خواستم کامپایل کنم این ارور رو میده مشکل چیه ؟
Compilation error: ‘HX711_dout’ was not declared in this scope
سلام،یک ترازو می شه ساخت که نه تنها وزن مواد غذایی رو بگیره بلکه وزن انسان رو هم بتونه به طور دقیق هم بگیره؟
سلام عزیز
در صورت استفاده از لودسل قوی امکانش هست
درود و سپاس از پاسختون درباره ساخت ترازوی حد نگهدار یا همان دیتالاگر وزن
میتونم خواهش کنم این پروژه رو خودتون در قبال هزینه مربوطه انجام بدید؟
یا یه فرد وارد رو بهم معرفی کنید؟
من دوره آموزشی رو تهیه و شروع میکنم ولی زمان محدودی دارم متاسفانه
ممنونم
سلام عزیز، ما پروژه سفارشی انجام نمیدیم متاسفانه فردی رو هم نمیشناسم که این کار رو براتون انجام بده
کد و شماتیک هست خودتون باید بسازید
درود و سپاس از مطلب جذابتون
اگر بخوایم ترازو حد رو نگهداره چطور باید برنامشو بنویسیم؟؟
بعنوان مثال یه ظرف که شیر داره رو روی ترازو میذاریم و صفرش میکنیم، بعد مثلا ۱۱ لیتر آب میریزیم داخل ظرف، بعد شیرو وا میکنیم و یک لیتر آب ازش خارج میکنیم، ترازو هم مقدار ۱۰ لیتر فعلی رو نشون بده و هم ۱۱ لیتر رو ثبت کنه. ینی هم وزن حاضر رو نشون بده و هم حداکثر بارگذاری رو ثبت و نمایش بده.
چیزی مثل دیتالاگر وزن
لطفا اگر امکان داره راهنماییم کنید
سلام عزیز، باید شرط ایجاد کنید و بگید اگر مقدار بزرگ تر بود در یک متغیر ثبت بشه و اان متغیر رو نمایش بدین. جهت یادگیری آردوینو میتونید دوره آموزش آردوینو رو مشاهده کنید
سلام من یه ترازوی دیجیتالی دارم اتوماتیکه.ولی متاسفانه به کیلو وزن میکنه میخاستم دستور گرم داشته باشه میشه کاری روش کرد که برنامه گرم کش نیز بهش بدی
با سلام میشه راجب نحوه قرار گیری لودسل توضیح بدید؟
با تشکرد
سلام عزیز، یک تصویر دیگر به مطلب اضافه شد مشاهده کنید.