Всем привет, дороги читатели! Длинопост!
В одном из магазинов города наткнулся на очень интересные индикаторы АЛ304 и всего по 10 гривен. Понравились - беру!
Сразу в голове идея - часы! Но не простые.
Функции планирую следующие:
- отображение времени ( само собой);
- уведомление о звонке (надпись CALL + вибро);
- уведомление о сообщениях ( надпись MESS + вибро);
- просмотр даты;
- будильник;
- сброс звонка;
- индикация заряда батареи;
Что то и этого сделаю, а что то может нет, но да ладно.
Первым делом самолеты надо разобраться с деталями, и вот что у меня оказалось под рукой (Цена в Украине):
- Микроконтроллер Atmega328p (TQF32). (Брал на али по 0,8$ за шт.)
- Горсть транзисторов 8050 (для катодов индикаторов и вибро мотора.(по 50 коп. х 5шт.=2.5 грн.)
- Керамический резонатор в SMD исполнении. (3 грн.)
- Контроллер сенсорной кнопки ТТР223 (да, кнопка одна и да, она сенсорная(планирую
акриловый верх)) (2 грн.).
- Контроллер заряда BRCL3160MF (1.5 грн.). Даташит!
- Индикатор АЛ304 (10грн. х4 шт.= 40грн.).
- Микро USB (5грн.).
- Резисторы: (15шт. х 0,3грн. = 4.5 грн.).
-10 Ом (4шт.).
-100 Ом (1шт.).
-1 кОм (7шт.).
-10 кОм (2шт.).
-56 кОм (1шт.).
-Конденсаторы: (5шт. х 1грн. =4 грн.)
-0.1 мкФ (2 шт.).
-1 мкФ (2 шт.).
-100 мкФ (1 шт.). Выпаян с какой то платы.
-Диоды SS14(можно и 4148) (2шт. х 0,5грн. =1 грн.).
-Блютуз НС-05 (остался от других проектов) (50 грн.).
-Аккумулятор liPol 500mAh - (50 грн.).
-Текстолит - бесплатно!
Итог: 185грн.
Схему не делал( не люблю это занятие, хорошее воображение и память - вот моя схема), а компенсировать вопрос "что-куда" решил надписями номенклатуры компонентов на плате.
Далее в SL5.0 набросал примерный чертеж . получилось вот что (новая плата, на момент написания этой статьи не готовая):
Видите что куда? Нет? И я не вижу!
А так???
Далее печатаем фотошаблон, клеим фоторезист, светим, травим , сверлим, паяем и получаем нечто такое:
Так как в программирование я не очень, пришлось шуршать гуглом, чтоб найти, простое решение динамической индикации. Решение нашел вот тут: ссылка! и немного скорректировал под себя.
Слово о программе. Делал я ее в Arduino IDE. а заливал следующим образом:
- берем ардуино нано і заливаем скетч Arduino as ISP.
- в настройках ардуино ИДЕ ставим галочку в пункте "Компиляция"
-пишем код для часов, и компилируем его для плати Уно, Нано и т.д. ( Любая плата с контроллером Атмега 328.)
В окне компиляции видим, куда компилятор сохраняет hex, bin и rom файлы.
Нас интересует этот путь :
С помощью команды Win+R отрываем "выполнить" . Вводим команду "AppData", в папке Local ищем папку "Temp", а в ней открываем папку arduino_build_хххххх, где хххххх - номер сборки, которую показал компилятор. Видим следующие:
Нас интересует один из этих файлов. Разница в том, что приставка with_bootloader означает, что по мимо самой программы запишется сам загрузчик для платы ардуино. Но нам это не нужно, так ка загрузчик иногда тормозит роботу микроконтроллера. В файле Clock имеется всё, что нам надо но без загрузчика. Копируем этот файл например на рабочий стол.
Далее нам надо с вами прошить этот файл в часы. Для этого подключим микроконтроллер (уже распаяный и с установленным резонатором к запрограммированной Ардуинке по ISP:
Микроконтроллер Ардуино (Уно .Нано.)
17 (SCK) 13
16 (MISO) 12
15 (MOSI) 11
29 (Reset) 10
VCC 5V
GND GND
Далее нужно установить программу AVRDUDE с поддержкой ардуино плат. ТЫК!
И настраиваем его как в описании. Если всё правильно настроили то при нажатии на DETECT у вас должен определится МК АТмега 328р. ( если не получилось то проверьте соединение и поменяйте местами пин 12 и 11 на ардуино!)
Фьюзы настраиваем на внешний кварц :
L=0xFF
H=0xDA
E=0xFD
Следующим этапом стала проверка возможности передачи информации по блютузу. Для этого на скорую руку собрал не большое приложение в AppInventor. скачал на телефон , сделал конект с телефона с блютузом часов.
Программа читает цифры с поля ввода и при нажатии на "Отправить" шлет их по блютуз.
Блютуз на часах подключен с аппаратному UART. Поэтому нам надо использовать стандартную библиотеку Serial. Код для реакции будет ну очень простой, нам всего лишь надо принять данные, сохранить их в переменную и показать на "экране" часов.
Делается это так:
int digital =0000; //тут изначальное значение цифр на экране
void setup(){
Serial.begin(9600); // включаем монитор порта на скорость 9600 бод
// другой код из сетапа
}
void loop(){
if(Serial.available()){ //если данные пришли
digital=Serial.parseInt(); //переводим их в цифры и записываем переменную.
// другой код из цикла.
}
Далее , когда подставим эти строки в пример динамической индикации то получим следующее:
На этом первая часть статьи завершилась. Почему в место графического экрана 7 сегментник, да просто я так захотел. Такая моя идея. Предложения, критику приму с радостью. По поводу схем и всего остального - ждите в следующих статьях. Пишу с работы.
С уважением! Ваш Чужой Человек!