Добър ден, днес ще споделя инструкции как да си направя часовник със стаен термометър. Часовникът работи Arduino UNO, WG12864B графичен екран се използва за показване на времето и температурата. Като температурен датчик - ds18b20. За разлика от повечето други часовници, аз няма да използвам RTS (часовник в реално време), но се опитвам да направя без този допълнителен модул.
За това домашно Необходими са следните компоненти:
- Arduino UNO (или който и да е друг съвместим Arduino съвет)
- Графичен екран WG12864B
- сензор за температура ds18b20
- Резистор 4.7 Kom 0.25 W
- Резистор 100 ома 0,25 W
- Отделение за батерии за 4 батерии тип АА „тип пръст“
- Подходяща кутия
- Малък файл
- Лак за нокти (черен или телесен цвят)
- Малка тънка пластмаса или картон
- електрическа лента
- свързващи проводници
- платка
- Бутони
- поялник
- спойка, колофон
- Двустранна лента
Стъпка 1 Подготовка на заграждението.
Така че, нашите часовници трябва да бъдат разположени някъде. Трябва да намерите подходяща кутия. Основното е, че екранът WG12864B, Arduino и малка платка за бутони се поберат в него. Минималният размер на кутията е 7 x 7 x 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 дисплеи AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG12864YJ, Q12864Y-1, Q12, QY, Q12, QQ
Вариант В: Шенжен Дзинхуа показва Ко ООД 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 (Д) - 13
15 (PSB) - БНД
19 (BLA) - през резистора - + 5V
20 (BLK) - БНД
Най-удобното е да съберете всичко зад екрана и да изведете 5 проводника от него, за да се свържете с Arduino UNO. Резултатът трябва да е нещо подобно:
За тези, които все още избират паралелна връзка, ще дам таблица за връзка.
И оформлението на екраните с опция Б:
Стъпка 3 Свържете сензора за температура.
Както казах, ще използваме вградения сензор DS18B20 за измерване на температурата. Избрах го заради високата му точност на измерване, грешката не е повече от 0,5 ° C. Сензорът се калибрира по време на производството, не са необходими допълнителни настройки. Диапазон на измерване на температурата -55 ... + 125 ° C. Има два режима на работа: с външен източник на енергия и „фалшиво захранване“. Когато работите в режим на външно захранване, връзката е следната:
При използване на "фалшиво захранване" сензорът получава захранване от комуникационната линия. В този режим са достатъчни два проводника за свързване на ds18b20 към микроконтролера. Вътрешният кондензатор на сензора се зарежда поради енергия на комуникационната линия на ниско ниво на шината. Режимът на "паразитно хранене" има много функции и затова не препоръчвам да го използвате. Но ако все пак решите да го използвате, ето схемата:
Или можете да използвате подобрена схема на окабеляване, когато използвате "фалшиво захранване":
Няколко сензора могат да бъдат включени в една комуникационна линия. За нашите часовници един е достатъчен. Свързваме проводника от “DQ” ds18b20 щифт към “щифт 5” Arduino UNO.
Стъпка 4 Подготовка на дъска с бутони.
За да зададем часа и датата на часовника, ще използваме три бутона. За удобство спойка трите бутона на платката и извадете жица.
Свързваме се по следния начин: проводникът, общ за всички три бутона, е свързан към „GND“ Arduino. Първият бутон, той служи за влизане в режим на настройка на времето и превключване по време и дата, свържете се с "Пин 2". Вторият, бутонът за увеличаване на стойността, е към "Pin 3", а третият, бутонът за намаляване на стойността, е към "Pin 4".
Стъпка 5 Съставяне на всичко заедно.
За да избегнете късо съединение, изолирайте екрана. В кръг увиваме с електрическа лента, а на гърба закрепваме към двустранна лента, нарязана по размер, лента от изолационен материал. Подходящ е дебел картон или тънка пластмаса. Използвах пластмаса от хартиена таблетка. Оказа се следното:
От предната страна на екрана по ръба лепим двустранна лента на пяна, за предпочитане черна.
Свързваме екрана с Arduino:
Плюс това, ние се свързваме от отделението за батерии към „VIN“ Arduino, минус до „GND“. Поставяме го зад Arduino. Преди да инсталирате в кутията, не забравяйте да свържете сензора за температура и платката с бутони.
Стъпка 6 Подгответе и напълнете скицата.
Датчик за температура се нуждае от библиотеката на OneWire.
Изходът към екрана е през библиотеката U8glib:
За да редактирате и попълните скицата, инсталирайте тези две библиотеки. Има два начина да направите това. Просто разархивирайте тези архиви и поставете разархивираните файлове в папката „библиотеки“, разположена в папката с инсталирания Arduino IDE.Или втората възможност е да инсталирате библиотеката директно в средата за програмиране. Без да разопаковате изтеглените архиви, в Arduino IDE изберете менюто Sketch - Connect Library. В самия връх на падащия списък изберете елемента „Добави. Zip Library“. В диалоговия прозорец, който се показва, изберете библиотеката, която искате да добавите. Отворете отново менюто Sketch - Connect Library. В самото дъно на падащия списък трябва да видите нова библиотека. Сега библиотеката може да се използва в програми. Не забравяйте да рестартирате Arduino IDE след всичко това.
Температурният сензор работи съгласно протокола One Wire и има уникален адрес за всяко устройство - 64-битов код. Всеки път търсенето на този код е непрактично. Затова първо трябва да свържете сензора към Arduino, да попълните скицата, разположена в менюто File - Примери - Температура на Далас - OneWireSearch. След това стартирайте Tools - Port Monitor. Arduino трябва да намери нашия сензор, да напише неговия адрес и текущите показания на температурата. Копираме или просто записваме адреса на нашия сензор. Отворете скицата Arduino_WG12864B_Term, потърсете линията:
байт addr [8] = {0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97}; // адрес на моя сензор
Записваме адреса на вашия сензор между скоби, замествайки адреса на моя сензор.
снимка:
//u8g.setPrintPos (44, 64); u8g.print (сек); // Печатайте секунди, за да проверите правилността на курса
Показва секунди до „Данни“. Това е необходимо, за да се определи точно хода на времето.
Ако часовникът бърза или изостава, трябва да промените стойността в реда:
ако (micros () - prevmicros> 494000) {// промяната на друга за корекция беше 500000
Експериментално определих броя, при който часовникът върви доста точно. Ако часовникът ви бърза, трябва да увеличите този брой; ако аз съм зад, го намалете. За да определите точността на курса и се нуждаете от заключителни секунди. След точното калибриране на номера, секундите могат да бъдат коментирани и по този начин да бъдат премахнати от екрана.
Попълнете скицата.