هدف از این پروژه ایجاد یک دستگاه ساده و قابل حمل بود که
به طور دورهای حسگرها را میخواند و سپس دادههای حسگر را ذخیره میکرد تا بتوان بعداً آنها را بازیابی کرد.
نتیجه HexiLogger، "hexi" است زیرا می تواند تا شش ورودی سنسور مختلف و "logger" را پشتیبانی کند زیرا داده های ورودی را روی یک کارت حافظه SD قابل جابجایی ذخیره می کند.
سخت افزار
من پروژه را با استفاده از تراشه ATmega168 که همراه با برد Diecimila بود شروع کردم، اما به سرعت متوجه شدم که کتابخانه های Fat16 که برای پشتیبانی از کارت حافظه SD نیاز دارند، محدودیت رم فلش 168 را کاهش می دهند. ارتقاء به تراشه 328 آسان بود. فقط تراشه ها را عوض کنید و سپس محیط توسعه آردوینو را برای کامپایل برای ATmega328 (Tools/Board) تغییر دهید. انجام این کار فضای برنامه را دو برابر کرد و رفتار عجیبی را که با تراشه eh 168 مشاهده می کردم متوقف کرد.
روی برد آردوینو یک محافظ GPS AdaFruit قرار دارد . من فقط علاقه مند به استفاده از کارت SD شیلد بودم، بنابراین ماژول GPS یا کد GPS پشتیبانی کننده در این پروژه وجود ندارد. تنها تغییراتی که من در شیلد GPS انجام دادم اضافه کردن مجموعه ای از سه پین هدر زن به بالای شیلد GPS برای دسترسی به ورودی های آنالوگ آردوینو و خطوط داده D0-D7 بود.
به بالای سپر GPS یک سپر رابط کاربری Homebrew متصل شده است که اجازه می دهد ورودی بازه زمانی ثبت، LED های بازخورد کاربر و اتصالات حسگرها را انجام دهد.
سنسورهای مورد استفاده TMP36 از دستگاه های آنالوگ در بسته بندی TO-92 هستند، اما هر سنسوری که می تواند به آردوینو متصل شود می تواند استفاده شود.
نرم افزار
نرم افزار HexiLogger شامل موارد زیر است:
– کتابخانه های Fat16
– کد پشتیبانی از رابط کاربری
– پشتیبانی از سنسور
چندین کتابخانه برای تعامل Arduino/Fat16 وجود دارد، و بسیاری از آنها تغییراتی از یکدیگر هستند. من چند مورد مختلف را امتحان کردم و به دلیل پشتیبانی مستقیم از کارت SD، Fat16 را حل کردم. نصب کتابخانه ساده است، فقط آن را به پوشه arduino-0016/hardware/libraries اضافه کنید و #include "Fat16.h" و #include "SdCard.h" را در کد قرار دهید. روالهای HexiLogger InitializeCard() و writedataToCard() فایل ذخیرهسازی روی کارت SD را مدیریت میکنند.
سوئیچ های رابط کاربر توسط تابع HexiLogger DetermineTimeDelay() خوانده می شوند که فاصله زمانی خواندن سنسورها را تعیین می کند. displayCardErrorIndicator()، displayRunIndicator() و
displayWriteIndicator() همگی نمایشگر LED را کنترل می کنند.
اطلاعات بیشتر در مورد نحوه استفاده از سوئیچ های ورودی برای تنظیم فاصله را می توان در یکی از پروژه های دیگر من یافت.
هر نوع سنسور برای تبدیل داده های خام از ورودی های آنالوگ به یک مقدار معنی دار به عملکرد نرم افزاری خاص خود نیاز دارد. من چهار مورد، processLM35SensorDegF()، processTMP36SensorDegF()، processTMP36SensorDegC()
و processPhotoCell() را برای مدیریت برخی از انواع حسگرهایی که در طول توسعه استفاده کردم، اضافه کرده ام.