Arduino часы с датчиком температуры и без RTS

Добрый день, сегодня я поделюсь инструкцией по изготовлению часов с комнатным термометром. Часы работают на Arduino UNO, для отображения времени и температуры служит графический экран WG12864B. В качестве датчика температуры — ds18b20. В отличие от большинства других часов я не буду использовать RTS (Real Time Clock), а попробую обойтись без этого дополнительного модуля.

Для данной самоделки необходимы следующие компоненты:
— Arduino UNO (Или любая другая Arduino совместимая плата)
— Графический экран WG12864B
— Датчик температуры ds18b20
— Резистор 4.7 Ком 0.25 Вт
— Резистор 100 ом 0.25 Вт
— Батарейный отсек для 4 батареек типа АА «пальчиковых»
— Подходящая коробка
— Мелкий напильник
— Лак для ногтей (черный или под цвет корпуса)
— Немного тонкого пластика или картона
— Изолента
— Соединительные провода
— Монтажная плата
— Кнопки
— Паяльник
— Припой, канифоль
— Двусторонний скотч

Шаг 1 Подготовка корпуса.
Итак, наши часы должны где-то располагаться. Необходимо найти подходящую коробку. Главное чтобы в нее поместились экран WG12864B, Arduino и маленькая монтажная плата для кнопок. Минимальный размер коробки 7х7х10 см. Если использовать маленькую плату Arduino можно впихнуть в коробку и поменьше, но я буду описывать процесс на примере Arduino UNO. Материал из которого сделана коробка предпочтительно пластик, если, как у меня, она железная, стоит позаботиться об изоляции, чтобы внутри нечего не «коротнуло». Пластик предпочтительнее и потому что его проще резать. С коробкой, он же корпус наших часов, определились. Теперь необходимо прорезать окошко под экран размером 6.5х4 см. Если коробка железная, сделать аккуратно это крайне сложно. Как ни старайся около реза будут сколы краски и неровности. Поэтому вначале вырезаем, для этого можно использовать «болгарку», дрель с насадкой для реза или фрезой, в общем на ваш выбор, тем что есть под руками. После этого зачищаем напильником края. Все сколы краски закрашиваем лаком для ногтей, подходящего цвета. В итоге должно получиться следующее:

Шаг 2 Подготовка графического экрана.
С подключение экрана, на первый взгляд, возникает много проблем и сложностей. Но если вначале разобраться с их видами, станет намного легче и понятнее. Существует много разновидностей и типов экранов на контролере ks0107/ks0108. Все экраны принято делить на 4 типа:
Вариант A: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T
Вариант B: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ Displays AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG12864J4, QY-12864F, TM12864L-2, 12864J-1
Вариант C: Shenzhen Jinghua Displays Co Ltd. JM12864
Вариант D: Wintek- Cascades WD-G1906G, Wintek — GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/MGLS19264/HD61202

Список не полный, их очень много. Самый распространённый и, на мой взгляд, удобный WG12864B3 V2.0. Дисплей можно подключить к Arduino по последовательному или параллельному порту. При использовании с Arduino UNO лучше выбрать подключение по последовательному порту – тогда нам потребуется всего 3 выхода микроконтроллера, вместо минимум 13 линий при подключении по параллельному порту. Подключается все довольно просто. Есть еще один нюанс, в продаже можно встретить два варианта дисплеев, со встроенным потенциометром (для регулировки контраста) и без него. Я выбрал, и советую тоже сделать вам, со встроенным.

Это уменьшает количество деталей и время пайки. Также стоит поставить токоограничительный резистор номиналом 100 Ом для подсветки. Подключая напрямую 5 вольт, существует риск сжечь подсветку.
WG12864B – Arduino UNO
1 (GND) — GND
2 (VCC) — +5V
4 (RS) – 10
5 (R/W) – 11
6 (E) – 13
15 (PSB) – GND
19 (BLA) – через резистор — +5V
20 (BLK) – GND

Удобнее всего это все собрать сзади экрана и вывести от него 5 проводов подключения к Arduino UNO. В итоге должно получится примерно так:

Для тех кто все-таки выберет параллельное подключение приведу таблицу подключения.

И схема для экранов варианта B:

Шаг 3 Подключение датчика температуры.
Как я уже говорил, для измерения температуры будем использовать интегральный датчик DS18B20. Выбрал его за высокую точностью измерения, погрешность не более 0,5 °C. Датчик откалиброван при изготовлении, какой-либо дополнительной настройки не требуется. Диапазон измерения температуры -55 … + 125 °C. Есть два режима работы: с внешним источником питания и «паразитного питания». При работе в режиме внешнего питания подключение следующее:

