Простые часы на Arduino Uno [Амперка / Вики]
Что потребуется
Видеоинструкция
Как собрать
Скетч
Прошейте контроллер скетчем через Arduino IDE.
- simple-clock.ino
// Подключаем библиотеку для работы с дисплеем #include <QuadDisplay2.h> // создаём объект класса QuadDisplay и передаём номер пина CS QuadDisplay qd(10); // создаем объекты класса bute для хранения текущего значения Часов, Минут, Секунд int hours = 0; int minutes = 0; int seconds = 0; // создаем объект класса long для хранения счетчика long lastTime = 0; void setup() { // инициализация дисплея qd.begin(); // инициализируем время setTime(__TIMESTAMP__); } void loop() { // как только разница между текущим временем и временем записанным в lastTime становится больше 1000 миллисекунд... while(millis()-lastTime > 1000) { //...обновляем lastTime и добавляем к счетчику Секунд +1 lastTime = millis(); seconds++; // как только счетчик секунд достигнет 60, обнуляем его и добавляем к счетчику Минут +1.
Где скачать необходимые библиотеки и как их установить?
У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?
У вас предыдущая версия модуля. Она снята с производства пару лет назад. С этим скетчем, библиотекой и схемой сборки модуль работать не будет.
Часы пропеллер на Arduino NANO своими руками | Лучшие самоделки своими руками
Сегодня я буду делать замечательное устройство, которое приковывает взгляд людей своим магическим светодиодным свечением, это – часы, но не обычные, а часы-пропеллер на Arduino NANO. Линейка светодиодов вращаясь по кругу с высокой скоростью вырисовывает циферблат аналоговых часов с ходящими по ним стрелками. Кроме такого отображения они могут показывать любую другую информацию, например, цифровые часы с датой и различными надписями. Я думаю, что подобные часы-пропеллер должен сделать для себя каждый гик-радиолюбитель так как это легко, а результат просто впечатляющий!
Часы пропеллер на Arduino NANO своими руками
Что понадобится чтобы сделать вращающиеся часы:
- Arduino NANO;
- Яркие красные светодиоды – 11 шт;
- Яркие зелёные светодиоды – 5 шт;
- Синий светодиод – 1 шт;
- Резисторы 330 Ом – 16 шт;
- Резистор 2,2 кОм – 1 шт;
- Резистор 10 кОм – 1шт;
- Датчик Холла W130;
- Макетная плата;
- Небольшой неодимовый магнит;
- Двигатель от кассетного магнитофона;
- Аккумулятор – 3,7 В, 240 мА/ч.
Как сделать часы-пропеллер, пошаговая инструкция:
Шаг 1
Часы-пропеллер будем собирать по такой схеме:
Часы-пропеллер схема
Часы пропеллер на Arduino NANO своими руками
Отрежем от макетной платы полоску, на ней будет размещаться вся схема часов-пропеллера вместе с аккумулятором и Ардуино.
Часы пропеллер на Arduino NANO своими руками
Размещаем в линию светодиоды на макетной плате, катоды светодиодов будут спаиваться вместе, поэтому загибаем их к верху в одном направлении, а анод в бок, к каждому из этих анодов будет припаян ограничивающий ток резистор на 330 Ом.
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
На фото пока нет самого крайнего синего светодиода, который будет сигнализатором, что на часы подано питание и который будет вырисовывать внешнюю красивую синюю рамку. Так что можете сразу его впаять, я это сделал позже, ему также понадобится резистор, на этот раз 2,2 кОм.
Шаг 2
На другом конце платы припаиваем коннекторы под плату Ардуино, чтобы плата могла в любое время без проблем быть извлечена из схемы часов. Плата не должна располагаться на самом конце мекетной платы, должно оставаться немного места для противовеса, который установим чуть позже. Вставляем плату Arduino на своё место.
Часы пропеллер на Arduino NANO своими руками
Шаг 3
Соединяем проводниками ножки Ардуины со светодиодами согласно схемы.
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Теперь подключим датчик Холла.
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Припаиваем два пина для джампера который будет подключать питание от аккумулятора, чуть позже к этим контактам я подпаяю микропереключатель, и также два пина под подключение аккумулятора, который будет съёмным. Аккумулятор я притянул к передней части Ардуино с помощью резинки.
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Шаг 4
Между платой Arduino и светодиодами я просверлил отверстие. Взял сверло по диаметру вала двигателя надел на неё ролик который стоял на двигателе от кассетного магнитофона, продел свело через отверстие в плате и приклеил этот ролик к макетной плате. Затем взял ещё один точно такой же ролик и надел на сверло (чтобы ролики стояли ровно по оси) с другой стороны платы и также залил термоклеем.
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Также термоклеем я зафиксировал проводники снизу платы в нескольких местах.
Часы пропеллер на Arduino NANO своими руками
Шаг 5
Всё, теперь можем заливать счетч часов-пропеллера в Ардуино, его Вы можете скачать отсюда.
Шаг 6
На скорую руку сделал корпус из косков ДСП и фанеры, покрасил переднюю панель в чёрный цвет, по центру сделал отверстие для вала двигателя, который был прикреплён сзади.
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Также на обратном от светодиоде конце платы, возле Ардуино просверлил отверстие под болтик, на который я накрутил 3 гайки, чтобы был противовес и можно было сбалансировать стороны платы, чтобы не было большого перевеса какой-либо из сторон.
Шаг 7
Надеваем на вал двигателя нашу плату. Теперь нужно приклеить неодимовый магнит в верхней части, в том месте где будет проходить датчик Холла.
Часы пропеллер на Arduino NANO своими руками
Теперь начинаем плавно подавать напряжение, чтобы часы отрегулировать таким образом, чтобы отметка 12 часов была точно вверху.
Часы пропеллер на Arduino NANO своими руками
Шаг 8
Когда я убедился, что всё работает отлично, я припаял синий светодиод «состояния часов» и также подпаял выключатель питания.
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Всё, самодельные часы-пропеллер готовы! Чтобы их включить надо сначала переключить выключатель на плате во включенное состояние, при этом загорится синий крайний светодиод, а затем уже подаём питание на двигатель, настраивая на лабораторном БП необходимое напряжение, чтобы циферблат выровнялся.
Часы пропеллер на Arduino NANO своими руками
Часы пропеллер на Arduino NANO своими руками
Внизу Вы видите аналоговые часы совмещённые с цифровыми и дополнительной надписью, это моя экспериментальная прошивка. Надеюсь Вам понравилась данная самоделка и Вы повторите её, так как она не сложная на самом деле.
Часы пропеллер на Arduino NANO своими руками
Самодельные часы — плеер на Arduino с сенсорным дисплеем Nextion.
Разработка часов на Arduino достаточно увлекательная и интересная тема. На моём сайте вы найдете большое количество различных проектов часов, в том числе и проект часов на Arduino с дисплеем Nextion.
В данном проекте будем дорабатывать часы на Arduino с сенсорным дисплеем Nextion. Напечатаем новый корпус на 3D принтере и добавим возможность воспроизведения MP3 файлов с карты памяти.
Первая версия часов с сенсорным дисплеем.
Предыдущая версия часов получилась неплохой, но были недостатки. Один из недостатков заключался в том, что часы обладали минимальным набором функций: вывод даты и времени, температуры, влажности в помещении. Но больше всего не понравился моим подписчикам на YouTube корпус. Он был сделан из банки из-под чипсов и имел ряд недочетов. Подписчики на канале предложили переделать корпус, и напечатать его на 3D принтере, что я и сделал.
Для того, чтобы собрать часы на Arduino с дисплеем Nextion нам понадобится:
1. Arduino Nano V3.0 (ATmega328). Версия Arduino Nano V2.0 (ATmega168) не подойдет, так как для текущего функционала недостаточно памяти.
2. Дисплей Nextion 2,8 дюйма. Можно и другого размера.
3. Датчик температуры и влажности SHT3x (SHT31) .
4. Часы реального времени (RTC) DS3231, я использовал версию mini.
5. Разъем 5.5 мм, для подключения питания часов.
6. MP3-плеер DFPlayer Mini.
7. Динамик 3Вт. 4Ом.
8. Провода для соединения элементов.
9. Пластик для печати корпуса.
10. Винты, гайки и шайбы М3.
11. Краска для покраски корпуса. Можно и не красить.
Эти комплектующие пригодятся при сборе часов с сенсорным дисплеем. Возможно, упустил и расписал не все, что использовал. Если есть замечания или предложения, пишите в комментарии.
Схема подключения самодельных часов и плеера.
С комплектующими определились. Сейчас можно все собрать. Для тестирования работы часов я собрал электронику на макетной плате вот по такой схеме.
Перед тем, как установить все в корпус, необходимо запрограммировать Arduino. Это связано с тем, что мы будем использовать аппаратные пины RX TX. На плате это pin 0 и 1. Если мы подключим к ним дисплей, то прошить Ардуино не получится, будет выводить ошибку. Вот почему так важно перед сборкой загрузить скетч в
Скетч часов на Arduino с дисплеем Nextion.
Скетч часов на Arduino с дисплеем Nextion можно скачать внизу статьи, в разделе материалы для скачивания. Там же вы найдете все необходимые библиотеки.
В коде менять ни чего не нужно, достаточно правильно установить все библиотеки и загрузить код в Arduino.
Если у вас возникнут трудности, задавайте вопросы на форуме, там быстрее увижу и отвечу вам.
Корпус для часов Nextion.
После того, как забраковали мой первый корпус для часов, я решил не расстраиваться, а сделать 3D Model в программе Fusion 360.
Модель, к сожалению, утеряна, так как у меня сломался жёсткий диск. Остался только код для печати на 3D принтере пластиком PLA, соплом 0,4 мм.Код можно скачать в разделе материалы для скачивания.
Корпус удался не с первого раза.
Первая модель получилась достаточно маленькая и компактная, но устанавливать элементы было бы достаточно сложно. А порой даже невозможно. Для установки дисплея мне пришлось подточить крепления задней крышки.
Долго мучиться я не стал с подгонкой всех элементов и сделал вторую версию. Но тут ждал меня ещё один небольшой казус. При распечатке выпал нагреватель и пластик перестал нагреваться до нужной температуры, что привело к расслоению верхних слоев детали.
Третий вариант получился более удачный. Я решил его зачистить и покрасить. В итоге получился вот такой красивый белый корпус.
Сборка часов с сенсорным дисплеем.
После того, как Arduino запрограммирована, можно приступить к установке электроники в корпус. Поэтапно устанавливаем все элементы: датчик температуры и влажности, модуль MP3 плеера, динамик, его устанавливаю на заднюю крышку с помощью крепежного кольца.
Дисплей Nextion закрепляю с помощью винтов M3, предварительно подложив по три шайбы между корпусом и дисплеем. Это необходимо для того, чтобы корпус и дисплей были на одном уровне. Устанавливаем разъём питания на заднюю крышку. После чего зданию крышку устанавливаем на место, и закрепляем ее с помощью двух винтов.
Часы готовы и теперь их можно проверить.
Обзор готовых часов плеера на Ардуино с дисплеем.
Часы готовы и пора проверить их работоспособность. Предлагаю рассмотреть, что уже умеет данная самоделка?
Функции и возможности самодельных часов на Ардуино:
- Вывод даты и времени;
- Вывод температуры и влажности;
- Настройка даты и времени;
- Время не сбрасывается при отключении питания;
- Воспроизведение музыки с карты памяти;
- Настраиваемые плейлисты.
- Воспроизведение композиций из выбранного плейлиста.
- Воспроизведение случайной композиции.
- Настройка громкости.
Более наглядно о возможностях данной самоделки вы сможете посмотреть в видео.
Вывод.
Возможности Arduino NANO достаточно обширные и реализовать на данной отладочной плате можно различные самоделки. Я планировал добавить еще пару функций, но памяти уже не достаточно и ардуинка начинает подвисать, если посылать большое количество команд с дисплея. Поэтому следующая версия часов с дисплеем Nextion будет на ESP32.
Если есть вопросы, проблемы, предложения и пожелания, пишите их в комментариях. Комментарий можно написать без регистрации на сайте.
Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.
И всем пока-пока.
До встречи в новом проекте.
Понравилась статья? Поделитесь ею с друзьями:
Файлы для скачивания
Скетч Clock-v1.3.zip | 5 Kb | 449 | Скачать Вы можете скачать файл. | |
Часы-1.3.HMI.zip | 154 Kb | 377 | Скачать Вы можете скачать файл. | |
Часы-1.3.tft.zip | 155 Kb | 345 | Скачать Вы можете скачать файл. | |
gcode, PLA, соплом 0,4 мм.zip | 1797 Kb | 281 | Скачать Вы можете скачать файл. |
Дисплей на TM1637, часы с синхронизацией по NTP и программирование «народных» WiFi в среде Ардуино
Сначала хотел посвятить свой «юбилейный» 50-й обзор ESP8266 ES07 купленных за очень «вкусную» цену вместе с платами-адаптерами. Но обзор этих модулей я уже делал. Здесь же хочу рассказать, как можно делать свои поделки, в частности часы на семисегментном индикаторе, программируя эти «народные» WiFi в популярное среде Arduino IDEНачнем с модулей:
Для своих проектов я искал семисегментные индикаторы, яркие и компактные. Сделал ряд проектов на индикаторах с драйверами MAX7219
Недавно покупая на Алиэкспрессе всякую мелочевку наткнулся на эти индикаторы, на микросхеме TM1637. Мне понравилось компактное исполнение, невысокая цена и управление всего по двум проводам. Заказал парочку вместе с кучей других деталек.
Модули приехали запаянные в пакетики
Характеристики:
- Питание 3.3 — 5.5В
- Потребляемый ток 0.2 — 80мА (в зависимости от горящих сегментов)
- Градаций яркости индикаторов — 8
- Размеры платы: 42×24мм
Четыре штырьковых контакта для подключения:
VCC — питание, GND — земля и два управления CLK и DIO по аналогии с интерфейсом I2C. Большое спасибо, что контакты идут вбок, а не вверх, как на некоторых платах.
Вместе в посылке пришли и ESP8266 ES07, о которых упоминал в начале статьи. Подробно написал про них в своем блоге.
Последнее время много ковырялся с ESP-шками и решил опробовать индикаторы именно с ними. Особенностью данной реализации стало программирование из среды Arduino IDE.
Настройка Arduino IDE для работы с ESP8266 хорошо описана здесь
Хочу немного добавить, что купленные мною модули ESP-07 распаянные на платы-адаптеры уже практически готовы к использованию. Подключаем TX/RX и GND к TTL-USB конвертеру, например, такому. Подключаем питание 3.3В к VCC. Для загрузки прошивки GPIO0 присоединяем к земле. Собственно и все. Подключить GPIO0 и RESET к данному конвертеру у меня не получилось, но это оказалось не сильно нужно. При подсоединенном GPIO0 к земле ESP находится в режиме загрузки прошивки во флэш-память, но после загрузки происходит запуск программы без отсоединения данного GPIO. Это позволяет вполне комфортно отлаживать свою программу. Нужно перед загрузкой только перезагрузить модуль передергиванием питания или кратковременно подав на вывод RESET на землю. Для этого можно припаять специальную кнопку.
На фотке немного другой модуль ES12 из предыдущей партии. Конденсатор установлен для повышения стабильности работы. Последние модули использую без них.
Итак модуль подключен, среда настроена. Для ES07 все настройки ESP8266 ставятся «по умолчанию»:
Для работы с дисплеем на TM1637 я взял готовую библиотеку для Ардуино DigitalTube. «По умолчанию», дополнительные библиотеки устанавливаются в каталог: «Мои документы\Arduino\libraries\». Чтобы оправдать использование WiFi-модуля, эти часы буду синхронизировать время с NTP сервером в интернете.
Подключаем ESP, дисплей к CLK -> GPIO4, DIO ->GPIO5, стабилизатор 3.3В и USB-TTL конвертер макетными проводами
Грузим скетч, который можно взять здесь.
Настраиваем параметры своей точки доступа: AP_SSID и AP_PASS, свою таймзону TIMEZONE. У меня установлена для Перми/Екатеринбурга. Для Москвы будет 3.
Функцией tm1637.set(2) устанавливаем необходимую яркость индикатора от 0 до 7.
Компилируем:
Готово. Часы показывают часы и минуты, мигая двоеточием. Время точное из интернета, синхронизируется с NTP сервером. При длительном отсутствии соединения происходит перезагрузка ESP-шки.
В корпус все это делать не стал, так как это только прототип для будущего проекта.
Прочитать об этом можно будет в моем блоге
Полезные ссылки
OLED часы (термометр) на arduino и DS3231 – RobotChip
/*
Тестирование производилось на Arduino IDE 1.8.0
Дата тестирования 17.02.2017г.
*/
#include <OLED_I2C.h> // Подключение библиотеки OLED_I2C
#include <DS3231.h> // Подключение библиотеки DS3231
OLED myOLED(SDA, SCL, 8);
DS3231 rtc(SDA, SCL);
extern uint8_t MegaNumbers[]; // Подключение больших шрифтов
extern uint8_t SmallFont[]; // Подключение маленьких шрифтов
int x = 0; // Создаем переменную «х»
void setup()
{
myOLED.begin(); // Инициализация Oled дисплея
rtc.begin(); // Инициализация RS3231
}
void loop()
{
if (x >= 10) {temp(); // Если «x», больше или равно 10, выполняем цикл «temp»
x=0;} // Обнулить «x»
else {clock();} // Если «x», меньше 10, выполняем цикл «clock»
x++; // Увеличить «x» на 1
}
void clock() // Цикл считывания и отображения времени
{
myOLED.clrScr(); // Очищаем экран
myOLED.setFont(SmallFont); // Включаем маленький шрифт
myOLED.print(rtc.getDOWStr(), CENTER, 0); // Отображение дня недели
String stringOne = rtc.getTimeStr();
myOLED.setFont(MegaNumbers); // Включаем большой шрифт
myOLED.print(stringOne.substring(0,2), 4, 12); // Отображение часов
myOLED.print(«/», 51, 12); // Отображение двоеточие
myOLED.print(stringOne.substring(3,5), 75, 12); // Отображение минут
myOLED.setFont(SmallFont); // Включаем маленький шрифт
myOLED.print(rtc.getDateStr(), CENTER, 57); // Отображение даты
myOLED.update(); // Обновляем информацию на дисплее
delay(500); // Пауза
myOLED.setFont(MegaNumbers); // Включаем большой шрифт
myOLED.print(«-«, 51, 12); // Убираем двоеточие
myOLED.update(); // Обновляем информацию на дисплее
delay(500); // Пауза
}
void temp() // Цикл считывания и отображения температуры
{
myOLED.clrScr(); // Очищаем экран
myOLED.setFont(MegaNumbers); // Включаем большой шрифт
myOLED.print(String(rtc.getTemp() , 1), CENTER, 12);
myOLED.setFont(SmallFont); // Включаем маленький шрифт
myOLED.print(«Temperature», CENTER, 57); // Отображение надписи
myOLED.update(); // Обновляем информацию на дисплее
delay(2000); // Пауза
}
Real Time Clock (RTC)/Часы реального времени
Статья проплачена кошками — всемирно известными производителями котят.
Если статья вам понравилась, то можете поддержать проект.
Модуль DS1307
Библиотека RTClib
Иногда требуется отслеживать определённое время наступления события. Модуль часов реального времени с литиевой батарей позволяет хранить текущую дату, независимо от наличия питания на самом устройстве. Наиболее распространённые модули RTC: DS1302 (совсем не точные), DS1307 (не очень точные), DS3231 (точные), DS3232 (точные) и др.
Модуль часов представляет собой небольшую плату, которая содержит микросхему (DS1307, DS1302, DS3231), а также сам механизм установки батарейки питания. Часы ведут отсчёт в удобных для человека единицах – минуты, часы, дни недели и другие, в отличие от обычных счётчиков и тактовых генераторов, которые считывают «тики». В Arduino имеется функция millis(), которая умеет считывать различные временные интервалы, но основным недостатком функции является сбрасывание в ноль при включении таймера. С её помощью можно считать только время, а установить дату или день недели невозможно. Модули часов реального времени позволяют решить эту задачу.
Электронная схема модуля включает в себя микросхему, источник питания, кварцевый резонатор и резисторы. Кварцевый резонатор работает на частоте 32768 Гц, которая является удобной для обычного двоичного счетчика. В схеме DS3231 имеется встроенный кварц и термостабилизация, которые позволяют получить значения высокой точности.
Как правило, все модули работают по протоколу I2C.
Модуль DS1307
Модуль можно использовать в случаях, когда данные считываются довольно редко, с интервалом в неделю и более. Это позволяет экономить на питании, так как при бесперебойном использовании придётся больше тратить напряжения, даже при наличии батарейки. Наличие памяти позволяет регистрировать различные параметры (например, измерение температуры) и считывать полученную информацию из модуля.
Модуль DS1307 собран на основе микросхемы DS1307ZN, питание поступает от литиевой батарейки для реализации автономной работы в течение длительного промежутка времени. Батарея на плате крепится на обратной стороне. На модуле имеется микросхема AT24C32 – это энергонезависимая память EEPROM на 32 Кбайт. Обе микросхемы связаны между собой шиной I2C. DS1307 обладает низким энергопотреблением и содержит часы и календарь по 2100 год.
Технические характеристики
- Питание – 5В
- Диапазон рабочих температур от -40°С до 85°С
- 56 байт памяти
- Литиевая батарейка LIR2032
- 12-ти и 24-х часовые режимы
- Поддержка интерфейса I2C
Взаимодействие с другими устройствами и обмен с ними информацией производится с помощью интерфейса I2C с контактов SCL и SDA. В схеме установлены резисторы, которые позволяют обеспечивать необходимый уровень сигнала. Также на плате имеется специальное место для крепления датчика температуры DS18B20.Контакты распределены в 2 группы, шаг 2,54 мм.
В первой группе контактов находятся следующие выводы:
- DS – вывод для датчика DS18B20
- SCL – линия тактирования
- SDA – линия данных
- VCC – 5В
- GND — земля
Во второй группе контактов находятся:
- SQ – 1 МГц
- DS
- SCL
- SDA
- VCC
- GND
- BAT – вход для литиевой батареи
Чтобы подключить модуль к Arduino Uno, используются 4 вывода.
DS1307 | Arduino
-----------------
GND | GND
VCC | 5V
SCL | A5
SDA | A4
DS | N/A
Платы Leonardo, MEGA, ADK, DUE используют другие схемы. Ищите в интернете.
Библиотека RTClib
Для работы с модулем реального времени существует множество библиотек. Рассмотрим библиотеку от Adafruit RTClib.
Установите её через менеджер библиотек. После установки запустите один из готовых примеров из библиотеки ds1307. В Serial Monitor установите скорость 57600. Вы увидите дату на сегодняшний день.
При запуске скетча время берётся с компьютера, поэтому сначала убедитесь, что на вашем компьютере установлены правильные дата и время.
Получение даты и времени происходит через вызов функции now(), который возвращает объект DateTime. Данный объект позволяет узнать год, месяц, день, час, минуту и секунду.
Реклама
rybinden.ru — Говорящие часы на ардуино
Самодельные говорящие часы из ардуины
Привет всем!
В интернете много проектов самодельных говорящих часов, собраных разными умельцами на платформе Arduino.
Расскажу о своих самодельных часах, также сделанных на ардуино.
Часы имеют 4 кнопки, питание от сети 220 вольт, по бокам динамики по 3 вт.
В отличие от других проектов, мои часы имеют 6 режимов (не считая настроек): часы, дата, будильник, таймер, фм радио, мп3 плеер.
Также часы имеют различные настройки озвучивания времени, например можно указать время с какого по какой час и через какой промежуток времени они будут сами объявлять время.
т.е. могут сами говорить время через каждые 15 или 30 минут или 1 час в указанный период времени. Период времени (с какого по какой час) и интервал можно настроить.
Плеер понимает сколько папок на карте памяти и озвучивает их номер перед воспроизведением файлов (первые 10 папок зарезервированы для системы).
Радио имеет ручную и автоматическую настройку, понравившуюся станцию можно сохранить в памяти.
Также в часах есть будильник и таймер, которые имеют свои независимые настройки, громкости, выбора мелодии, которые сохраняются в энергонезависимой памяти, т.е. не сбиваются после выключения питания.
Вот вкратце функции часов, есть еще много мелких плюшек.
Комплектующие
1. Модуль ардуино — можно использовать любой с микроконтроллером atmega328;
2. модуль часов DS1307 или другой совместимый со встроенной батареей.
3. Для озвучивания используется mp3 модуль yx5300, также есть версия для модуля dfMiniMp3 и звукового чипа w588.
Звуковые файлы я создал с помощью сервиса
yandex speech kit
4. Дисплей светодиодный на сдвиговых регистрах 74hc595, есть версия для TM1637.
5. Для фм радио используется модуль RDA5807M.
6. кнопки, динамики, блок питания, антена.
Посмотреть в работе можно на youtube
Также оставлю ссылку на видео самой первой версии часов, которое снял мой брат Костя. Ссылка первой версии и история изменений.
Исходник прошивки https://github.com/RybinDen/arduino-clock/blob/main/clock74hc595/clock74hc595.ino
Bluetooth Smart Watch Arduino — Arduino Project Hub
#include#include "U8glib.h" #include "SoftwareSerial.h" #include #include #define nextButton 7 // определяем номера контактов для кнопок #define previousButton 5 #define menuButton 4 #define mot 9 #define buzz A3 Программное обеспечение Последовательный Bluetooth (2,3); // Использовать программный серийный номер для bluetooth const unsigned char PROGMEM ICON_BITMAP_1 [] = {// Логотип Android 0x00,0x00, 0x00,0x00, 0x04,0x40, 0x07,0xc0, 0x0f, 0xe0, 0x0b, 0xa0, 0x1f, 0xf0, 0x00,0x00, 0x5f, 0xf4, 0x5f, 0xf4, 0x5f, 0xf4, 0x5f, 0xf4, 0x1f, 0xf0, 0x0c, 0x60, 0x0c, 0x60, 0x00,0x00 }; const беззнаковый символ PROGMEM ICON_BITMAP_20 [] = { //чат 0x00,0x00, 0x00,0x00, 0x3f, 0xf8, 0x40,0x04, 0x40,0x04, 0x40,0x04, 0x40,0x04, 0x49,0x24, 0x40,0x04, 0x40,0x04, 0x40,0x04, 0x3f, 0xc8, 0x00,0x28, 0x00,0x18, 0x00,0x08, 0x00,0x00 }; const беззнаковый символ PROGMEM ICON_BITMAP_65 [] = {// сигнал бара 0x00,0x00, 0x00,0x00, 0x3f, 0xe0, 0x10,0x40, 0x08,0x80, 0x05,0x00, 0x02,0x00, 0x02,0x00, 0x02,0x00, 0x00,0x0c, 0x00,0x6c, 0x03,0x6c, 0x1b, 0x6c, 0x1b, 0x6c, 0x00,0x00, 0x00,0x00 }; int i, c = 0, t = 0; логическое значение clockUp = true; логическое menuShow = false; логическое selectButtonbool = false; логическое newMessage = false; логическое newCall = false; логическое newCallR = false; логическое newNote = false; логическое newBuzz = false; байтовые часы = 0; байтовые минуты = 0; байтовые секунды = 0; байт день = 0; байтовая дата = 0; байт месяц = 0; int год = 0; int k, j, n1, n2, n3, n4, n5, n6, n7, n8, N1, N2, N3, N4, N5, N6, N7, N8 = 0; поплавок x1, x2, ans = 0.0; char DateBuffer [30]; char * TimeStorage [6]; char * vout; Строка monthw; Номер строки; String numberR; String NoteS; Строковое сообщение; // Переменная для SMS-сообщений String blReceived; // Хранилище для строк, полученных от bluetooth char msg [150]; // Массив символов для SMS char numb [15]; char numbR [15]; char note [300]; Строка op [4] = {"+", "-", "*", "/"}; byte menuSelection = 0; //Меню byte menuSelections = 0; //Настройки byte menuSelectiona = 0; //Программы byte len; // Длина сообщения byte len1; byte len2; байт l; статический беззнаковый long lastTick = 0; // U8GLIB_SSD1306_ADAFRUIT_128X64 u8g (U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // U8GLIB_SSD1306_128X64 u8g (U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // I2C / TWI U8GLIB_SSD1306_128X64 u8g (U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // U8GLIB_Sh2106_128X64_2X u8g (13, 11, 10, 9,8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8 void setup (void) { // переворачиваем экран, если необходимо // u8g.setRot180 (); pinMode (nextButton, ВХОД); // Устанавливаем цифровые выводы как входы pinMode (предыдущая кнопка, ВХОД); pinMode (menuButton, ВХОД); pinMode (mot, ВЫХОД); pinMode (гудение, ВЫХОД); Serial.begin (9600); bluetooth.begin (9600); digitalWrite (nextButton, HIGH); // Включение внутреннего подтягивания на всех кнопках digitalWrite (предыдущая кнопка, ВЫСОКИЙ); digitalWrite (menuButton, ВЫСОКИЙ); digitalWrite (mot, HIGH); задержка (500); digitalWrite (mot, LOW); drawStartUp (); задержка (4000); } // конец настройки void loop () { int k, j, n1, n2, n3, n4, n5, n6, n7, n8, N1, N2, N3, N4, N5, N6, N7, N8 = 0; поплавок x1, x2, ans = 0.0; t ++; если (t> 160) { спать(); } если (digitalRead (menuButton) == LOW) t = 0; if (bluetooth.available ()> 0 / * && bluetooth.find ("(") * /) { blReceived = bluetooth.readString (); if (blReceived.startsWith ("1")) // 1 - дата преамбулы { digitalWrite (mot, HIGH); задержка (1000); digitalWrite (mot, LOW); секунды ++; blReceived.toCharArray (DateBuffer, blReceived.length () + 1); vout = strtok (DateBuffer, ","); для (int i = 0; i <= 6; i ++) { // если (TimeStorage [i] = NULL) // {Последовательный.println ("Завершенный цикл"); // перерыв;} TimeStorage [i] = strtok (NULL, ","); задержка (10); } // int example = bluetooth.parseInt (); day = atoi (TimeStorage [0] - 1); date = atoi (TimeStorage [1]); месяц = atoi (TimeStorage [2]); год = atoi (TimeStorage [3]); часы = atoi (TimeStorage [4]); минут = atoi (TimeStorage [5]); секунды = atoi (TimeStorage [6]); blReceived = ""; t = 0; } иначе, если (blReceived.startsWith ("2")) { digitalWrite (mot, HIGH); задержка (1000); digitalWrite (mot, LOW); секунды ++; newMessage = true; сообщение = blReceived; //SMS(); // задержка (300000); blReceived = ""; t = 0; } иначе, если (blReceived.startWith ("3")) { digitalWrite (mot, HIGH); задержка (1000); digitalWrite (mot, LOW); секунды ++; newCall = true; число = blReceived; // num (); // задержка (300000); blReceived = ""; t = 0; } иначе, если (blReceived.startsWith ("4")) { digitalWrite (mot, HIGH); задержка (1000); digitalWrite (mot, LOW); newCallR = true; numberR = blReceived; t = 0; u8g.firstPage (); делать { u8g.setFont (u8g_font_unifont); u8g.setPrintPos (0,20); u8g.print ("Звонок ..."); u8g.setPrintPos (0,40); u8g.print (числоR); len2 = числоR.length (); number.toCharArray (numbR, len2 + 1); //Serial.println(len2); если (len2 <15) { //Serial.println("If "); для (int i = 0; (i-1) 0 && bluetooth.find ("CMD") == true) { Serial.println («ВВЕДЕННОЕ СООБЩЕНИЕ»); сообщение = bluetooth.readString (); Serial.println (сообщение); // задержка (300000); } * / if (digitalRead (previousButton) == LOW && digitalRead (nextButton) == LOW) // кнопка активирована { секунды = секунды + 4; if (menuShow == false) // Для переключения состояний меню { menuShow = true; задержка (100); меню(); // Возвращаем номер выбора меню если (menuSelection == 4) { секунды = секунды + 4; задержка (100); menuSelection = 0; в то время как (digitalRead (menuButton) == HIGH) { HA (); задержка (10); } } если (menuSelection == 3) { секунды = секунды + 4; настройки(); если (menuSelections == 2) { секунды = секунды + 4; задержка (100); menuSelections = 0; задержка (100); в то время как (digitalRead (menuButton) == HIGH) { уведомление(); } задержка (100); } если (menuSelections == 3) { секунды = секунды + 4; задержка (100); menuSelections = 0; в то время как (digitalRead (menuButton) == HIGH) { факел(); задержка (10); } } если (menuSelections == 4) { секунды = секунды + 4; задержка (100); menuSelections = 0; в то время как (digitalRead (menuButton) == HIGH) { блютуз.написать ("1"); задержка (1000); bluetooth.write (""); } } bluetooth.write (""); bluetooth.write («2»); bluetooth.write (""); } если (menuSelection == 2) { секунды = секунды + 4; Программы(); если (menuSelectiona == 2) { секунды = секунды + 4; задержка (100); menuSelectiona = 0; в то время как (digitalRead (menuButton) == HIGH) { Calc (); } блютуз.записывать(""); } если (menuSelectiona == 3) { секунды = секунды + 4; задержка (100); menuSelectiona = 0; в то время как (digitalRead (menuButton) == HIGH) {SMS();} задержка (100); } если (menuSelectiona == 4) { секунды = секунды + 4; задержка (100); menuSelectiona = 0; в то время как (digitalRead (menuButton) == HIGH) {вызов();} задержка (100); } } } если (menuShow == true) { menuShow = false; задержка (100); } } // конец if advanceTime (); задержка (30); } // конец цикла бессонница () { u8g.первая страница(); делать{} в то время как (u8g.nextPage ()); } void advanceTime () { if (millis () - lastTick> 950) // как-то { lastTick = millis (); секунды ++; } если (секунды> 59) { минут ++; секунд = 0; } если (минут> 59) { часы ++; минут = 0; } если (часы> 23) { часов = 0; минут = 0; дата + = 1; } рисовать(); } // ***** ------------------ Функции U8Glib ------------------ ***** void HA () { u8g.первая страница(); делать { bluetooth.write («3»); u8g.setFont (u8g_font_unifont); u8g.setPrintPos (0,10); u8g.print («Домашняя автоматизация»); u8g.setFont (u8g_font_unifont); u8g.setPrintPos (30,10); u8g.print («В разработке»); bluetooth.write (""); } while (u8g.nextPage ()); } аннулировать Buzz () { в то время как (c <5) { для (я = 1; я <256; я ++) { analogWrite (гул, я); задержка (3,92); } для (i = 256; i> 0; i--) { analogWrite (гул, я); задержка (3.92); } c ++; } c = 0; newBuzz = false; } void drawStartUp () { u8g.firstPage (); делать { // u8g_prepare (); u8g.setColorIndex (0); u8g.drawBox (0,0,127,63); u8g.setColorIndex (1); u8g.setFont (u8g_font_7x14r); u8g.setPrintPos (5,10); u8g.print («Разработано: -»); u8g.setFont (u8g_font_fur17r); u8g.setPrintPos (10,38); u8g.print («ПОЛЬЗОВАТЕЛЬ»); u8g.setFont (u8g_font_7x14r); u8g.setPrintPos (5,62); u8g.print ("V402"); } в то время как (u8g.nextPage ()); } // конец drawStartUp пустое меню () { u8g.setColorIndex (1); //u8g.drawCircle(20,20,14); menuSelection = 1; в то время как (digitalRead (menuButton) == HIGH) { если (digitalRead (nextButton) == LOW) { задержка (20); menuSelection ++; задержка (50); } если (digitalRead (previousButton) == LOW) { задержка (20); menuSelection--; задержка (50); } если (menuSelection> 4) {menuSelection = 1;} если (menuSelection <1) {menuSelection = 4;} // рисуем картинку здесь drawMenu (); задержка (50); // Для устранения неполадок // здесь рисуем меню } // конец цикла while } // конец меню void drawMenu () { u8g.первая страница(); делать { u8g.setFont (u8g_font_6x10r); u8g.setPrintPos (30,8); u8g.print ("--- Меню ---"); //u8g.setPrintPos(0,10); //u8g.print(menuSelection); u8g.drawFrame (0, (menuSelection * 13) -3,128,13); // Высота бокса 13 пикселей u8g.drawLine (0,10,128,10); // Рисуем пункты меню u8g.drawStr (3,20, «Возврат»); u8g.drawStr (3,20 + 13, «Приложения»); u8g.drawStr (3,20 + 13 + 13, «Настройки»); u8g.drawStr (3,20 + 13 + 13 + 13, «Домашнее авто (бета)»); //u8g.drawStr(3,20+13+13+13,"Подробнее "); } в то время как (u8g.следущая страница()); } недействительные приложения () { u8g.setColorIndex (1); //u8g.drawCircle(20,20,14); menuSelectiona = 1; задержка (200); в то время как (digitalRead (menuButton) == HIGH) { если (digitalRead (nextButton) == LOW) { задержка (20); menuSelectiona ++; Serial.println («Вверх»); задержка (50); } если (digitalRead (previousButton) == LOW) { задержка (20); menuSelectiona--; задержка (50); } если (menuSelectiona> 4) {menuSelectiona = 1;} если (menuSelectiona <1) {menuSelectiona = 4;} // рисуем картинку здесь drawApps (); задержка (50); // Для устранения неполадок } // конец цикла while } недействительное уведомление () { u8g.первая страница(); делать { u8g.setFont (u8g_font_6x10r); //u8g.print(NoteS); l = NoteS.length (); NoteS.toCharArray (примечание, l + 1); //Serial.println(len); если (l> 0) { для (я = 0; я <20; я ++) { u8g.setPrintPos (я * 6,8); u8g.print (примечание [i]); задержка (10); } } если (l> 20) { для (я = 20; я <40; я ++) { u8g.setPrintPos ((i-20) * 6,17); u8g.print (примечание [i]); задержка (10); } } если (l> 40) { для (я = 40; я <60; я ++) { u8g.setPrintPos ((i-40) * 6,26); u8g.print (примечание [i]); задержка (10); } } если (l> 60) { для (я = 60; я <80; я ++) { u8g.setPrintPos ((i-60) * 6,35); u8g.print (примечание [i]); задержка (10); } } если (l> 80) { для (я = 80; я <100; я ++) { u8g.setPrintPos ((i-80) * 6,43); u8g.print (примечание [i]); задержка (10); } } если (l> 100) { для (я = 100; я <120; я ++) { u8g.setPrintPos ((i-100) * 6,51); u8g.print (примечание [i]); задержка (10); } } если (l> 120) { для (я = 120; я <140; я ++) { u8g.setPrintPos ((i-120) * 6,59); u8g.print (примечание [i]); задержка (10); } } } в то время как (u8g.nextPage ()); задержка (30); newNote = false; } факел пустоты () { u8g.firstPage (); сделать {u8g.drawBox (0,0,127,63);} в то время как (u8g.nextPage ()); } void drawApps () { u8g.firstPage (); делать { u8g.setFont (u8g_font_6x10r); u8g.setPrintPos (5,8); u8g.print ("--- Приложения ---"); //u8g.setPrintPos(0,10); //u8g.print(menuSelection); u8g.drawFrame (0, (menuSelectiona * 13) -3,128,13); // Высота бокса 13 пикселей u8g.drawLine (0,10,128,10); // Рисуем пункты меню u8g.drawStr (3,20, «Возврат»); u8g.drawStr (3,20 + 13, «РАСЧЕТ»); u8g.drawStr (3,20 + 13 + 13, «SMS»); u8g.drawStr (3,20 + 13 + 13 + 13, «ЗВОНКИ»); //u8g.drawStr(3,20+13+13+13,"Подробнее "); } в то время как (u8g.nextPage ()); } недействительные настройки () { u8g.setColorIndex (1); //u8g.drawCircle(20,20,14); menuSelections = 1; задержка (200); в то время как (digitalRead (menuButton) == HIGH) { если (digitalRead (nextButton) == LOW) { задержка (20); menuSelections ++; Serial.println («Вверх»); задержка (50); } если (digitalRead (previousButton) == LOW) { задержка (20); menuSelections--; задержка (50); } если (menuSelections> 4) {menuSelections = 1;} если (menuSelections <1) {menuSelections = 4;} // рисуем картинку здесь drawSettings (); задержка (50); // Для устранения неполадок } // конец цикла while } аннулировать смс () { u8g.первая страница(); делать { u8g.setFont (u8g_font_unifont); u8g.setPrintPos (0,10); u8g.print (сообщение); len = message.length (); message.toCharArray (сообщение, len + 1); //Serial.println(len); если (длина> 16) { //Serial.println("If "); для (int i = 0; (i-1) 32) { //Serial.println("If "); для (int i = 0; (i-1) 12) j = 0; } if (digitalRead (nextButton) == LOW && digitalRead (previousButton) == LOW) { j = 13; задержка (300); } если (j == 0) { CalcPrintdata (); если (digitalRead (nextButton) == LOW) { n6 ++; задержка (300); } если (n6> 9) n6 = 0; } если (j == 1) { CalcPrintdata (); если (digitalRead (nextButton) == LOW) { n5 ++; задержка (300); } если (n5> 9) n5 = 0; } если (j == 2) { CalcPrintdata (); если (digitalRead (nextButton) == LOW) { n4 ++; задержка (300); } если (n4> 9) n4 = 0; } если (j == 3) { CalcPrintdata (); если (digitalRead (nextButton) == LOW) { n3 ++; задержка (300); } если (n3> 9) n3 = 0; } если (j == 4) { CalcPrintdata (); если (digitalRead (nextButton) == LOW) { n7 ++; задержка (300); } если (n7> 9) n7 = 0; } если (j == 5) { CalcPrintdata (); если (digitalRead (nextButton) == LOW) { n8 ++; задержка (300); } если (n8> 9) n8 = 0; } если (j == 6) { CalcPrintdata (); если (digitalRead (nextButton) == LOW) { k ++; задержка (300); } если (k> 3) k = 0; } если (j == 7) { CalcPrintdata (); если (digitalRead (nextButton) == LOW) { N6 ++; задержка (300); ... Этот файл был усечен, загрузите его, чтобы увидеть его полное содержимое.
Соберите свои собственные умные часы с электронной бумагой с помощью этого набора с открытым исходным кодом за 50 долларов
Если вы когда-нибудь хотели быть похожими на Стива Возняка и иметь свои собственные оригинальные часы, у Squarofumi (стилизованный под SQFMI) может быть продукт для вас: умные часы с открытым исходным кодом на базе Arduino с 1,54-дюймовым электронным экраном. -бумажный экран (через Gizmodo ). Он называется Watchy, и его аппаратное и программное обеспечение можно полностью настроить.Однако вы можете использовать его прямо из коробки, поскольку печатная плата действует как корпус и имеет точки для крепления ремешка для часов. И в довершение ко всему, это всего 50 долларов США на момент написания статьи по цене 45 долларов США.
На сайте SQFMI есть разделы для циферблатов и футляров, но на данный момент они оба говорят только «Скоро в продаже», поэтому, если вы думаете об этих часах, вам обязательно нужно быть готовым к самостоятельной работе. проект. Да, и еще один факт, что часы идут не в собранном виде — вы должны собрать их самостоятельно, соединив вместе дисплей 200×200, печатную плату и батарею на 200 мАч.Есть Wi-Fi, Bluetooth, 3-осевой акселерометр и четыре кнопки, которые можно использовать для навигации или любых других функций, которые вы можете придумать.
У Watchy есть оборудование, с которым могут быть знакомы домашние мастера. Графика: SQFMIЕсли необходимость самостоятельно собирать аппаратное обеспечение вас не пугает, следует отметить еще одну вещь: хотя часы поставляются с предварительно загруженным программным обеспечением, если вы хотите внести какие-либо изменения в циферблат, вам придется загрузить IDE Arduino и запрограммируйте их самостоятельно.
В то время как некоторых людей может отвлекать вся работа, необходимая для того, чтобы часы заработали, для некоторых подход «сделай сам» означает, что они смогут получить именно то, что хотят. Если вам нужны часы с корпусом, который выглядит как iPod или Game Boy, с соответствующим интерфейсом, вы можете напечатать корпус на 3D-принтере и самостоятельно написать код циферблата. Это тот тип свободы, который вы вряд ли получите от большинства коммерческих умных часов, хотя часы Tizen и Wear OS предлагают загружаемые циферблаты.
Расчетное время автономной работы SQFMI зависит от вашего варианта использования — в нем говорится, что если вы просто соблюдаете время, у вас должно получиться от пяти до семи дней, но если вы часто получаете данные, вы можете увидеть только два-три. Однако его природа с открытым исходным кодом означает, что вы всегда можете установить в него батарею большего размера или попробовать оптимизировать программное обеспечение, если есть функции, которые вы хотите сократить.
В часах используется ESP32 SOC, который можно программировать с помощью Arduino и MicroPython. Изображение: SQFMIЕсли вы ищете такого рода проект для кодирования / DIY, Watchy продается на Tindie. Я просто рекомендую вам заглянуть на сайт SQFMI, чтобы убедиться, что имеющейся документации достаточно для начала работы.
Arduino простые часы с открытым исходным кодом PCB
Пример простых часов ArduinoПосле того, как у вас будет печатная плата из прошлого учебника, созданного по этой ссылке, вы можете загрузить простой пример кода для часов. Этот код, как вы можете видеть ниже, может устанавливать время, сохранять значения в микросхеме часов реального времени, устанавливать будильник с перерывами, иметь секундомер и многое другое.Прочтите код, чтобы узнать больше. Потребление в спящем режиме очень низкое, около 1,3 мА, поэтому батареи на 100 мАч хватит на 2 дня.
Скачать простой код просмотра:
ЧАСТЬ 1 — Характеристики платы
На этой плате много компонентов. После того, как вы припаяете печатную плату и заставите ее работать, она будет иметь все характеристики, указанные ниже:
— Схема зарядки USB (защита батареи 3,7 В)
— НИЗКОЕ энергопотребление
— Считывание напряжения батареи
— Микросхема программирования USB (Ch440)
— Программирование UART (дополнительно)
— RTC (часы реального времени) и получение:
— День недели
— Дата: день, месяц, год
— Температура
— Установка прерывания сигнала тревоги
— Управление зуммером
— Управление светодиодами
— 3 кнопки
— Соединение Bluetooth (связь UART)
— Дисплей OLED (связь i2c)
Войдите в меню и установите будильник, и он подаст звуковой сигнал с помощью зуммера.Даже если часы находятся в спящем режиме, прерывание разбудит их, а затем вызовет сигнал будильника на минуту или до тех пор, пока вы не нажмете среднюю кнопку.
ЧАСТЬ 3 — Секундомер
Войдите в меню и установите будильник, и он подаст звуковой сигнал с помощью зуммера. Даже если часы находятся в спящем режиме, прерывание разбудит их, а затем вызовет сигнал будильника на минуту или до тех пор, пока вы не нажмете среднюю кнопку.
Помогите мне, поделившись этим постом
В часах
Arduino WiFi и Bluetooth добавлен GPS, слот MicroSD, отсутствует усилитель звука
LilyGO в прошлом году представила умные часы T-Watch-2020 с питанием от ESP32 в тонком форм-факторе 1.54-дюймовый емкостный сенсорный ЖК-экран, Wi-Fi и Bluetooth, а также поддержка Arduino.
В феврале мы отметили TTGO T-Watch-2020 V3 со встроенным микрофоном для голосового управления, но компания только что указала TTGO T-Watch-2020 V2 с добавлением GPS и слотом для карт MicroSD на своем Магазин Aliexpress по цене около 33 долларов.
Технические характеристики TTGO T-Watch-2020 V2:
- SoC — Двухъядерный беспроводной процессор Espressif ESP32 с 520 КБ SRAM
- Системная память — 8 МБ PSRAM
- Хранилище — 16 МБ флэш-памяти QSPI, слот для карты MicroSD
- Дисплей — 1.54-дюймовый емкостный сенсорный ЖК-экран
-
Аудио — Max98357 Усилитель класса D, зуммер / динамик - Возможности подключения
- 802.11b / g / n WiFi 4 и Bluetooth 4.x / 5.1 через ESP32
- Модуль Quectel L76L для GNSS (GPS, Beidou, ГЛОНАСС, QZSS)
- Датчики — трехосевой акселерометр BMA423 со встроенным алгоритмом подсчета шагов, распознаванием / отслеживанием активности, расширенным распознаванием жестов.
- Расширение — 13-контактное гнездо расширения FPC с шагом 0,3 мм (совместно с слотом для карт MicroSD)
- Разное — кнопка питания (круглая), часы PCF8563 RTC, вибромотор
- — через порт Micro USB (микросхема CP2104 USB to TTL)
- Аккумулятор
- 380 мАч / 3.Литиевая батарея 7 В
- Зарядка — 5 В / 1 А через порт Micro USB; AXP202 PMIC
- Размеры — 40 x 47,45 x 13 мм; Длина с браслетом: 272 мм
- Вес — около 60 грамм
Разъем для карты microSD также можно использовать в качестве разъема расширения ввода-вывода, что сначала выглядит не очень удобно, но поскольку интерфейс SD-карты ESP32 может быть используется для отладки JTAG, есть в продаже несколько коммутационных плат. Вибромотор был заменен на тактильный актуатор DRV2605L, который позволяет использовать больше режимов вибрации.
Вы найдете библиотеку Arduino на Github. Он используется во всех версиях TTGO T-Watch, но конкретный демонстрационный код V2 можно найти в папке « tree / master / examples / BasicUnit / TwatcV2Special » с примерами для карты Baidu, отображением информации GPS и тремя образцами для DRV2605L. Водитель.
Часы поставляются с 30-сантиметровым USB-кабелем для зарядки аккумулятора, а T-Watch-2020 V2 должен работать менее суток на одной зарядке, особенно при простом использовании функции GPS.
Жан-Люк основал CNX Software в 2010 году в качестве неполного рабочего дня, прежде чем бросить свою работу в качестве менеджера по разработке программного обеспечения и начать писать ежедневные новости и обзоры на полную ставку позже в 2011 году.
Поддержка программного обеспечения CNX! Сделайте пожертвование через PayPal или криптовалюты , станьте покровителем на Patreon, или купите образцы обзора
An Arduino-Powered Watch Winder, IndustArduino «3d хакеры, художники, дизайнеры и инженеры!
What I Made Today представляет устройство для подзавода часов на базе Arduino, напечатанное на 3D-принтере.
Наше решение — это 3D-печать собственного подзавода для часов.Нас вдохновил трехмерный механический дизайн Бруно Эсгулиана из его блога.
Мы с моим соавтором-блогером Майклом недавно сконструировали этот 3D-дизайн и устройство для подзавода часов, управляемое Arduino. Спасибо, Бруно Эсгулиан, за блестящий механический дизайн. Мы начали с его прошивки для Arduino, однако я переписал прошивку для особых требований Майка.
Подробности смотрите в видео ниже и в публикации.
Прекратите макетирование и пайку — немедленно приступайте к изготовлению! Площадка Circuit Playground от Adafruit забита светодиодами, датчиками, кнопками, зажимами из кожи аллигатора и многим другим.Создавайте проекты с помощью Circuit Playground за несколько минут с помощью сайта программирования MakeCode с перетаскиванием, изучайте информатику с помощью класса CS Discoveries на code.org, переходите в CircuitPython, чтобы изучать Python и оборудование вместе, TinyGO или даже использовать Arduino IDE. Circuit Playground Express — это новейшая и лучшая плата Circuit Playground с поддержкой CircuitPython, MakeCode и Arduino. Он имеет мощный процессор, 10 NeoPixels, мини-динамик, инфракрасный прием и передачу, две кнопки, переключатель, 14 зажимов из кожи аллигатора и множество датчиков: емкостное прикосновение, ИК-приближение, температуру, свет, движение и звук.Вас ждет целый мир электроники и программирования, и он умещается на ладони.
Присоединяйтесь к 30 000+ создателей на каналах Discord Adafruit и станьте частью сообщества! http://adafru.it/discord
Хотите поделиться замечательным проектом? Выставка Electronics Show and Tell проходит каждую среду в 19:00 по восточному времени! Чтобы присоединиться, перейдите на YouTube и посмотрите чат в прямом эфире шоу — мы разместим ссылку там.
Присоединяйтесь к нам каждую среду вечером в 20:00 по восточноевропейскому времени на «Спроси инженера»!
Подпишитесь на Adafruit в Instagram, чтобы узнавать о совершенно секретных новых продуктах, о кулуарах и многом другом https: // www.instagram.com/adafruit/
CircuitPython — Самый простой способ программирования микроконтроллеров — CircuitPython.org
Получайте единственную ежедневную рассылку без спама о носимых устройствах, ведении делопроизводства, электронных советах и многом другом! Подпишитесь на AdafruitDaily.com!Пока комментариев нет.
Извините, форма комментария в настоящее время закрыта.
Watchy: The Hackable Smartwatch за 50 долларов
В мире магии был Гудини, который первым изобрел трюки, которые используются до сих пор.А сжатие данных есть у Якоба Зива.
В 1977 году Зив, работая с Авраамом Лемпелем, опубликовал эквивалент книги Houdini on Magic : статья в IEEE Transactions по теории информации под названием «Универсальный алгоритм последовательного сжатия данных». Алгоритм, описанный в статье, стал называться LZ77 — от имен авторов в алфавитном порядке, и год. LZ77 не был первым алгоритмом сжатия без потерь, но он был первым, который мог творить чудеса за один шаг.
В следующем году оба исследователя выпустили уточнение LZ78. Этот алгоритм стал основой для программы сжатия Unix, используемой в начале 80-х; WinZip и Gzip, появившиеся в начале 90-х; и форматы изображений GIF и TIFF. Без этих алгоритмов мы, скорее всего, отправили бы по почте большие файлы данных на дисках вместо того, чтобы отправлять их через Интернет одним щелчком мыши, покупать нашу музыку на компакт-дисках вместо потоковой передачи и просматривать каналы Facebook, в которых нет движущихся анимированных изображений.
Зив продолжал сотрудничать с другими исследователями по другим инновациям в области сжатия.Именно его полная работа, охватывающая более полувека, принесла ему Почетная медаль IEEE 2021 «За фундаментальный вклад в теорию информации и технологию сжатия данных, а также за выдающееся лидерство в исследованиях».
Зив родился в 1931 году в семье русских иммигрантов в Тверии, городе, который тогда находился в управляемой британцами Палестине, а теперь является частью Израиля. Электричество и гаджеты — и многое другое — очаровывали его в детстве. Например, играя на скрипке, он придумал схему, как превратить свой пюпитр в лампу.Он также попытался построить передатчик Маркони из металлических частей фортепиано. Когда он подключил устройство, весь дом потемнел. Он так и не заставил этот передатчик работать.
Когда в 1948 году началась арабо-израильская война, Зив учился в средней школе. Призванный в Армию обороны Израиля, он недолгое время служил на передовой, пока группа матерей не провела организованные акции протеста, требуя отправить самых молодых солдат в другое место. Переназначение Зива привело его в израильские ВВС, где он прошел обучение на радарного техника.Когда война закончилась, он поступил в Технион — Израильский технологический институт, чтобы изучать электротехнику.
После получения степени магистра в 1955 году Зив вернулся в мир обороны, на этот раз присоединившись к Национальной исследовательской лаборатории обороны Израиля (ныне Rafael Advanced Defense Systems) для разработки электронных компонентов для использования в ракетах и других военных системах. Проблема заключалась в том, вспоминает Зив, что ни один из инженеров в группе, включая его самого, не обладал более чем базовым пониманием электроники.Их образование в области электротехники было больше сосредоточено на энергосистемах.
«У нас было около шести человек, и мы должны были учить себя сами, — говорит он. — Мы выбирали книгу, а затем вместе занимались, как религиозные евреи, изучающие еврейскую Библию. Этого было недостаточно».
Целью группы было создание телеметрической системы с использованием транзисторов вместо электронных ламп. Им нужны были не только знания, но и запчасти. Зив связался с Bell Telephone Laboratories и запросил бесплатный образец ее транзистора; компания отправила 100.
«Это покрыло наши потребности на несколько месяцев, — говорит он. — Я считаю себя первым в Израиле, кто сделал что-то серьезное с транзистором».
В 1959 году Зив был выбран в качестве одного из немногих исследователей из оборонной лаборатории Израиля для обучения за границей. По его словам, эта программа изменила эволюцию науки в Израиле. Его организаторы не направляли отобранных молодых инженеров и ученых в определенные области. Вместо этого они позволяют им учиться в аспирантуре любого типа в любой западной стране.
«В то время для того, чтобы запустить компьютерную программу, нужно было использовать перфокарты, и я их ненавидел. Вот почему я не стал заниматься настоящей информатикой ».
Зив планировал продолжить работу в сфере связи, но его больше не интересовало только оборудование. Он недавно прочитал Теория информации (Прентис-Холл, 1953), одна из самых ранних книг по этой теме, написанная Стэнфордом Голдманом, и он решил сосредоточить внимание на теории информации. А где еще можно изучать теорию информации, кроме Массачусетского технологического института, где начинал пионер в этой области Клод Шеннон?
Зив прибыл в Кембридж, штат Массачусетс., в 1960 году. Исследование включало метод определения того, как кодировать и декодировать сообщения, отправляемые по зашумленному каналу, сводя к минимуму вероятность и ошибки и в то же время сохраняя простоту декодирования.
«Теория информации прекрасна, — говорит он. — Она говорит вам, что самое лучшее, что вы можете когда-либо достичь, и [она] говорит вам, как приблизиться к результату. наилучший возможный результат «.
Зив противопоставляет эту уверенность неопределенности алгоритма глубокого обучения.Может быть ясно, что алгоритм работает, но никто точно не знает, является ли это наилучшим возможным результатом.
Находясь в Массачусетском технологическом институте, Зив работал неполный рабочий день в оборонном подрядчике США. Melpar, где он работал над программным обеспечением для исправления ошибок. Он нашел эту работу менее красивой. «В то время для того, чтобы запустить компьютерную программу, нужно было использовать перфокарты, — вспоминает он. — И я их ненавидел. Вот почему я не углублялся в настоящую информатику».
Вернувшись в лабораторию оборонных исследований , проработав два года в США, Зив возглавил Департамент коммуникаций.Затем в 1970 году вместе с несколькими другими сотрудниками он поступил на факультет Техниона.
Там он встретил Авраама Лемпеля. Эти двое обсуждали попытки улучшить сжатие данных без потерь.
Современным уровнем сжатия данных без потерь в то время было кодирование Хаффмана. Этот подход начинается с поиска последовательностей битов в файле данных, а затем их сортировки по частоте, с которой они появляются. Затем кодировщик создает словарь, в котором наиболее распространенные последовательности представлены наименьшим числом битов.Это та же идея, что и в азбуке Морзе: самая частая буква в английском языке, e, представлена одной точкой, в то время как более редкие буквы имеют более сложные комбинации точек и тире.
Кодирование Хаффмана, которое до сих пор используется в формате сжатия MPEG-2 и в формате JPEG без потерь, имеет свои недостатки. Требуется два прохода через файл данных: один для расчета статистических характеристик файла, а второй — для кодирования данных. А хранение словаря вместе с закодированными данными увеличивает размер сжатого файла.
Зив и Лемпель задались вопросом, могут ли они разработать алгоритм сжатия данных без потерь, который работал бы с любыми типами данных, не требовал предварительной обработки и обеспечил бы наилучшее сжатие этих данных, цель, определяемую чем-то, известным как энтропия Шеннона. Было неясно, была ли вообще возможна их цель. Они решили выяснить.
Зив говорит, что они с Лемпелем «идеально подходили» для решения этого вопроса: «Я знал все о теории информации и статистике, а Абрахам хорошо разбирался в булевой алгебре и информатике.»
Эти двое пришли к идее, что алгоритм будет искать уникальные последовательности битов одновременно с сжатием данных, используя указатели для ссылки на ранее обнаруженные последовательности. Этот подход требует только одного прохода через файл, поэтому он быстрее, чем кодирование Хаффмана.
Зив объясняет это так: «Вы смотрите на входящие биты, чтобы найти самый длинный отрезок битов, для которого было совпадение в прошлом. Предположим, что первый входящий бит равен 1. Теперь, поскольку у вас есть только один бит, вы никогда не видели его в прошлом, поэтому у вас нет другого выбора, кроме как передать его как есть.»
«Но тогда вы получите еще один бит», — продолжает он. «Скажите, что это тоже 1. Итак, вы вводите в свой словарь 1-1. Скажем, следующий бит — 0. Итак, в вашем словаре теперь 1-1, а также 1-0 ».
Вот где появляется указатель. В следующий раз, когда поток битов включает 1-1 или 1-0, программное обеспечение не передает эти биты. Вместо этого он отправляет указатель на место, где эта последовательность впервые появилась, вместе с длиной совпадающей последовательности. Количество бит, которое вам нужно для этого указателя, очень мало.
«Теория информации прекрасна. Он говорит вам, что самое лучшее, что вы можете когда-либо достичь, и (он) говорит вам, как приблизиться к результату «.
«Это в основном то, что они делали при публикации TV Guide , — говорит Зив. — Они запускали синопсис каждой программы один раз. Если программа появлялась более одного раза, они не переиздали синопсис. Они просто сказали, вернитесь на страницу x ».
Декодирование таким способом еще проще, потому что декодеру не нужно идентифицировать уникальные последовательности.Вместо этого он находит расположение последовательностей, следуя указателям, а затем заменяет каждый указатель копией соответствующей последовательности.
Алгоритм делал все, что намеревались сделать Зив и Лемпель — он доказал, что возможно универсально оптимальное сжатие без потерь без предварительной обработки.
«В то время, когда они опубликовали свою работу, тот факт, что алгоритм был четким и элегантным и легко реализуемым с низкой вычислительной сложностью, был почти несущественным, — говорит Цачи Вайсман, профессор электротехники Стэнфордского университета, специализирующийся на теории информации.«Это было больше о теоретическом результате».
В конце концов, однако, исследователи осознали практическое значение этого алгоритма, говорит Вайсман. «Сам алгоритм стал действительно полезным, когда наши технологии начали работать с файлами большего размера, превышающими 100 000 или даже миллион символов».
«Их история — это история о силе фундаментальных теоретических исследований, — добавляет Вайсман. — Вы можете получить теоретические результаты о том, что должно быть достижимо, и спустя десятилетия человечество получит выгоду от реализации алгоритмов, основанных на этих результатах.»
Зив и Лемпель продолжали работать над технологией, пытаясь приблизиться к энтропии для небольших файлов данных. Эта работа привела к созданию LZ78. Зив говорит, что LZ78 кажется похожим на LZ77, но на самом деле сильно отличается, потому что он предвосхищает следующее. «Скажем, первый бит — это 1, поэтому вы вводите в словарь два кода, 1-1 и 1-0», — объясняет он. Вы можете представить эти две последовательности как первые ветви дерева ».
«Когда приходит второй бит, — говорит Зив, — если он равен 1, вы отправляете указатель на первый код, 1-1, а если он 0, вы указываете на другой код, 1-0.Затем вы расширяете словарь, добавляя еще две возможности к выбранной ветви дерева. Если вы будете делать это неоднократно, у последовательностей, которые появляются чаще, вырастут более длинные ветви «.
«Оказывается, — говорит он, — это был не только оптимальный [подход], но и настолько простой, что сразу стал полезным».
Джейкоб Зив (слева) и Абрахам Лемпель опубликовали алгоритмы сжатия данных без потерь в 1977 и 1978 годах, оба в IEEE Transactions on Information Theory.Эти методы стали известны как LZ77 и LZ78 и используются до сих пор. Фото: Якоб Зив / Технион
В то время как Зив и Лемпель работали над LZ78, они оба были в творческом отпуске в Технионе и работали в компаниях США. Они знали, что их разработка будет коммерчески полезной, и хотели запатентовать ее.
«Я работал в Bell Labs, — вспоминает Зив, — поэтому я подумал, что патент должен принадлежать им. Но они сказали, что невозможно получить патент, если это не аппаратное обеспечение, и им было не интересно пытаться.»(Верховный суд США не открывал дверь для прямой патентной защиты программного обеспечения до 1980-х годов.)
Однако работодатель Lempel, Sperry Rand Corp., был готов попробовать. Она обошла ограничение на патенты на программное обеспечение, создав оборудование, реализующее алгоритм, и запатентовав это устройство. Сперри Рэнд последовал этому первому патенту с версией, адаптированной исследователем Терри Велчем, под названием алгоритм LZW. Наибольшее распространение получил вариант LZW.
Зив сожалеет о том, что не смог напрямую запатентовать LZ78, но, по его словам, «нам понравился тот факт, что [LZW] был очень популярен.Он сделал нас знаменитыми, и мы также получили удовольствие от исследований, к которым он нас привел «.
Одна из последующих концепций получила название сложности Лемпеля-Зива — меры количества уникальных подстрок, содержащихся в последовательности битов. Чем меньше уникальных подстрок, тем сильнее можно сжать последовательность.
Позднее эта мера стала использоваться для проверки безопасности кодов шифрования; если код действительно случайный, его нельзя сжать. Сложность Лемпеля-Зива также использовалась для анализа электроэнцефалограмм — записей электрической активности в головном мозге — чтобы определить глубину анестезии, диагностировать депрессию и для других целей.Исследователи даже применили его для анализа популярных текстов песен, чтобы определить тенденции повторяемости.
За свою карьеру Зив опубликовал около 100 рецензируемых статей. Хотя работы 1977 и 1978 годов являются самыми известными, у теоретиков информации, пришедших после Зива, есть свои фавориты.
Для Шломо Шамаи, выдающегося профессора Техниона, статья 1976 года представила алгоритм Виннера-Зива, способ охарактеризовать пределы использования дополнительной информации, доступной декодеру, но не кодеру.Эта проблема возникает, например, в видеоприложениях, которые используют тот факт, что декодер уже расшифровал предыдущий кадр, и, таким образом, его можно использовать в качестве дополнительной информации для кодирования следующего.
Для Винсента Пура, профессора электротехники в Принстонском университете, это статья 1969 года, в которой описывается граница Зива-Закая, способ узнать, получает ли сигнальный процессор наиболее точную информацию из данного сигнала.
Зив также вдохновил ряд ведущих экспертов по сжатию данных на занятиях, которые он преподавал в Технионе до 1985 года.Вайсман, бывший студент, говорит, что Зив «глубоко увлечен математической красотой сжатия как способа количественной оценки информации. Получение у него курса в 1999 году сыграло большую роль в том, что я встал на путь моих собственных исследований «.
Не только он был так вдохновлен. «Я взял у Зива уроки теории информации в 1979 году, в начале учебы в магистратуре, — говорит Шамай. — Прошло более 40 лет, а я до сих пор помню этот курс. Это заставило меня задуматься над этими проблемами. проводить исследования и получать докторскую степень.Д. »
В последние годы глаукома лишила Зива большей части зрения. Он говорит, что статья, опубликованная в IEEE Transactions on Information Theory в январе этого года, является его последней. Ему 89 лет.
«Я начал писать статью два с половиной года назад, когда у меня еще было достаточно зрения, чтобы пользоваться компьютером, — говорит он. — В конце концов Юваль Кассуто, младший преподаватель Техниона, завершил проект». В документе обсуждаются ситуации, в которых большие информационные файлы необходимо быстро передавать в удаленные базы данных.
Как объясняет Зив, такая потребность может возникнуть, когда врач хочет сравнить образец ДНК пациента с прошлыми образцами от того же пациента, чтобы определить, была ли мутация, или с библиотекой ДНК, чтобы определить, есть ли у пациента генетическое заболевание. Или исследователь, изучающий новый вирус, может захотеть сравнить его последовательность ДНК с базой данных ДНК известных вирусов.
«Проблема в том, что количество информации в образце ДНК огромно, — говорит Зив, — слишком много для того, чтобы сегодня ее можно было отправить по сети за считанные часы или даже, иногда, за дни.Если вы, скажем, пытаетесь идентифицировать вирусы, которые очень быстро меняются во времени, это может занять слишком много времени «.
Подход, который описывают он и Кассуто, включает использование известных последовательностей, которые обычно появляются в базе данных, чтобы помочь сжимать новые данные, без предварительной проверки конкретного совпадения между новыми данными и известными последовательностями.
«Я действительно надеюсь, что это исследование может быть использовано в будущем», — говорит Зив. Если его послужной список является каким-либо признаком, Кассуто-Зив — или, возможно, CZ21 — дополнит его наследие.
Эта статья появится в майском выпуске 2021 года под названием «Conjurer of Compression».
Arduino Watch Sport 2.0
Arduino Watch Sport 2.0 — это новая версия часов, разработанная с использованием хорошо известной технологии, представленной Arduino. Он имеет социальное управление с помощью мобильных телефонов, таких как SMS, мессенджер, WhatsApp и входящий звонок. Кроме того, он также имеет измерения частоты пульса и насыщения кислородом, а также время и дату, температуру, режим сна, Bluetooth и уровень вибрации.
Arduino Watch Sport 2.0Arduino Watch Sport 2.0 — это новая версия часов, разработанная с использованием хорошо известной технологии, представленной Arduino. Он имеет социальное управление с помощью мобильных телефонов, таких как SMS, мессенджер, WhatsApp и входящий звонок. Кроме того, он также имеет измерения частоты пульса и насыщения кислородом, а также время и дату, температуру, режим сна, Bluetooth и уровень вибрации.
Этот проект состоит из нескольких частей, в которых используется плата SAM21 Mini Breakout, основанная на ATSAMD21G18 32-бит / 48 МГц ARM Cortex-M0 +.Эта коммутационная плата служила основным компонентом, в котором остальные части соединялись и обрабатывали данные. Дисплей представляет собой OLED 128 × 64, который принимает и отображает данные, обработанные и встроенные из SAM21. Переработанный вибратор подключен к цифровому выводу на SAM21, учитывая, что этот вывод также подключен к OLED, который вызывает вибрацию во время уведомления. Bluetooth HC-05 используется для беспроводного подключения этой системы к смартфону. MAX30100 IC — это интегрированное решение датчика пульсовой оксиметрии и контроля сердечного ритма, которое сочетает в себе два светодиода, фотодетектор, оптимизированную оптику и малошумящую аналоговую обработку сигналов для обнаружения пульсоксиметрии и сигналов сердечного ритма.Регулятор для питания 1,8 В подключен к выводу VDD MAX30100 для аналогового питания, а питание 3,3 В на его выводах R_LED + и IR_LED +. Для прямого или ручного управления этими часами Arduino предусмотрены три кнопки. Эти кнопки обозначают правый, ввод и левый, подключенные к одному аналоговому выводу SAM21 с настройкой, использующей теорию делителя напряжения, чтобы иметь разные сигналы, которые представляют для этих трех функций (правый, ввод и левый).
Arduino watch sport 2.0 — отличный проект, который разработан для конкретной цели и может быть изменен в соответствии с приложениями, которые нужны кому угодно.Помимо времени и даты, устройство также подходит для приложений, связанных со здоровьем.
Компоненты:
- Bluetooth HC-05
- Аккумулятор 3,7 В — 340 мА
- Кнопки SMD
- Микроконтроладор Sparfunk Sam21
- Вибрационный двигатель постоянного тока
- Дисплей Oled 128 × 64 Azul
- Переключатель
- Переработанные ремни
- печатная плата
- Резистор SMD
- Конденсатор SMS
- Датчик MAX30100