Направи си сам електронен термометър
Като цяло все пак се събрах и завърших това, което планирах тук
Когато публикувах тук, обещах, че ще продължа работата и ще публикувам кода. Което е точно това, което правя.
Изходният код е тук
Задачата е следната: да се направи устройство, към което да се свържат 3 релета и 3 термометъра. Въз основа на показанията от термометъра е необходимо да включите или изключите релето. Задачата се усложнява от факта, че температурата на включване/изключване и хистерезисът за всяко реле трябва да могат да се регулират. Тоест устройството трябва да има дисплей с меню и бутони.
И така, нека да започнем. Взех контролера AtMega8 като основа, което се оказа не съвсем правилното решение, тъй като има само 4 kB памет за програмата. Спазих тези 4к, но програмата заема 99,7% от паметта, което не ми позволява да добавя нещо ново. Така или иначе.
Първо, рисуваме схема на устройството. Altium Designer беше избран за тази цел и за последващия дизайн на PCB (печатна платка).

Диаграмата съдържа:
- Кристален осцилатор за контролера. Той е този, който задава честотата на процесора.
- LCD дисплей 16x2
- Потенциометър, необходим за регулиране на LCD контраста
- 3 температурни сензора DS18B20
- Заключения за свързване на реле (няма реле в диаграмата)
Всички части са евтини и се поръчват от ebay.
След като сме доволни от резултата, отделяме дъската и получаваме такова красиво нещо

Червени писти от едната страна на дъската, сини от другата. Има няколко варианта как да превърнете файл в здрач в истинска дъска. Избрах лесния и скъп начин - изпращам го до завода, за да го отпечатат по поръчка. Изпращаме файла и парите и получаваме тази готова такса:

Оказа се много неоптимизиран. но добре, първата палачинка е на бучки.
Освен това всички елементи са запоени върху платката според схемата. И получаваме готовото устройство. Но както може би се досещате, няма достатъчно фърмуер. И без фърмуер всичко е просто парче силикон.
Програмата за това устройство е написана на език C в среда AVR Studio 5. Изходният код може да бъде получен, като следвате връзката в началото на публикацията.
Какво има там:
- lcd.h, lcd.c - код за управление на LCD дисплея. В оригиналната версия, когато показваме текст, изчистваме екрана и след това изпращаме низ към дисплея за показване. Но това издава ефекта на трептене, което изглежда много грозно. Проблемът се преодолява чрез двойно буфериране - тоест изпращаме данни за изход, които се съхраняват локално в паметта и след това се изпращат на дисплея наведнъж. Изглежда нещо подобно:

-ds18b20.h, ds18b20.c - код за запитване на температурни сензори
-relay.h, relay.c - код за работа с релета
-settings.h, settings.c - код за работа с постоянна памет за запазване на настройките
regulator8.c - основен програмен код.
Ако някой, тогава се интересуват от това как самите устройства се управляват от програмата. Всяко устройство има свой собствен комуникационен протокол, но всичко се свежда до факта, че контролерът може да подава напрежение към крака или да го изключва. Може също така да провери дали има напрежение на крака или не. LCD комуникира чрез 7 крачета, докато термометърът само през едно.
Но какво да кажем, когато няма устройство под ръка? Има такава програма като proteus - симулатор на електрически вериги. Не работи много добре, но за този проект е достатъчно. Програмата сглобява верига от нашите компоненти. Но не е нужно да правите това, проектът е достъпен в github. Посочвайкипътя до файла с програмата и до файла със съдържанието на паметта, можете да започнете симулацията.

В проекта, заедно с релетата, има обикновени светодиоди, ако температурата на сензора е по-ниска от температурата, зададена в настройките с даден хистерезис, тогава светодиодът се изключва. Всеки желаещ може да играе с кода и симулатора.
В началния момент LCD показва температурата на всички сензори. За да влезете в менюто, натиснете бутона OK и задръжте за около 10 секунди. Освен това можете да го разберете интуитивно.