При использовании «паразитного питания» датчик получает питание от линии связи. В этом режиме для подключения ds18b20 к микроконтроллеру достаточно двух проводов. Внутренний конденсатор датчика заряжается за счет энергии на линии связи при низком уровне на шине. У режима «паразитного питания» много особенностей и поэтому я не рекомендую его использовать. Но если вы все-таки решили использовать его, вот схема:

Или можно использовать улучшенную схему подключения при использовании «паразитного питания»:

На одну линию связи может быть включено несколько датчиков. Для наших часов достаточно одного. Подключаем провод от контакта «DQ» ds18b20 к «pin 5» Arduino UNO.

Шаг 4 Подготовка платы с кнопками.
Для установки времени и даты на часах будем использовать три кнопки. Для удобства спаиваем три кнопки на монтажной плате и выводим провода.

Подключаем следующим образом: общий для всех трех кнопок провод подключаем к «GND» Arduino. Первую кнопку, она служит для входа в режим установки времени и переключения по времени и дате, подключаем к «Pin 2». Вторая, кнопка увеличения значения, — к «Pin 3», а третья, кнопка уменьшения значения, — к «Pin 4».

Шаг 5 Сборка всего воедино.
Чтобы избежать короткого замыкания, следует заизолировать экран. По кругу обматываем изолентой, а на заднюю часть крепим на двусторонний скотч, вырезанную по размеру, планку из изолирующего материала. Подойдет плотный картон или тонкий пластик. Я воспользовался пластиком от планшета для бумаги. Получилось следующее:

Спереди экрана по краю клеим двусторонний скотч на вспененной основе, желательно черный.

Подключаем экран к Arduino:

Плюс от батарейного отсека подключаем к «VIN» Arduino, минус к «GND». Размещаем его сзади Arduino. Перед установкой в корпус, не забудьте подключить датчик температуры и плату с кнопками.

Шаг 6 Подготовка и заливка скетча.
Для датчика температуры нужна библиотека OneWire.

onewire.rar

[16.75 Kb] (скачиваний: 200)

Вывод на экран осуществляется через библиотеку U8glib:

u8glib.rar

[906.95 Kb] (скачиваний: 200)

Для редактирования и заливки скетча надо установите эти две библиотеки. Сделать это можно двумя способами. Просто распаковать эти архивы и поместить распакованные файлы в папку «libraries», находящуюся в папке с установленной Arduino IDE. Или второй вариант установить библиотеки прямо в среде программирования. Не распаковывая скачанные архивы, в среде Arduino IDE выберите меню Скетч – Подключить библиотеку. В самом верху выпадающего списка выберите пункт «Добавить .Zip библиотеку». В появившемся диалоговом окне выберете библиотеку, которую вы хотите добавить. Снова откройте меню Скетч – Подключить библиотеку. В самом низу выпадающего списка вы должны увидеть новую библиотеку. Теперь библиотеку можно использовать в программах. Не забудьте после всего этого перезагрузить Arduino IDE.

Датчик температуры работает по протоколу One Wire и имеет уникальный адрес для каждого устройства — 64-разрядный код. Каждый раз искать этот код нецелесообразно. Поэтому необходимо вначале подключить датчик к Arduino, залить в нее скетч находящийся в меню Файл – Примеры – Dallas Temperature – OneWireSearch. Далее запускаем Инструменты — Монитор порта. Arduino должна найти наш датчик, написать его адрес и текущие показания температуры. Копируем или просто записываем адрес нашего датчика. Открываем скетч Arduino_WG12864B_Term, ищем строку:

byte addr[8]={0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97};//адрес моего датчика

Записываем адрес вашего датчика между фигурными скобками, заменяя адрес моего датчика.

Стока:

//u8g.setPrintPos( 44, 64); u8g.print(sek); // Выводим секунды для контроля правильности хода

Служит для вывода секунд рядом с надписью «Data». Это необходимо для точной установки хода времени.
Если часы спешат или отстаю следует поменять значение в строке:

if (micros() — prevmicros >494000) { // поменять на другое для корректировки было 500000

Я опытным путем определил число, при котором часы идут достаточно точно. Если ваши часы спешат следует увеличить это число, если отстаю – уменьшить. Для определения точности хода и нужен вывод секунд. После точной калибровки числа, секунды можно закомментировать и таким образом убрать с экрана.

Заливаем скетч.

arduino_wg12864b_term.rar

[3.64 Kb] (скачиваний: 404)

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Подборки: Датчик

Источник: usamodelkina.ru