» » » 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] (скачиваний: 61)


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


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

Arduino часы с датчиком температуры и без RTS
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Чтобы написать комментарий необходимо войти на сайт через соц. сети (или зарегистрироваться):
Обычная регистрация
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

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


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

А затем...

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

Или...

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

Онлайн чат

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

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

Уважаемый ELEN, не могли ли Вы написать размеры магнитного уголка на неодимовый магнитах. За раннее спасибо....
Здравствуйте! Ваш вариант крепления, конечно супер бюджетный и по надёжности крепления позавидуют даже самые дорогие туле-шмуле, не говоря уже о всяких там дешманских атлантах, но это крепление имеет...
Не прикручивает. ;) Вольтметр ниже 4,5 В может не показывать напряжение, а выше 30 В - может выйти из строя. Конструкция получилась так себе, но сам модуль - хороший, желающие могут почитать про него...
Ещё вопросы. ; 1. Что за редуктор? 2. Что за "мощный мотор"? 3. Какое у двигателя напряжение питания? 4. Как Вы собираетесь коммутировать ток "мощного мотора" тактовой фитюлькой...
Все комментарии