Погода станція: від ідей до реалізації




Я читаю багато статей про розвиток мого пристрою і хотів би розповісти про мій досвід. Це сталося кілька років тому, в 4-му році університету. Тепер я зробив багато речей по-різному, і в той час я був тільки від початку навчання електроніки, це мій перший пристрій, тому не судити суворо.

Я завжди хотів щось більше, ніж звичайний термометр поза вікном або РК-екраном з температурою зовні і в номері. Так, коли я думав, «що це робити», щоб познайомитися з світом мікроконтролерів, відповідь прийшла від себе – мій метеорологічний вокзал. Природно, з відображенням ступенів зовні і всередині приміщень, вологості і тиску. І з підсвічуванням -- Я завжди любив реалізацію прогнозу погоди на Yandex -- один погляд на фоні досить розповісти, якщо це буде теплим або холодним, і скільки.

Всі подальші функціональні можливості були визначені невеликими мозками. Освітлення є обов'язково плюсом, але що про ніч і вечір? Я вирішив встановити IR-сенсор, який відповідає підходу. При підході пристрою на комфортну відстань підсвічування перетворюється, в іншому випадку екран не прогорає за замовчуванням. Використання ІР підштовхується до виконання контролю пристрою також через ІЧ канал – через дистанційний (перших боїв взаємозаходів, але вони не були підтверджені). Він досить натуральний для такого пристрою, щоб мати годинник.

Ардуїно було обрано в якості основи для системи, яку я просто починав майстер. Я вважаю себе Arduino тепер (і потім) в рамках – в першу чергу програмне забезпечення, що дозволяє швидко побудувати необхідну систему, підключення, при необхідності, плагіни-лібрики. Так, ми можемо писати в чистому C / C++, але в більшості звичайних завдань це дає лише невелике збільшення продуктивності, практично неприпустимо на фоні простоти і зручності завантаження ескізів в Arduino, а також велика колекція бібліотек для роботи з різними апаратами. (Справді, є спеціальні завдання, але це не про них.)
У апараті я віддаю перевагу використовувати дошку синього Ардуіно тільки на етапі прототипування на «змії», а в кінці розробки пристроїв, я зазвичай розробляє одну дошку з мікроконтролером і все інше. Це був випадок, який час.

Я почав процес відбору з екрану. Дуже швидко з'явився чудовий екран з RGB-backlit www.adafruit.com/products/398, який дозволив вам отримати практично будь-який колір. Він побудований на популярному чіпі HD44780 і підтримується величезною кількістю бібліотек, включаючи LiquidCrystal в Arduino.

Я також запитав про ціни на індивідуальні дисплеї. Мінімальна ціна за 1 копію монохромного РК-дисплея (як у типовій годійній станції) за цінами цього часу склала близько 1,000 євро, за некомерційний проект в єдиній копії, я вважаю таким цінним тегом невідповідним.



Sharp GP2Y0A02YK0F був обраний як датчик IR. Цей датчик дорівнює 1,5 м, при цьому багато інших датчиків він не перевищує 30 см. У міру того, як операція зарекомендувала себе, для маленького екрана 16х2 і півметра дійсно оптимальна відстань.

В якості датчика тиску був обраний Bosch BMP085, що працює на I2C, вологість HH10D - з частотою виходу. Шукаю вперед, я не буду використовувати останні в даний момент, але б віддати перевагу варіантам I2C, таких як HTU21D.

DS18B20 використовується як зовнішні датчики температури. Їх величезною перевагою є можливість підключення (і відключити при необхідності) на 1 автобусі кілька датчиків одночасно, не маючи зміни коду програми. При бездротовій передачі даних температур я в першому проекті я не зв'язався, особливо, оскільки у мене є можливість укладати проводи без компромації естетики.

IR приймач був прийнятий самим типовим типом, TSOP382. Віддалений для метеорологічної станції був дистанційним з відеореєстратора. Zummer (також squeaker) є найбільш поширеним п'єзо емітентом.



