دستگاه های دیتالاگر یکی از مهم ترین ابزارها در صنعت و پروژه های مختلف به شمار می روند. به کمک این دستگاه ها می توان مقادیر مختلف نظیر دما، رطوبت، شدت نور و…. را در حافظه ها ذخیره نمود. برای ذخیره سازی داده ها می توان از کارت های حافظه SD بهره برد. از آنجاییکه این کارت ها در سیستم عامل های مختلف نظیر ویندوز مورد پشتیبانی هستند، بنابراین می توان داده ها را به سادگی در کامپیوتر، نمایش داد. از طرف دیگر، از آنجاییکه امکان ذخیره سازی داده ها توسط آردوینو به فرمت فایل اکسل وجود دارد، بنابراین به سادگی می توان داده های مورد نظر را به صورت نمودارهای مختلف، ترسیم کرده و مورد ارزیابی و تحلیل قرار داد. در این آموزش، به کمک برد آردوینو UNO و باتری لیتیمی، به طراحی و پیاده سازی یک دستگاه دیتالاگر پرتابل می پردازیم. در این پروژه، دما و رطوبت از طریق سنسور DHT11 اندازه گیری می شود. سپس به کمک ماژول کارت SD، داده ها را در حافظه SD ذخیره می کنیم. پیشتر در رابطه با تغذیه سیستم های مختلف به کمک باتری لیتیمی، آموزشی در دیجی اسپارک منتشر شده است. این آموزش را با کلیک بر روی این لینک، می توانید دنبال کنید. در این پروژه نیز، برد اردوینو و سایر تجهیزات را از طریق باتری لیتیمی تغذیه می کنیم. بدین ترتیب، به کمک این آموزش می توانیم یک دستگاه دیتالاگر با قابلیت حمل(پرتابل)، بسازیم. در ادامه این آموزش، با مرجع تخصصی رزبری پای و آردوینو به زبان فارسی، دیجی اسپارک، همراه باشید.
تعریف دیتالاگر و کاربرد
دیتالاگرها، ابزاری جهت ذخیره سازی داده به شما می روند. به کمک دیتالاگرها می توانید پارامترهای فیزیکی نظیر دما، رطوبت، فشار و …. را اندازه گرفته و ذخیره سازی نمایید. به منظور ذخیره سازی داده، غالبا از کارت های حافظه SD استفاده می شود. این کارت در تلفن های همراه و رایانه ها قابل استفاده هستند. پس از ذخیره داده ها، می توان به تحلیل آن ها از طریق ترسیم نمودارهای مختلف، پرداخت.
در این آموزش به طراحی و پیاده سازی یک دیتالاگر دما و رطوبت پرتابل می پردازیم. از آنجاییکه در ادامه این آموزش کدها و شماتیک و اتصالات را مشاهده خواهید کرد، به سادگی قادر خواهید بود تا یک دیتالاگر بسازید. همچنین با در اختیار داشتن سورس و شماتیک، می توانید محصول را شخصی سازی کرده و امکانات مد نظر خود را به آن بیفزایید. در ادامه این بحث، ابتدا به معرفی اجزا و قطعات دیتالاگر خود می پردازیم. در ادامه شماتیک مدار را مشاهده خواهیم کرد. در نهایت با بررسی کدهای پروژه، به اجرای آن خواهیم پرداخت.
برد آردوینو UNO
سیستم دیتالاگر جهت دریافت داده های سنسور، پردازش و ذخیره آن، نیاز به یک برد کنترلی/پردازشی دارد. برد آردوینو UNO، یک برد فوق العاده کاربردی در نمونه سازی اولیه و حتی محصول نهایی است. به کمک این برد به سادگی می توانید سنسورها، نمایشگرها و ماژول های مختلفی را به آن متصل کنید. این برد راه اندازی و کار با میکروکنترلر را بسیار ساده می کند. کافیست به کمک یک کابل آن را به رایانه متصل کنید. سپس به سادگی و بدون نیاز به هیچ پروگرامر جانبی، می توانید برنامه را بر روی آن منتقل کنید.
بر روی برد آردوینو UNO تمام ملزومات لازم جهت راه اندازی برد تعبیه شده است. از جمله این ملزومات می توان به کریستال و خازن های کاهش نوسان ولتاژ اشاره نمود. همچنین بر روی این برد یک رگولاتور ۳٫۳ ولت جهت تغذیه ماژول های مختلف قرار گرفته است. به طور کلی استفاده از برد آردوینو در پروژه ها، سبب تسریع و تسهیل روند توسعه خواهد شد.
سنسور دما و رطوبت DHT11
سنسور دما و رطوبت DHT11، یک سنسور بسیار کاربردی جهت سنجش میزان دما و رطوبت است. به کمک این سنسور و به سادگی تمام، می توانید میزان دما و رطوبت محیط را با آردوینو بسنجید و نمایش دهید. این سنسور تنها از یک پایه جهت ارسال داده ها استفاده می کند. جهت راه اندازی و کار با این سنسور، کتابخانه تحت آردوینو توسعه یافته که روند توسعه پروژه را بسیار تسریع خواهد بخشید. در این پروژه، به کمک سنسور DHT11، دما و رطوبت محیط را اندازه گرفته و در حافظه کارت SD، به صورت یک فایل اکسل، ذخیره خواهیم نمود.
ماژول کارت SD
ماژول کارت SD، یک ابزار فوق العاده کاربردی جهت راه اندازی و کار با کارت های حافظه SD است. به کمک این ماژول می توانیم کارت حافظه را به برد آردوینو متصل کنیم. به لطف توسعه کتابخانه جامع و کاربردی، قادر به ذخیره داده بر روی کارت SD وخواندن داده های از پیش ذخیره شده بر روی حافظه، هستیم. پروتکل ارتباطی این ماژول ازنوع SPI بوده و با بردهای آردوینو و ESP، سازگاری کامل دارد. پیش از این در آموزشی، به صورت جامع به راه اندازی و کار با این ماژول پرداخته ایم. این آموزش را با کلیک بر روی این لینک، می توانید دنبال کنید.
در این آموزش به کمک ماژول کارت SD، داده های دما و رطوبت را به صورت یک فایل اکسل، در حافظه SD ذخیره می کنیم. بدین صورت می توانیم فایل را در سیستم عامل ویندوز باز کرده و به کمک قابلیت ترسیم نمودار اکسل، داده ها را با انواع مختلفی از نمودارها تحلیل و بررسی کنیم.
باتری لیتیم پلیمر
همانطور که پیش از این گفته شد، در این پروژه به کمک یک باتری لیتیم پلیمری، تغذیه دستگاه دیتالاگر خود را تامین می کنیم. باتری های لیتیمی با وزن سبک و ابعاد کوچک، انتخاب مناسبی برای تغذیه سیستم ها هستند. افزون بر این، این باتری در دستگاه های قابل حمل، انتخابی مناسب به شمار می روند. باتری های لیتیمی را می توان به دو دسته پرمصرف یونی و پلیمری تقسیم نمود. ظرفیت بالاتر، ابعاد کوچکتر و وزن سبک تر از جمله برتری های پلیمری نسبت به یونی است.
از آنجاییکه باتری های لیتیم پلیمری به سادگی از طریق شارژرهای موبایل شارژ می شوند، بنابراین می توانیم باتری تغذیه سیستم دیتالاگر را با خیالی آسوده شارژ کنیم. جهت شارژ باتری می بایست از ماژول شارژر باتری استفاده نماییم. این ماژول دارای سوکت شارژ متناسب با شارژرهای تلفن همراه بوده و می تواند باتری را به سادگی شارژ نماید.
ماژول های افزاینده و کاهنده ولتاژ
برد آردوینو UNOف قابلیت تغذیه از طریق کابل USB و جک آداپتور را دارد. همچنین بر روی این برد، پایه ای به نام VIN، به ورودی مثبت جک آداپتور نیز متصل است. به لطف وجود رگولاتورهای ۵ ولت و ۳٫۳ ولتی، برد آردوینو قابلیت تغذیه از طریق پایه VIN و جک آداپتور را در بازه ۶ الی ۱۲ ولت، داراست. از طرف دیگر، ولتاژ باتری لیتیم پلیمری در بازه ۳٫۴ الی ۴٫۲ قرار می گیرد. در این پروژه ما قصد تغذیه آردوینو از طریق پایه VIN را داریم. بنابراین، ابتدا ولتآژ باتری را به کمک رگولاتور XL6009، تا ۹ ولت بالا می بریم.
از طرف دیگر، با توجه به ریپل ها و نوسان های احتمالی در خروجی ماژول XL6009 که می تواند بر عملکرد آردوینو تاثیر گذاشته و موجبب آسیب به آن شود، از ماژول کاهنده ولتاژ LM2596 بهره می بریم. به کمک ماژول کاهنده، ولتاژ ۹ ولت افزایش یافته را به ۷ ولت، کاهش می دهیم. در رابطه با دلیل این موضوع و اطلاعات تکمیلی، می توانید آموزش جامع افزایش ولتاژ باتری لیتیم پلیمیری را با کلیک بر روی این لینک، دانلود کنید.
شماتیک و اتصلات پروژه
در این قسمت به بررسی شماتیک و اتصالات پروژه می پردازیم. ابتدا در زیر، فرم کلی سیم کشی ها مشاهده می شود.
در ادامه، سیم کشی های این مدار را مطابق تصویر فوق پی می گیریم. برای این منظور، اتصالات مدار دستگاه دیتالاگر را قسمت به قسمت، به صورت زیر انجام دهید.
سیم کشی و اتصالات مدار تغذیه(پاور) سیستم
- باتری با رعایت پلاریته به ورودی ماژول افزاینده متصل شود. خروجی ماژول بر روی ۹ ولت تنظیم شود. در مسر اتصال پلاریته مثبت باتری به ماژول افزاینده، یک کلید به صورت سری قرار دهید. این کلید وظیفه روشن و خاموش سازی مدار را بر عهده دارد.
- خروجی ماژول افزاینده با اتصال یک دیود به صورت سری و در بایاس مستقیم، به ووردی ماژول کاهنده متصل گردد.(توجه، GND خروجی افزاینده به GND ورودی کاهنده متصل شود. ممکن است بر روی ماژول شما های شما، عبارت -OUT برای خروجی منفی و -IN برای ورودی منفی درج شده باشد که به معنای عبارت GND است)
- خروجی ماژول کاهنده بر روی ۷ ولت متصل شود. پایه GND و یا -OUT ماژول به یکی از پایه های GND آردوینو متصل شود. پایه خروجی مثبت و یا +OUT نیز به پایه VIN آردوینو متصل شود.
- پلاریته مثبت باتری (بدون اتصال کلید) به پایه +B ماژول شارژر متصل گردد. به طریق مشابه، پایه -B ماژول به پلاریته منفی باتری متصل شود.
سیم کشی و اتصالات سنسور دما و رطوبت DHT11
- اتصال پایه VCC به ۳٫۳ ولت آردوینو
- اتصال پایه GND سنسور به یکی از پایه های GND آردوینو
- اتصال پایه دیتا سنسور به پایه GPIO5 آردوینو
سیم کشی و اتصالات ماژول SD کارت
- اتصال پین ۱۱ آردوینو به پایه MOSI
- اتصال پین ۱۲ آردوینو به پایه MISO
- اتصال پین ۱۳ آردوینو به پایه SCK
- اتصال پین ۴ آردوینو به پایه CS
- پایه VCC ماژول SD را به پایه ۵ و پایه GND آن را به پایه GND آردوینو، متصل نمایید.
کدهای پروژه دیتالاگر
در این قسمت کدهای پروژه دیتالاگر پرتابل را مشاهده می کنید. این کدها برای برد آردوینو UNO توسعه یافته اند. توجه داشته باشید که هنگام آپلود کدها، تغذیه برد آردوینو از باتری جدا شده و تنها از طریق کابل، آردوینو به آردوینو متصل کرده و کدها را آپلود نمایید.
#include <SPI.h> //فراخوانی کتابخانه SPI #include <SD.h> //فراخوانی کتابخانه SD #include "DHT.h" //کتابخانه سنسور دما و رطوبت #define DHTPIN 5 //انتخاب پایه دیتا سنسور دما و رطوبت #define DHTTYPE DHT11 //تعیین نوع سنسور DHT dht(DHTPIN, DHTTYPE); //ایجاد یک شی از متابخانه سنسور DHT const int chipSelect = 4; //انتخاب پایه ۴ به عنوان پایه CHIP SELECT ماژول void setup() { Serial.begin(9600); while (!Serial) { //انتظار برای راه اندازی پورت سریال } Serial.print("Initializing SD card..."); if (!SD.begin(chipSelect)) { //راه اندازی کارت SD Serial.println("Card failed, or not present"); while (1); } Serial.println("card initialized."); dht.begin(); //راه اندازی سنسور دما } void loop() { String data = ""; data = ""; //پاک کردن داده های قبلی data = data + String(dht.readTemperature()); //دریافت دما و ذخیره سازی در متغیر data data = data + ","; //جداسازی داده ها از طریق ویرگول جهت ایجاد فرمت اکسل data = data + String(dht.readHumidity()); // دریافت رطوبت از سنسور و ذخیره سازی در متغیر data //توجه: در فایل اکسل، ستون اول مربوط به دما و ستون دوم مربوط به رطوبت خواهد بود. File dataFile = SD.open("datalog.CSV", FILE_WRITE); //ایجاد و باز کردن یک فایل در کارت SD با پسوند .CSV، این پسوند برای فایل اکسل به کار می رود. if (dataFile) { dataFile.println(data); //هرداده در یک سطر قرار گرفته و داده های بعدی در سطرهای بعدی قرار م یگیرند dataFile.close(); //بستن فایل برای استفاده در دفعات بعدی // print to the serial port too: Serial.println(data); Serial.flush(); } else { Serial.println("error opening datalog.CSV"); Serial.flush(); } }
اجرای پروژه دیتالاگر پرتابل
در این قسمت به اجراای پروژه دیتا لاگر می پردزایم. توجه داشته باشید که پیش از اجرا، حتما باتری را شارژ کرده باشید. برای این منظور، با روشن کردن دستگاه، سیستم به طور خودکار شروع به اندازه گیری دما و رطوبت و ثبت داده ها در حافظه SD می نماید. پس از چند لحظه می توانید دستگاه را خاموش کرده و حافظه را خارج سازید. با اتصال حافظه به رایانه، فایلی به نام DATALOG.CSV را مشاهده خواهید کرد. با کلیک بر روی فایل، تصویر زیر را مشاهده خواهید کرد.
مطابق تصویر فوق، داده ها در دو ستون ذخیره شده اند. ستون نخست مربوط به دما و ستون دوم، داده های مربوط به رطوبت را نمایش می دهد. از آنجاییکه نرم افزار اکسل قابلیت ترسیم نمودار را در خود جای داده، بنابراین داده های مربوط به دما را به شکل زیر، می توانیم ترسیم و تحلیل، نماییم.
تحلیل و بررسی کدهای پروژه دیتالاگر پرتابل
در این قسمت به بررسی کدهای پروژه می پردازیم. توجه داشته باشید که درون کدهای پروژه، کامنت(توضیح) به ازای هر خط و برای هر قسمت قرار گرفته است. این توضیحات به گونه ایست که با مطالعه آن، روال کار را به سادگی دریافت خواهید کرد. اما در اینجا به طور خلاصه به بررسی کدهای پروژه می پردازیم. در ابتدا کتابخانه های سنسور DHT و ماژول SD را به صورت زیر در برنامه قرار می دهیم.
#include <SD.h> //فراخوانی کتابخانه SD #include "DHT.h" //کتابخانه سنسور دما و رطوبت
در ادامه پس از راه اندازی اولیه سنور دما/رطوبت و ماژول کارت SD، در حلقه تکرار برنامه، داده ها را از سنور خوانده و با بازکردن فایل، آن ها را در حافظه SD ذخیره می کنیم. برای اطلاعات بیشتر در رابطه با نحوه ذخیره سازی داده درون کارت SD، با کلیک بر روی این لینک می توانید آموزش آن را مطالعه کنید.
اضافه کردن نمایشگر TM1637 به پروژه
در این پروژه می توان با اضافه کردن یک نمایشگر، مقادیر دما و رطوبت را به علاوه میزان درصد شارژ باتری، نمایش داد. بدین ترتیب، دستگاه دیتالاگر علاوه بر ذخیره داده ها در کارت SD، به کمک نمایشگر می تواند به صورت بلادرنگ، داده ها را به کاربر نمایش دهد. برای نمایش داده ها، می توان از ماژول نمایشگر TM1637 استفاده نمود. این نمایشگر که یک نمایشگر سون سگمنت است، داده ها را به شکل جذابی نمایش می دهد.
راه اندازی و کار با ماژول نمایشگر TM1637 بسیار ساده است. این نمایشگر از پروتکل I2C پشتیبانی می کند. بنابراین تنها به کمک دو پایه، می توانیم ۴ سگمنت در آموزش های بسیاری اختیار داشته باشیم. به لطف توسعه کتابخانه جامع و استاندارد تحت آردوینو، راه اندازی و کار با این نمایشگر بسیار ساده است. برای راه اندازی و کار با مازول TM1637 آموزش های بسیاری در دیجی اسپارک منتشر شده است. با کلیک بر روی این لینک می توانید آن ها را مشاهده و مطالعه نمایید.
نصب کتابخانه های مورد نیاز
همانطور که پیشتر گفته شد، در این پروژه از ماژول TM1637 جهت نمایش دما و رطوبت اندازه گیری شده استفاده می کنیم. همچنین به کمک این نمایشگر قادر به نماش میزان درصد شارژ باتری نیز، خواهیم بود. به همین منظور، نیاز است تا در ابتدا، کتابخانه این نمایشگر را در نرم افزار آردویینو، نصب نماییم. برای نصب کتابخانه نمایشگر Seven Segment، ابتدا در نرم افزار آردویینو، روی منوی Tools و سپس Manage Libraries کلیک کنید. در قدم بعدی، در منوی ظاهر شده، در کادر جستجو، عبارت TM1637 را جستجو کرده و در میان کتابخانه های ظاهر شده، کتابخانه مشخص شده با کادر قرمز رنگ در تصویر زیر را نصب نمایید.
در این پروژه، به کمک ماژول نمایشگر سون سگمنت TM1637، مقادیر دما و رطوبت را نمایش می دهیم. در این نمایشگر، دو رقم سمت چپ مربوط به دما و دو رقم سمت راست مربوط به رطوبت خواهد بود. همچنین در این قسمت، کلیدی در پروژه تعبیه شده است. با فشردن کلید، وضعیت نمایشگر تغییر کرده و میزان درصد شارژ باتری، نمایش داده می شود. به منظور اندازه گیری میزان درصد شارژ باتری، از کتابخانه مخصوصی که به این منظور توسعه یافته، استفاده می کنیم. برای دانلود و نصب این کتابخانه، مطابق روش فوق، در کادر جستجو “Battery Sense” را تایپ کنید. با مشاهده تصویر زیر، کتابخانه را نصب نمایید.
توجه: کتابخانه TM1637 مورد استفاده در این پروژه، نسخه ۱٫۰٫۰ و کتابخانه باتری، ۱٫۱٫۱ است.
شماتیک و اتصالات به همراه نمایشگر
همانطور که پیشتر بیان شد، در این پروژه با اضافه کردن نمایشگر، علاوه بر ذخیره سازی داده در کارت SD، می توانیم مقادیر دما و رطوبت را به همراه درصد شارژ باتری، نمایش دهیم. شماتیک کلی مدار را پیشتر مشاهده کرده اید. در این قسمت، تنها کافیست اتصالات ماژول سگمنت را به شکل زیر، انجام دهید.
- اتصال پایه VCC ماژول به ۵ ولت آردوینو
- اتصال پایه CLK ماژول به پایه ۲ آردوینو
- اتصال پایه DIO ماژول به پایه ۳ آردوینو
- اتصال پایه GND ماژول به یکی از پایه های GND آردوینو
همانطور که بیان شد، در این قسمت به کمک یک کلید، وضعیت نمایشگر تغییر می کند. برای این منظور پایه ۶ آردوینو با مقاومت داخلی پول آپ شده است. شما می بایست یک طرف کلید را به این پایه و طرف دیگر آن را به زمین متصل کنید. در حالت عادی، نمایشگر دما و رطوبت را نمایش می دهد. با فشردن این کلید، اتصال پایه ۶ با زمین برقرار شده و نمایشگر میزان شارژ باتری را نمایش خواهد داد. از دیگر قابلیت های این پروزه با اضافه شدن نمایشگر، نمایش درصد شارژ باتری است. برای این مورد، پلاریته مثبت باتری به کمک یک مقاومت یک کیلو اهمی به صورت سری، به پایه A0 آردوینو متصل گردد.
کدهای پروژه به همراه نمایشگر
در این قسمت کدهای پروژه را به همراه قابلیت نمایش داده بر روی نمایشگر سون سگمنت، مشاهده می کنید. توجه داشته باشید که این کدها برای برد آردوینو UNO توسعه یافته اند. بنابراین، در منوی Tools->Boards، گزینه arduino uno را انتخاب کنید. سپس کدهای زیر را بر روی برد، آپلود نمایید. همچنین، مشابه سری پیش، ابتدا کدها را به کم کابل آپلود کرده و سپس تغذیه را متصل کنید. زمانیکه در حال آپلود کد بر روی آردوینو هستید، به هیچ عنوان تغذیه آردوینو از طریق باتری را متصل نکنید.
#include <SPI.h> //فراخوانی کتابخانه SPI #include <SD.h> //فراخوانی کتابخانه SD #include "DHT.h" //کتابخانه سنسور دما و رطوبت #include <Battery.h> //اضافه کردن کتابخانه باتری Battery battery(3400, 4200, A0); //ایجاد یک نمونه شی از کلاس باتری، ورودی اول حداقل ولتاژ، دوم حداکثر و سومی پین آنالوگ جهت خواندن مقدار باتری این مقادیر برای باتری لیتیم یونی و پلیمیری تعیین شده اس #define DHTPIN 5 //انتخاب پایه دیتا سنسور دما و رطوبت #define DHTTYPE DHT11 //تعیین نوع سنسور DHT dht(DHTPIN, DHTTYPE); //ایجاد یک شی از متابخانه سنسور DHT const int chipSelect = 4; //انتخاب پایه ۴ به عنوان پایه CHIP SELECT ماژول #include "SevenSegmentTM1637.h" const byte PIN_CLK = 2; // پایه کلاک const byte PIN_DIO = 3; // پایه دیتا SevenSegmentTM1637 display(PIN_CLK, PIN_DIO); #define key 6 //انتخاب پاسه ۶ به عنون کلید تییر دهنده وضعیت نمایش String tmp = ""; //متغیر جهت ذخیره دما String hum = ""; //متغیر جهت ذخیره رطوبت void setup() { Serial.begin(9600); while (!Serial) { //انتظار برای راه اندازی پورت سریال } //******************************************************************** battery.begin(5000, 1.0); // در این تابع از آنجاییکه ولتاژ مرجع اردوینو ۵ ولت است، مقدار آن به میلی ولت در ووردی اول قرار می گیرد. برای ورودی دوم، از آنجاییکه //********************************************************************** display.begin(); // راه اندازی نمایشگر display.setBacklight(100); // تنظیم نور بر روی بیشینه display.print("INIT"); //نمایش عبارت INIT به معمنای در حال راه اندازی //********************************************************************** Serial.print("Initializing SD card..."); if (!SD.begin(chipSelect)) { //راه اندازی کارت SD Serial.println("Card failed, or not present"); while (1); } Serial.println("card initialized."); //********************************************************************** dht.begin(); //راه اندازی سنسور دما display.print("SUSS"); //نمایش عبارت suss به معنای success هنگام راه اندازی delay(1000); //********************************************************************** pinMode(key, INPUT_PULLUP); //تعریف پایه ۶ به عنوان ورودی با پول آپ داخلی } void loop() { read_sensor_data(); //تابع جهت خواندن مقادیر سنسور save_data(); //تابع جهت ذخیره داده display_data(); //تابع جهت نمایش داده } void read_sensor_data() { tmp = ""; //پاک کردن داده های قبلی hum = ""; //پاک کردن داده های قبلی int sum_t = 0; int sum_h = 0; //داده ها را برای جهت افزایش دقت، ۱۵۰ بار خوانده و سپس میانگین میگیریم. for (int i = 0 ; i < 150; i++) { sum_t = sum_t + round(dht.readTemperature()); sum_h = sum_h + round(dht.readHumidity()); } //تقسیم بر ۱۵۰ برای میانگین گیری sum_t = sum_t / 150; sum_h = sum_h / 150; if (sum_t < 10 && sum_t >= 0) { //در صورتیکه مقدار دمای اندازه گیری شده کمتر از ۱۰ باشد، یک صفر پشت عدد اضافه می کنیم تا دو سگمنت اول همچنان دما را نمایش دهند tmp = "0"; tmp = tmp + String(sum_t); } else tmp = String(sum_t); //دریافت دما و ذخیره سازی در متغیر hum = String(sum_h); // دریافت رطوبت از سنسور و ذخیره سازی در متغیر } void save_data() { //تابع ذخیره سازی داده در کارت SD String data = ""; data = tmp; //ذخیره داده دما در دیتا data = data + ","; //قرار دادن ویگول بعد از مقدار دما data = data + hum; //قرار دادن رطوبت بعد از دما، به طور کلی داده در فرمت اکسل، هر فیلد از یک رکورد با ویرگول جدا می شود. File dataFile = SD.open("datalog.CSV", FILE_WRITE); //ایجاد و باز کردن یک فایل در کارت SD با پسوند .CSV، این پسوند برای فایل اکسل به کار می رود. if (dataFile) { dataFile.println(data); //هرداده در یک سطر قرار گرفته و داده های بعدی در سطرهای بعدی قرار م یگیرند dataFile.close(); //بستن فایل برای استفاده در دفعات بعدی // print to the serial port too: Serial.println(data); Serial.flush(); } else { Serial.println("error opening datalog.CSV"); Serial.flush(); } } void display_data() { //نابع نمایش داده String data_d = ""; if (digitalRead(key) == HIGH) { //پایه ۶ جهت تعیین وضعیت نمایش تعیین شده است. از آنجاییکه این پایه با مقاومت داخلی پول آپ است، وضعیت آن در حالت عادی، یک منطقی است. پس در این حالت //دما و رطوبت را نمایش می دهیم. دو رقم سمت چپ دما و دور قم سمت راست رطوبت است. data_d = tmp; //قرار دادن داده دما در متغیر data_d = data_d + hum; //اضافه کردن داده رطوبت به متغیر //توجه: در این حالت ۴ رقم در رشته خواهیم داشت. دو رقم نخست مربوط به دما و دو رقم بعدی مربوط به رطوبت است. نمایشگر از چپ به راست، داده هارا که شامل دما و رطوبت است نمایش می دهد. display.clear(); //پاک کردن نمایشگر از داده های قبلی display.home(); //قرار دادن مکان نما در ابتدای نمایشگر display.print(data_d); //نمایش داده ها delay(500); } else { //در صورتیکه کلید فشرده شده باشد، مقدار پایه ۶ صفر می شود. در این حالت میزان شارژ باتری را نمایش می دهیم. int sum = 0; int batt_lvl = 0; for (int i = 0; i < 150; i++) { //برای دقیقتر شدن مقدار درصد شارژ اندازه گیری شده، مقدار درصد شارژ را ۱۵۰ بار خوانده و سپس میانگین می گیریم/ batt_lvl = int(battery.level()); //دریافت سطح شارژ باتری sum = sum + batt_lvl; } //تقسیم بر ۱۵۰ برای بدست آوردن میانگین sum = sum / 150; batt_lvl = sum; display.clear(); //پاک کردن صفحه نمایش از داده های قبلی display.home(); //قرار دادن مکان نما در ابتدای نمایشگر display.print(batt_lvl); //نمایش درصد باتری در نمایشگر Serial.println(batt_lvl); Serial.flush(); delay(500); } }
دیتالاگر پرتابل به همراه نمایشگر
در این قسمت به اجرای پروژه دیتالاگر می پردازیم. همانطور که پیشتر بیان شد، در نمایشگر، دو رقم نخست مخصوص نمایش دما و دو رقم بعدی، مخصوص نمایش رطوبت است. پس از روشن شدن دستگاه، مقادیر دما و رطوبت در نمایشگر، به نمایش در می آید.
در صورتیکه نیاز به نمایش درصد شارژ باتری داشته باشید، به فشردن کلید آن، به سادگی مقدار درصد شارژ باتری، بر روی نمایشگر به نمایش در خواهد آمد.
تحلیل کدهای پروژه به همراه نمایشگر
پس از اجرای و مشاهده عملکرد دستگاه، به تحلیل کدهای پروژه می پردازیم. همانند قسمت قبلی، درون کدهای پروژه کامنت(توضیح) به صورت خط به خط و کامل قرار گرفته است. در اینجا به طور خلاصه، به بررسی عملکرد و توابع کلیدی می پردازیم. در این قسمت، جهت استاندارسازی هرچه بیشتر کدهای برنامه، ۳ تابع اصلی تعریف شده است. این سه تابع عبارتد از:
- read_sensor_data
- save_data
- display_data
تابع نخست، وظیفه خواندن داده های مرطوب به دما و رطوبت را دارد. این داده ها در متغیر های از پیش تعریف شده، ذخیره می شوند. پس از این، تابع save_data داده های خوانده شده را در کارت SD ذخیره می نماید. این ذخیره سازی تحت فرمت فایل اکسل، خواهد بود. در نهایت تابع display_data، داده های دما و رطوبت را نمایش می دهد. در این تابع، ابتدا وضعیت پایه ۶ آردوینو کنترل می شود. چنانچه وضعیت این پایه ۱ باشد، یعنی کلید تغییر وضعیت نمایش فشرده نشده است. بنابراین دما و رطوبت از چپ به راست و دو رقم دورقم، نمایش داده می شوند. در صورتیکه این پایه مقداری غیر از ۱ داشت، یعنی کلید فشرده شده است. در این حالت، به جای دما و رطوبت، میزان درصد شارژ باتری نمایش داده خواهد شد.
لوازم مورد نیاز
جمع بندی
در این آموزش به طراحی و پیاده سازی یک دستگاه دیتالاگر پرتابل، با قابلیت تغذیه از طریق باتری لیتیمی پرداختیم. از آنجاییکه دستگاه های دیتالاگر یکی از پرکاربردترین ابزارها در پروژه ها و اماکن مختلف به شمار می روند. در این پروژه، به کمک برد آردوینو UNO و سنسور DHT11، یک دستگاه دیتالاگر دما و رطوبت می سازیم در این دستگاه، داده ها بر روی کارت SD ذخیره می شوند. افزون بر این، با اضافه کردن نمایشگر، می توانیم علاوه بر ذخیره داده، آن ها را نیز نمایش دهیم. در این پروژه، تغذیه سیستم دیتالاگر را از طریق باتری لیتیم پلیمری تامین می نماییم. از طرف دیگر، به کمک ماژول شارژر، می توانیم باتری دستگاه را به سادگی و از طریق شارژرهای اندرویدی، شارژ نماییم.
چنانچه ابهامی در مطالب گفته شده می بینید و یا اینکه احساس می کنید مباحث گفته شده برای شما گنگ است، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها، مطالب گفته شده و یا مراحل اجرایی وجود دارد میتوانید از همین طریق اطلاع رسانی کنید.
سلام
از این بخش تقسیم ولتاژی که شماتیکش را گذاشتید، برای پروژه های آردوینویی میشه استفاده کرد؟
سلام
کدام بخش را منظورتان هست؟ بخش افزایش ولتاژ یا تقسیم مقاومتی؟
سلام
مهندس جان بسیار عالی خدا پاداش نیک بهت بده.
مهندس یه جا اشاره کردی که مدار رو که چیدیم بعدش کد رو با کابل روی آردوینو اجرا می کنیم. حالا اگه بخوایم از باتری واسه تغذیه استفاده کنیم چیکار باید کرد؟ باتری رو دوباره وارد مدارکنیم و کابل رو از سیستم بکشیم؟ ترتیبش مهمه؟ من این قسمت واسم سواله ممنون میشم راهنماییم کنین.
تشکر
سلام و ببخشید که دیر جواب می دهم
از لطف شما بی نهایت ممنونم
شما ابتدا یکبار آردوینو را با کابل پروگرام کنید. سپس کابل را جدا کرده و آردوینو را با باتری تغذیه کنید.
با سلام
در صورت امکان تغییرات لازم در سنسور و کد دیتا لاگر را جهت ساخت دیتا لاگر برق که قابلیت اندازه گیری تغییرات ولتاژ برق شهر رو داشته باشه میفرمایید؟
سپاس از لطفتون
با سلام
برای این منظور بایستی از سنسور ولتاژ استفاده کنید. براساس ماژول مورد استفاده بایستی کتابخانههای لازمه را اضافه کرده و کدنویسی کنید. مورد درخواستی شما را نمیتوانیم از طریق بخش نظرات پیگیری کنیم.
سلام وقت بخیر
برای ساخت دیتا لاگر جهت چهار سنسور دما ds18b20 و یک سنسور دما و رطوبت SHT10 چه چیز هایی رو باید تغییر بدیم؟
با سلام
بایستی برنامه نوشته شده را کلا تعییر بدهید. اگر منظورتان این است که براساس درخواست شما کدها را بازنویسی کنیم، چنین موردی امکان پذیر نیست.
با سلام و احترام
آیا این امکان هست که مثلا با استفاده از پورت یو اس بی داده ها رو به کامپیوتر ارسال کنیم
مثلا با استفاده از بنامه نویسی سی شارپ
با سلام
هر اقدامی که مد نظرتون باشه را میتوانید انجام دهید ولی نیازمند تغییرات در کدهای این پروژه است.