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

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

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 см. Если коробка железная, сделать аккуратно это крайне сложно. Как ни старайся около реза будут сколы краски и неровности. Поэтому вначале вырезаем, для этого можно использовать «болгарку», дрель с насадкой для реза или фрезой, в общем на ваш выбор, тем что есть под руками. После этого зачищаем напильником края. Все сколы краски закрашиваем лаком для ногтей, подходящего цвета. В итоге должно получиться следующее:
Arduino часы с датчиком температуры и без RTS


Шаг 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 линий при подключении по параллельному порту. Подключается все довольно просто. Есть еще один нюанс, в продаже можно встретить два варианта дисплеев, со встроенным потенциометром (для регулировки контраста) и без него. Я выбрал, и советую тоже сделать вам, со встроенным.
Arduino часы с датчиком температуры и без RTS


Это уменьшает количество деталей и время пайки. Также стоит поставить токоограничительный резистор номиналом 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. В итоге должно получится примерно так:
Arduino часы с датчиком температуры и без RTS


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


И схема для экранов варианта B:
Arduino часы с датчиком температуры и без RTS


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


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


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


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

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


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

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


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


Подключаем экран к Arduino:
Arduino часы с датчиком температуры и без RTS


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


Шаг 6 Подготовка и заливка скетча.
Для датчика температуры нужна библиотека OneWire.
onewire.rar [16.75 Kb] (скачиваний: 91)


Вывод на экран осуществляется через библиотеку U8glib:
u8glib.rar [906.95 Kb] (скачиваний: 85)


Для редактирования и заливки скетча надо установите эти две библиотеки. Сделать это можно двумя способами. Просто распаковать эти архивы и поместить распакованные файлы в папку «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] (скачиваний: 170)

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

Оцените самоделку по критериям

7
Идея
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
8
Описание
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
5
Исполнение
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Итоговая оценка: 6.67 из 10 (голосов: 1)
Чтобы написать комментарий необходимо войти на сайт через соц. сети (или зарегистрироваться):
Обычная регистрация
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Добрый день, Гость!


Зарегистрируйтесь

Или войдите на сайт, если уже зарегистрированы...

Войти

А затем...

Добавьте самоделку

Или...

Добавьте тему

Онлайн чат

Опрос
Сколько по времени, чаще всего, Вы делаете самоделку?

Последние комментарии

С одной и той же мощностью медь и нихром поступят по-разному: нихром излучением отдаст больше чем медь, поэтому нагреется меньше неё. Излучённая теплота уйдёт в оболочку, в воздух, в каркас и на...
Колумб Америку открыл, хороший был моряк, Но заодно он научил весь мир курить табак...)))...
Честно говоря, не совсем понял, но если речь идёт о портативности, то и об экономичности (продолжительности работы), появилась даже мысль поиграться с резисторами типа ПЭВ, помните зелёные...
А я думал Колумб привёз "трубку мира"! Картофель тоже сперва не ели!...
Вот именно. В рассматриваемом изделии нагреватель обтянут термоусадкой. Поэтому та теплота, которой нихром излучит чуть больше, чем медь, всё равно останется в пространстве под оболочкой. Точно так...
Все комментарии