У режимі реального часу я вибрав DS1307, також працює на I2C, і у мене була крихітна 24AA256 64KB флеш- чіп з інтерфейсом I2C. Я додав його до проекту з чистої кіосності, щоб спробувати працювати з зовнішніми пам'ятками, записувати дані по погодних умовах. Харчування для проекту є зовнішнім, від джерела живлення. На в'їзді LM7805 перетворювач напруги / стабілізатор, сам блок живлення дуже схожий на один, який використовується в Arduino (хоча це не клон).

Я розвивала ітерації, тому набагато простіше розбити і познайомитися з новою зоною для себе. На першому етапі дані прочитали з термометра DS18B20 і відображалися на РК-екрані. Далі значення температури були перетворені в код RGB для підсвічування.

Тут я чекаю на функцію кольорового відтворення. Кольоровий контроль екрана здійснюється за допомогою модуляції імпульсів для кожного з трьох світлодіодів підсвічування (на основі стандартної бібліотеки) з 256 кроків - це буде здаватися досить нормальним 24-бітовим кольором. На жаль, довжина хвилі для R, G і B кольорів монітора і підсвічування світлодіодів дуже різні, і через це, звичайні кольори, як #ffff00 виглядають повністю відрізняються від мого РК-екрану (далі – ). Я мав написати програму C# з трьома слайдерами та кольоровим пікіруванням, передає три компоненти кольору до серійного порту Arduino. Потім я мав згадати основи математики і зробити функцію, яка перетворює температуру в градусах Цельсія в колірну шкалу RGB. Природно, я вже не обмежувався жовто-блакитною шкалою Яндекса, і використовую інші кольори на основі моїх асоціацій.

Наступним кроком стала з'єднання IR-дисплей, датчиків температури і вологості. І, якщо виникають проблеми з першими двома (крім пайки BMP085 в корпусі LCC8), датчик вологості викликало багато проблем.

