- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Занимательная электроника - Юрий Ревич
Шрифт:
Интервал:
Закладка:
Полную программу метеостанции с OLED-индикаторами, построенной согласно схеме на рис. 22.1 с добавленными функциями записи на SD-карту, можно скачать с сайта автора по ссылке http://revichJib.ru/AVR/Meteo_OLED.zip. Внешний вид индикационной панели с отображением данных показан на рис. 22.7 далее, в разд. «Конструкция». Согласно этой программе, при каждом включении питания в файл data.txt будет записываться строка Arduino meteostation data. А в установленные моменты времени в него записываются данные в виде строки:
06:00 06.04.14 +21.2 26 750 +20.7 27 4.4
Здесь после значения времени идут сведения о внутренней температуре и влажности, затем давление, потом температура и влажность с выносного датчика. В конце выводится информация о напряжении батареи датчика, которая позволит осуществлять контроль за работой узла определения разрядки батареи (в случае необходимости подкорректировать порог надо знать, при каком напряжении датчик прекратил работу). Строка содержит 40 символов, так что об исчерпании пространства на карте можно не беспокоиться — самой маленькой карты объемом в гигабайт хватит примерно на 8 тысяч лет непрерывной записи. Учитывая такой объем свободного пространства, на карте удобно заодно хранить все сопутствующие программы: Arduino IDE вместе с прошивкой станции и утилиту для установки часов. В соответствии с программой, запись данных на карту будет происходить в часы, кратные трем: в 0, 3, 6, 9, 12, 15, 18 и 21 час. Согласно международным правилам, три часа составляют так называемый синоптический интервал, а моменты записи должны отсчитываться по всемирному времени UTC. В настоящее время московский регион отличается от UTC на четыре часа (т. е. всемирному времени 00:00 соответствует московское 04:00), потому для укладки в стандартный ряд синоптических наблюдений необходимо учитывать эту поправку[53]. Закомментированная строка в начале процедуры записи на карту if (clock.second = 0) служит для отладки программы — если ее восстановить (а вышележащую, наоборот, спрятать за комментарием), то запись на карту будет происходить каждую минуту.
После вставки карты следует обязательно перезагрузить станцию и проследить, чтобы после загрузки в первую очередь появилась надпись SD card Ok. Если вместо этого появляется сообщение об ошибке инициализации SD card failed, то выключить и включить питание станции необходимо еще раз. Если карта инициализировалась верно, то в файл data.txt на ней запишется строка Arduino meteostation data. Если этот файл на карте не существовал, то он будет создан заново, иначе указанная строка просто запишется в него еще раз, сигнализируя о том, что станция включалась.
Подтверждение тому, что запись действительно идет успешно, можно получить, если проследить за поведением станции в момент, соответствующий очередному сеансу записи, — не должно появиться сообщение File open failed!, которое возникает, если карта просто отсутствует в слоте. Если же карта вставлена, но инициализация прошла неудачно, то в момент записи станция «повиснет» примерно на 12 секунд — таковы особенности работы библиотеки SD.
Повторю — для успешной записи на карту карта должна быть вставлена в слот до включения питания станции. Следует взять за правило перезапускать станцию после каждого извлечения/вставки карты. Предоставляю читателю самому поэкспериментировать с модификацией программы, которая позволила бы избежать таких ограничений. Вероятно, для этого придется привлечь какую-нибудь другую библиотеку по работе с SD-картами в Arduino — особенность прилагаемой библиотеки SD в том, что если карта однажды была инициализирована, то после извлечения и последующей ее вставки при работающем контроллере от программы невозможно добиться не только сообщений об ошибках, но не получается даже принудительно инициализировать карту заново.
КонструкцияВсе элементы разработанных нами схем по рис. 22.1 и 22.5 продаются в комплекте с соединительными кабелями, исключение составляют только дисплеи. В «Амперке» имеется в продаже специальная расширительная плата Troyka Shield, позволяющая подключать подобную периферию. Таким образом, самый простой вариант создания законченной конструкции главного модуля станции заключается в приобретении этой платы и установке друг на друга последовательно трех плат (Arduino Uno, Troyka Shield и Wireless Shield). Ha Wireless Shield, которая должна быть сверху этого «бутерброда» (для лучшей работы модуля ХЬее), имеется поле пустых контактов достаточного размера, чтобы на нем можно было установить контактную колодку для подключения ЖК-дисплея.
Все это монтируется в пластиковый (обязательно!) корпус, передняя стенка которого вырезана под дисплей. Работе ХЬее пластиковый корпус не помешает, а вот датчики лучше вынести наружу — даже то небольшое количество тепла, которое выделяют компоненты схемы при работе, исказит значения температуры, а влажность в герметичном корпусе может отличаться от реальной на десятки процентов (не в этом ли причина столь плохой работы серийных изделий?).
Сложнее окажется конструкция варианта с двумя OLED-дисплеями — на стандартных Arduino-платах для них просто не хватит места. Возможный вариант — изготовление кросс-платы, на которую устанавливаются все модули, соединенные дорожками с контактами платы Arduino. Отверстия на кросс-плате делаются так, чтобы штыри Wireless Shield можно было протащить насквозь, пропаять, а затем надеть на них плату Arduino Uno с другой стороны. На рис. 22.7 показано, как выглядит вариант конструктивного исполнения станции с отображением информации на дисплеях.
Рис. 22.7. Готовая метеостанция на стене загородного дома
В выносном датчике устанавливать какие-либо платы расширения не имеет особого смысла. Все компоненты схемы по рис. 22.4 можно установить на печатной макетной плате (подобной показанной на рис. 3.2 слева), и соединить их монтажными проводами. Конечно, не стоит паять непосредственно выводы платы Arduino Mini — придется приобрести переходные колодки типа PBS.
Трудность состоит в том, что шаг выводов Xbee-модуля — 2 мм, и под него довольно сложно найти готовую плату. Так что придется либо раскладывать и изготавливать ее самостоятельно, либо пожертвовать экземпляром Wireless Shield, вырезав из нее кусок с колодками для подключения Xbee-модуля. На этой плате рядом с колодками имеются соединенные с ними контактные площадки, расположенные с обычным шагом 2,5 мм, куда можно поместить вилку штыревого PLS-разъема, получив таким образом переходную панельку для установки в обычную плату. Все это монтируется в корпус вместе с батарейным отсеком на три элемента типоразмера АА или С. Как и в случае главного модуля станции, плату SHT1x с датчиками лучше вынести за пределы корпуса, защитив ее от внешних воздействий ограждением или кожухом из пластиковой сетки.
О недостатках ArduinoКак мы видим, проектировать и изготавливать конструкции с помощью Arduino гораздо проще, чем обычным дедовским способом, из отдельных компонентов. Но за эту простоту приходится платить. В некотором смысле ситуация с Arduino напоминает историю персональных компьютеров — как известно, самым первым продуктом компании Microsoft, созданной в 1976 году, была реализация языка Бейсик под компьютер Altair, для которой требовалось аж целых 4 килобайта памяти. Андрее Хейлсберг тоже создавал свою первую версию Pascal на чистом ассемблере, получив файл объемом 31 Кбайт. Современные среды программирования (в том числе и для тех же самых языков) занимают гигабайты, но при этом работают на гигагерцовых компьютерах медленнее, чем первые продукты Гейтса и Хейлсберга на машинах того времени с тактовой частотой и объемом памяти в тысячи раз меньшими. Подобно им и AVR-контроллеры, запрограммированные в среде Arduino, оказываются далеки от своих потенциальных возможностей.
Я не ставлю перед собой задачу как-то принизить значение Arduino и отговорить читателей от работы с этой платформой. Наоборот, я всячески приветствую ее энтузиастов и распространителей. Хочется только, чтобы натолкнувшись в Сети на ее критику, неискушенный читатель не впадал в уныние, а хорошо представлял себе, как говорится, «на каком свете он находится».
Простота Arduino во многом обусловлена тем, что практически все действия в программе осуществляются в ее главном цикле. Но такая простота оборачивается недостаточной надежностью работы — «правильно» запрограммированный контроллер работает почти исключительно через прерывания. Например, неверно заставлять программу отслеживать нажатие кнопки в главном цикле и убирать дребезг путем простых временных задержек, как это делается в распространенном примере для начинающих[54]. Когда контроллер основное время занят последовательным отслеживанием происходящих событий, он запросто может потерять какое-то из них. Так поступали в семидесятые годы, когда контроллеры были намного примитивнее сегодняшних. В «правильной» программе состояние кнопки отслеживается по внешнему прерыванию, а дребезг убирается его запретом и последующим разрешением по прерыванию таймера. Только так эти действия не могут помешать никаким другим процедурам в программе.

