РадиоКот >Схемы >Цифровые устройства >Бытовая техника >
Часы на ГРИ или электронная няня
Предыстория:
Идея этого проекта родилась примерно четыре года назад - вместе с рождением моей дочери. От безграничной любви к этому долгожданному созданию, засела в моем воспаленном от счастья мозгу, одна навязчивая идея - оставить ей на память аудио послание в честь дня рождения. Которое мы с женой в радостном порыве записали на диктофон с пожеланиями всего, что только можно пожелать ребенку в будущем.
Записали, и как водится благополучно забыли об этой записи на несколько лет.
Следующее возвращение к этой идее пришло только года через три. Случилось так что моя супруга не слабо так заболела (это было еще до пандемии) и, на довольно длительный срок слегла в больницу. В следствии этой провокации мое чадо осталось на моем круглосуточном попечении. И если днем спец. учреждение типа — детский сад здорово экономило мои нервные клетки, то вечером моя «зайка» безоговорочно требовала 100% всего оставшегося после рабочего дня внимания. Особенно не просто было уговорить дочку лечь спать. Мама, (перед тем как слиться на лечение) выработала у ребенка инстинкт — засыпать только при прослушивании сказки, а я из сказок помнил только «спящая красавица» красной плесени. Монотонное зачитывание детских сказок из книжек почему то не устраивало «принцессу», что в итоге намного увеличивало время засыпания моего чада и намного уменьшало время моего сна. Роль незадачливой няни меня угнетала морально и физически.
В один из таких вечеров я и решил как то это автоматизировать.
После опроса дочки начал формулировать для себя более конкретный образ устройства — чтобы это была не просто безделушка, устройство должно иметь практическое применение.
Это будут часы.
- Причем часы на газоразрядных индикаторах (заворожили меня эти картинки из интернета).
- Светодиодная RGB подсветка ламп (функция ночника).
- Часы должны уметь рассказывать сказки. (не монотонно).
- Функция напоминалки - в определенные даты выдавать голосовые сообщение определенного содержания (например поздравить с днем рождения).
- Ну и наконец часы должны пронести сквозь года наше аудио послание дочери.
Итак: Идея есть, желание есть, интерес к электронике есть. Времени, знаний и опыта (кроме пищалок — мигалок) нет.
Часы подводить ребенок точно не будет, к тому же я сам не люблю гаджеты которым постоянно требуется внимание.
Для меня идеальный вариант часов включил в розетку — и всё! В общем не требует никакого вмешательства вообще.
Начитавшись статей в тырнетах — ограничился в выборе из четырех вариантов:
1. Микросхемы часов реального времени (RTC).
Например популярная DS1307 - простая, дешевая но не очень точная
Еще одна DS3231 – тоже не дорого и уже намного точнее, потому что имеет термокомпенсацию встроенного генератора.
Обе МС имеют батарейное питание, что в случае отключения электричества позволит продолжить отсчет времени в автономном режиме. Но требуют изначальной установки времени вручную.
2. Получение точного времени через сотовую связь
Например модуль NEOWAY M590E
Нет необходимости устанавливать время. Получил с помощью АТ-команд текущее время — обработал в МК. Теоретически самый удобный способ если бы не необходимость контролировать и пополнять баланс на сим карте.
3. Получение точного времени через интернет
Например модуль ESP8266.
Тоже нет необходимости устанавливать время. Но для меня показался не очень удобным. При отсутствии интернета в квартире гаснут и часы, а при смене интернет оператора возникает необходимость перестраивать точку доступа (насколько я понял).
4. Получение точного времени через спутник
Например модуль NEO6MV2
Бесплатный и всегда доступный источник точного времени. Из минусов - не всегда устойчивый сигнал (решаемо). На этом варианте я и остановился.
Начались бесчисленные изучения схем, даташитов, примеров готовых часов, обсуждений на форумах и т. п. За основу была взята схема из этой статьи https://cxem.net/mc/mc282.php автор BARS_.
Определился с тем что основное питание будет 12 вольт. Решил не городить блок питания в корпусе устройства с целью экономии внутреннего пространства, а посему БП будет внешним.
На «авито» и «мешке» были прикуплены лампы ИН-14 и К155ИД1.
В Китае и местных радиомагазинах были куплены различные компоненты и модули. После чего на «брэд борде» началась обкатка различных частей схемы. Первое с чего было необходимо начать это dc-dc преобразователь 12 — 180 вольт. Самый популярный вариант на mc34063.
Заработала сразу без проблем.
Далее потребовался еще один dc-dc уже с 12 на 5 вольт для питания МК и модулей. Ввиду копеечной стоимости китайского модуля решил не городить из отдельных элементов этот кусок схемы а купить готовый модуль.
Дешево и сердито место занимает даже меньше чем если собрать его из отдельных элементов, запаса по мощности хватает.
Микроконтроллер я выбрал ATmega16, чтобы хватило портов и памяти.
А вот с GPS модулем NEO6MV2 через который я и планировал получать точное время мне пришлось немного покурить. И не то что бы была трудность в его настройке и получении от него данных. Благо, до этого умные люди уже все разжевали для таких как я.
Например вот здесь очень подробно описан процесс настройки модуля через программу U-CENTER: https://www.radiokot.ru/konkursCatDay2014/39/ автор Noblako. Обязательное условие, чтобы модуль выдавал только одно сообщение - $GPZDA, как в статье.
Главное что вызывало сомнения это надежность приема данных. Поначалу стабильные данные получалось принять только расположив устройство возле окна. Поэтому я планировал использовать модуль в связке RTC. Модуль получил точное время со спутника и контроллер записал это время в RTC после чего работа идет от RTC, таким образом примерно раз в сутки GPS модуль корректирует RTC. Однако проблема решилась просто покупкой внешней gps антенны.
и вот такого переходника от модуля к антенне.
К тому же в ходе экспериментов с модулем замечено, что данные о времени принимаются быстрее и устойчивей чем данные геолокации. Поэтому в итоге я просто выкинул часть кода написанную для RTC. Забегая наперед скажу что за несколько месяцев работы не было замечено ни одного пропадания данных.
В программной части работы с модулем очень здорово помог пост: http://arduino.ru/forum/obshchii/kak-postich-nepostizhimoe #20 от ЕвгенийП
В итоге на данном этапе схема приобрела следующий вид:
Следующий шаг. Озвучка устройства.
Идея в следующем:
Проснулся ты утром, встал с кровати а часы и говорят — «Доброе утро Иван Иванович сегодня 1 апреля поздравляю вас с днем рождения». Причем говорят они это только когда ты проснулся и уже встал с кровати, а не орут посреди ночи.
Чем озвучивать сообщения вопрос отпал почти сразу — FN-M16P он же DFplayer недорогой модуль from Aliexpress управляемый по UART. Читает файлы с SD карты объемом до 32 ГБ, имеет множество настроек и встроенный УМЗЧ до 3Вт (что сомнительно). В целом интересное устройство, может работать в качестве плеера без связки с микроконтроллером.
Чтобы часы не превратились в нежданный будильник нужно научить их воспроизводить файлы озвучки только при обнаружении движения перед часами и после определенного программой времени. Как это сделать?
Датчик движения. Тут тоже достаточно большой выбор вариантов. Я выбрал PIR датчик AM312, самый компактный чтобы можно было установить в корпус устройства. Это засушенная версия популярного датчика HC SR501 только в малом корпусе, без регулировок и малым временем присутствия сигнала (примерно 2 секунды). Что в данном случае ни как не влияет на условия эксплуатации.
И вот на этом датчике хотел бы немного остановится. Ни как не мог я добиться от него четкой работы. Датчик всегда срабатывал сразу при обращении к нему программно, а не при фиксации сигнала перед ним. Как только программа обращается к датчику, он выдает положительный сигнал будто фиксирует движение, вне зависимости от того есть это движение или нет. Я и на питание грешил, и на помехи от gps, фильтры всякие пытался городить. Два дня я боролся с этим пластиквым муд__ом. Уже хотел отказаться от этого датчика пока не решил попробовать посмотреть на его сигнал через свой мини-осцил. И тут обнаружилась интересная вещь при подключении к датчику осцилла он работает четко — выдает положительный уровень на выходе только при наличии движения перед линзой датчика. После чего выход устанавливается в ноль, и никаких ложных срабатываний.
Однако при отключении осцилла опять возвращаются ложные срабатывания. Может быть кто-нибудь из опытных котов сможет объяснить это явление, но так как я ламер то пошел по простому пути — впаял прямо к ножкам параллельно входу датчика резистор на 1Мом и конденсатор на 30 пф. имитировав тем самым присутствие осцилографа.
Все заработало.
Подключить RGB светодиоды не вызвало никаких проблем.
Итак мы имеем окончательную схему устройства.
На данном этапе хотел бы упомянуть какой из меня программист (такой же как и электронщик). По большому счету это моя первая более-менее серьезная прошивка.
Большинство кусков кода надергано из различных статей и обучающих сайтов по МК.
А в какой то момент мой мозг вдруг решил -ТЫЖПРОГРАММИСТ и после прочтения статей про конечные автоматы, решился писать код полностью в соответствии с парадигмой конечных автоматов. АГА. В итоге по файлам atmel studio размазался весь тот винегрет знаний накопленных (спизж__ных) в моей голове. Компилятор поперхнулся и долго не хотел переваривать этот код, и только в результате бесчисленных правок и танцев с бубном выдал Build: 1 succeeded or up-to-date, 0 failed, 0 skipped
Ну да ладно, едем дальше. Прототип работает. Мне даже захотелось иметь плату заводского вида.
Что и было сделано. Примерно через месяц я забрал с почты коробку с печатными платами из Китая.
Красиво и качественно не поспоришь.
При сборке схемы на новых платах первым делом распаял преобразователи на 180в и 5в. Перед тем как паять остальные компоненты выставил необходимые напряжения на выходах преобразователей. После впайки всех компонентов это нужно будет сделать еще раз (немного просядет напряжение под нагрузкой).
Решено было сделать лампы съемными. Для этого купил и расчленил цанговые контакты. А у ламп подрезал выводы. В результате лампы хоть и не без определенной сноровки но все же четко фиксируются на своем месте, а я получил возможность замены лампы без пайки.
Соответственно и корпус какой-нибудь надо было сочинять.
После нескольких вечеров проведенных в изучении и проектировании SolidWORKS и CorelDRAW появились файлы для резки. Надо сказать довольно много недочетов и просчетов выявилось потом в этом корпусе. Но об этом не буду.
Это фанерные заготовки после лазерной резки. Заказывал в фирме по производству рекламы и сувениров. Обошлось дешевле чем платы.
Сборка корпуса.
Собираем окончательно всю конструкцию.
Толкатели кнопок сделал из штырьков электрических вилок. Обрезал одинаковой длинны и просто приклеил к кнопкам на супер клей.
Итак что мы имеем.
Это часы на газоразрядных индикаторах ИН-14. (индикация динамическая)
В фоновом режиме отображается текущее время.
1) При нажатии в фоновом режиме на кнопку «1» (слева-направо) устройство переходит в режим плеера. Начинается воспроизведение первого файла. Кнопка «2» переключает треки циклично. Кнопки «3» и «4» уменьшают и увеличивают громкость. Для выхода из режима плеера необходимо опять нажать кнопку «1». Устройство перейдет в фоновый режим.
2) При нажатии в фоновом режиме кнопки «2» произойдет смена режима индикации текущего времени. Быстрый перебор цифр. При повторном нажатии кнопки «2» вернется обычная индикация. (Вообще я хотел сделать три вида индикации обычная, быстрый перебор и плавная смена цифр. Но с плавной сменой что-то не сложилось а затянувшийся проект пора уже было заканчивать.)
3) При нажатии в фоновом режиме кнопки «3» часы перейдут в режим индикации даты (число, месяц, год). При повторном нажатии кнопки «3» часы вернутся к индикации текущего времени.
4) При нажатии в фоновом режиме кнопки «4» устройство переходит в режим ночника — загорятся светодиоды подсветки ламп. Кнопка «3» переключает цвета циклично. Кнопки «1» и «2» работают как в фоновом режиме т. е. можно поменять режим индикации или включить плеер. Для выхода из этого режима необходимо повторно нажать кнопку «4».
Теперь по поводу SD карты:
В корне необходимо создать 14 папок (наименование папок должно быть точно как на картинке). 12 папок будут соответствовать месяцам: папка «01» — январь, папка «12» соответственно — декабрь. Папка «MP3» содержит сказки, хотя это могут быть и просто песни.
Папка «13» содержит один единственный файл — то самое аудио послание из начала статьи.
Папки от «01» до «12» должны содержать в себе 31 файл в каждой (количество дней в месяце).
Тут чуть подробнее. Я например хотел чтобы часы поздравляли мою дочь с днем рождения, новым годом и другими праздниками, а так же напоминали про дни рождения близких родственников. Для этого мы с женой записали различные сообщения на диктофон в телефоне. После чего я перенес эти сообщения в компьютер и перекодировал их в mp3 (все файлы должны быть в формате mp3).
Например я хочу чтобы 1го января часы выдали поздравление с новым годом. Это значит что именно 1го января после 7 утра (это время прописывается в программе) активируется датчик движения и когда он зафиксирует движение перед собой (кто-то прошел перед часами) часы воспроизводят файл прописанный для этой даты. Согласно алгоритму программы сообщения необходимы для каждого дня, даже если в этот день ничего не нужно озвучивать. Поэтому в онлайн синтезаторе я записал сообщение пустышку — просто паузу и скопировал его в каждую папку месяца. А в нужные дни вставил уже записанные нами сообщения. В итоге содержание папок «01» - «12» должно иметь следующий вид. Фуух надеюсь понятно изложил.
Важно: нумерация файлов папках должна быть как на картинке. Но допускается после номера прописать название файла. Конкретно в этой папке два файла с сообщениями - 1 и 7 января, остальные файлы пустышки.
Папка «MP3» может содержать до 3000 треков. Важный момент, количество треков в этой папке необходимо будет прописать в переменную MAX_FILES в файле variables.h программы. Это нужно для корректной работы в режиме плеера.
Папка «13». В ней содержится аудио послание которое наша дочь должна будет прослушать через несколько лет. «Ты думаешь эта штука проработает хотя бы несколько месяцев» - усмехнулась моя супруга. Если честно я так не думаю, но возможность заложить своебразную «аудио капсулу времени" является просто дополнительным бонусом в данном устройстве. Это сообщение в отличии от остальных должно оставаться незамеченным. Поэтому для его прослушивания необходимо нажать комбинацию из трез кнопок и удерживать более полусекунды.
Ну и последнее. Все основные настройки часов собраны в файле variables.h:
LOCAL_TIME здесь нужно поставить разницу вашего времени от UTC , у меня это 5 часов
ALARM_HOUR это время а точнее час, после которого активируется датчик движения, у меня это 7 утра
MAX_FILES здесь нужно указать количество треков в папке MP3
VOLUME_MESAGE это уровень звука с которым будут воспроизводится сообщения
VOLUME_OTHER это начальный уровень звука для треков из папки MP3
SECRET_KEY это комбинация кнопок для «секретного» сообщения, у меня это 11(в бинарном коде) что соответствует комбинации кнопок «1», «2» и «4».
Да, вот еще фьюзы:
Заключение:
Устройство работает несколько месяцев. Ребенок быстро освоил кнопки. Включает подсветку и сказку на ночь. Электронная няня справляется со своей задачей лучше меня. К тому же благодаря утренним напоминаниям даже я теперь не забываю поздравить бабушек и дедушек с днем рождения.
Файлы:
код
плата
Все вопросы в
Форум.
Как вам эта статья?
|
Заработало ли это устройство у вас?
|
|
|