Справа в тому, що остаточне значення відносної вологості обчислюється формулою, одним з аргументів якого є частота означого при виході датчика. Вимірювання частоти здійснюється за допомогою апаратного мікроконтролера. У 328, на жаль, є тільки три такі таймери, і більшість з них вже використовуються в PWM для освітлення дисплея. (Я не пам'ятаю всіх деталей, я можу пропустити щось.)

У зв’язку з цим, у зв’язку з цим, було кілька способів. Якщо я продемонстрував пристрій сьогодні, я обов'язково буду використовувати тільки датчики I2C. Ще одним варіантом було використання більш потужних мікроконтролерів. Я тоді вибрав третій варіант - встановити окремий мікроконтролер для роботи з звуком (шкейкером) і підсвічуванням (запам'ятати це перш за все освітній проект, і я зацікавлений намагатися організувати взаємодію між двома МК). Він також переключив функцію перетворення температури в колір, який зробив його легше за допомогою пари кілограмів для прошивки головного MK (в Atmega328, розмір пам'яті програми становить лише 32 КБ, мій прошивка в кінцевому підсумку прийшла до цього ліміту). Взаємодія МК ще організувала на І2С.

Після цього додано дистанційне, перегляд, флеш-пам'ять. Наступним етапом було написання зручного меню, додаючи функції програмного забезпечення (наприклад, блокування підсвічування в поточному стані, режим великих чисел - як на вуличному годиннику, прокручування через всі параметри), підтримка декількох датчиків температури з їх додаванням / видаленням онлайн (так, я знаю, що краще не робити так). Дуже поширений для ПК - і незвичайний спочатку для пристрою, який ви зібрані, коли без зміни схеми функціонал проекту збільшується кілька разів.

Віддалений використовується деякі власні протоколи. Я не відредагував його, я був задоволений шістнадцятковим представленням кожної кнопки, яку я отримав від бібліотеки IRRemote. Для флеш-пам'яті я вирішив записувати погодні дані кожні 10 хвилин, з довжиною запису 16 байтів це досить 4 місяці.

Код, відповідальний за роботу з флеш-пам'яттюЛоггер.h
#ifndef LOGGGER_h #define LOGGER_h #включити клас LOGER { громадськість: LOGER(вміст); oid storeRecord16(byte* буфер); void getRecord16(не позначений int адреса, tote* buffer); intAddress(); void setAddress(int); приватне: int _FlashI2CAddress; void _getress(); void _Address(); void _settress(); void _Address(); void _Address(); void _Address(); void_Address(); void _Address(); void_Address(); void_Address(); void_Address(); void_Address(); void _Address(); void_Address(); void_Address(); void_Address(); void_Address(); void_Address(); void_Address(); void_Address(); void_Address();
#включити #включити "LOGGER.h" /* MEMORY MAP: 0000 - MSB останньої адреси 0001 - LSB останнього адреси ... 0040 - 7FFF - зберігання, */LOGER:: LOGER(int a) {_FlashI2CAddress=a; } неїдний LOGER: Record16(byte) FF *, FFR, FFREGRESS: 8; Wid/CRESSEDGENDER (S: FFRESS: FF; FFRESS: FFREGRESS / S: 8; FFREGRESS / CRESS: FFRESS / S: FFRESS / CRESS / CREADER / S: FFRESS / FFRESS / S: FFRESS / FFRESS / S: FFREADERS: 16 / FFR / FFR / FFR / FFRESS / FFRESS / FFR / FFRESS / FFR / FFR / FFR / FFR / FFRESS / S: FFRESS / FFRESS / FFRESS / FFRESS / CS: FFRESS / FFR / FFRESS / FFR / FFR / FFR / FFR / CS: FFR / FFR / FFRESS / CS: FFRESS / FFRESS / Дріт.beginTransmission(_FlashI2CAddress); Wire.send(0); Wire.send(0); Wire.endTransmission(); Дріт.requestЗ альбому(_FlashI2CAddress,2); для (c = 0; c< 2; c++ ) якщо (Wire.доступ()) _addr = _addr * 256 + Wire.receive(); } void LOGER:_Address() {Wire.beginTransmission(_FlashI2CAddress); Wire.send(0); //point Wire.send(0); //////////Gerre.s (((((((((((G)))))))))) Провід.re.re.re.s((((((((()))))))))))))))) (Додати: повернення: LOGender: LOGender: FFR) : : : : : LOGender(Gender(Gender(G) в : : : : : LOGender(G)

Дані завантажуються командою з меню метеорологічної станції (щодо меню Старої Nokia або Samsung, але без графіки) до серійного порту.

Після того, як завершена функціональна метеорологічна станція, яка знаходиться у вигляді Arduino і верстка дошки протягом тижня. Під час проведення випробувань виявлено можливість переховування (застосовується порушенням герметичності датчика температури вулиці). Я редизайнував дизайн датчика (на сьогоднішній день я взяв тільки заводський, наприклад), але я хотів виключити дуже можливість висить в принципі. Крім того, я припускав, що після 49 днів безперервної роботи буде переповнення функції. млини(), що, за рахунок особливостей алгоритму прошивки, також призведе до переховування. Що потрібно бути надійним! Таким чином, останнім дотиком в системі стала активація таймера годинника, в результаті будь-яка заморозка гарантовано не триває більше 2 секунд + 5 секунд на перезавантаження (так, в нашому цифровому віці, навіть погодні станції потребують часу на навантаження).

Станція готова і успішно працює. Я думаю, що зупинитися на цьому етапі неправильно. Пристрій повинен бути комфортним і мати готовий зовнішній вигляд, щоб він може бути використаний комфортно і показаний всім, не тільки geek друзів.

Я починав до найближчого радіомагазину і підбираю справу. З 20-30 різних варіантів я хотів одну на малюнку на початку статті - через мінімальну необхідну чергування, через можливість зручно зафіксувати дальність за межі корпусу, щоб вона не була сильною, через хорошу вентиляцію (і тому більш точні читання температури в приміщенні). Сьогодні я хочу замовити принтер 3D і зробити щось схоже на це:





(Важко знайти подібну картину, і я не про на 3D моделювання.) Екран знаходиться вгорі, все інше в стенді. І, звичайно, немає проводів – 433M Hz для датчиків і Wi-Fi для зв'язку з ПК.

Після фурнітури і мислення про те, як краще влаштувати все, це було поворотом для розробки дошки. У першому проекті я використовував Eagle систему. Я звернув контур дошки, поставивши елементи і з'єднання на ньому (так, я зробив цей проект у дорозі «зважений» – без основної схеми). Точно, без схеми в Орлі, слід легко розвести все. Він приніс його до виробництва...

Хабре дуже любить тему виготовлення друкованих плат, тому тут я зберегти. Я знайомий з LUT, але я не маю бажання / вміння робити дошки, включаючи справу з хімією (хлорін є річ). Але в університеті є невелике пілотне виробництво, де за дуже помірними цінами (~ $ 3 за кв.м. в цей час) може виробляти практично будь-який двосторонній РР. Технологія є фоторезистентом, отвори від 0,6 мм, мінімальна ширина доріжки схожа на 0,2 мм (зазвичай не більше, я не пам'ятаю зараз). На жаль, не пропалюється маски, металізація переходів на таку ціну не обов'язково чекати, але це все готове. В кінці, для прототипування (і дошки готуються в день або два) і невеликого масштабу виробництва, можна обійтися без масок (імо; паяльни засоби вручну і великими).
Однак, коли я замовив, я не думав про металізацію переходів. Орел вдало використовувався ніжки елементів, таких як і вартість тільки 2-3 окремих з'єднань між шарами. Людина з питання привернула увагу на це і по-своєму пропонувала найтонші дроти для створення переходів в отвори для елементів (тобто спочатку через отвір до верхньої і нижньої контактної платформи пропалюється проводка, після чого нога самого елемента вже вставляється в неї). Я спробував його, але результати і кількість додаткових робіт не захоплювалися. Я мав відслідковувати дошку, створивши но-го зони, щоб розміститися біля всіх елементів PTH. Тут автоматичний слідувальник відмовився закінчити роботу, і довелося породжувати залишилися ланцюжки вручну (бажачи і час змінити дизайн-систему вже не було). Перехідні отвори були зроблені за допомогою точно тієї ж технології, але я знизила їх кількість. Відповідна плата була незрівнянна.

Далі – робота з свердлом, ножем і файлами, тіло придбав вікно для екрана, кріплення для дошки. Пара вечірок - і пристрій в разі, успішно працює. І все ж, щось відсутні...

І на передній панелі недостатньо наклейка (особливо після різання через вікно в ній). Самоклеючий папір – це велика річ для таких завдань. Що відбулося на заголовку фото, не категорично судді: Після цього зовнішній вигляд пристрою змінився радикально.

Це те, як я (з коротким) розробив мій перший пристрій. За лаштунками залишилося багато коду, багато рішень для різних маленьких проблем, які виникали в ході завдання. Головне, що я отримав за себе, є досвідом у розробці, фаршировані «бампери», розуміння принципів роботи, а також бонус був погодною станцією. Унікальний і унікальний його різновид.


P.S. Я знаю, що багато рішень не оптимальні, але це завдяки їм, що я зараз розумію, що оптимальне і що не: Бонус прикріплюється функціональною схемою англійською та декількома фотографіями, а також рендерною карткою.

Функціональне планування:





Рендер, реальна оплата без ударної маски. Не показаний літієвий тримач акумулятора, п'єзо емітент, DIN-connector (потужність, зв'язок з ПК, датчики) і різні трифлі. Крім того, в реальному пристрої мікроконтролери знаходяться в панелях.

Режим "Великі цифри" для кращої читабельності опубліковано:







Джерело: habrahabr.ru/post/223829/