У почетку је термостат направљен као термометар за контролу температуре ван прозора. Тада је током мраза кромпир почео да се смрзава под земљом и додана је функционалност за контролу микроклиме. Подаци о пасошу прекидачког релеја - 250 В и 10А (2,5кВ). Како топлота у подземљу није потребна, довољна је десет по киловату.
Потребни материјали и алати:кутија за негу ципела
-УСБ пуњење за телефон (било који, најмање 0.7А)
-
Ардуино-Про-Мини
-2-линијски дисплеј са 8 знакова (ВХ0802А-НГА-ЦТ је компактнији)
Енкодер са дугметом (може се купити у било којем радио маг-у, дугме не може бити уграђено)
- дете с 5В релејем (купио сам гомилу кинеских релеја без оптичке изолације одједном, па ми је потребан још један Оптоцоуплер ПЦ817 и отпорник 470 Охм. Ако имате оптичку изолацију на типској плочици, натписну плочицу можете директно повезати на ардуино порт)
УСБ конектор
-2 продужни УСБ кабл од 3 метра (један за кабл за напајање, други за лемљење ДС1820)
- ДС1820 (са било којим словом)
лемљење
пиштољ за лепљење
Типска таблица ФТДИ232
Корак 1: Прво, морамо да флешујемо ардуино, јер имам Про Мини (нема УСБ-РС232 конвертор), морам лемити равнило са иглема на ардуино. Са стране на којој су изведени ДТР, ТКСД, РКСД, ВЦЦ, ГНД, ГНД. Сада повезујемо ФТДИ232 ДТР на ДТР, ВЦЦ на ВЦЦ, ГНД на ГНД, ТКСД на РКСД, РКСД на ТКСД. Покрените ардуино ИДЕ, преузмите скицу и флеширајте је (скица на крају).
Корак 2: Сада се побринимо за труп. Одвојимо сунђером на „ФУКС“, све добро размастимо, дубоки део кутије може се пренети крпом (нешто ће се чвршће залепити). Означите рупу за давач, УСБ конектор (матицу) и сам дисплеј. Лепите релеј на поклопац кутије. Морамо покушати поставити релеј даље од процесора и распоредити компоненте тако да се поклопац касније затвори (има довољно простора).
Корак 3: Сада узимамо УСБ продужни кабл, одрежемо утичницу (матична). Одсекли смо одсечени крај, избушили рупу за кабл у телу, уметнули га и пиштољем залепили кључ. Плус, кабл има црвену, минус црну (само проверим), плус плус конектора, минус минус (не дајем пиноут конектора - на Интернету је). Између плус конектора и 2 медија (имам их спојених) мора се лемити отпорник од 4,7 кОхм.
Корак 4: Узимамо 2 УСБ продужна кабла, одрежемо конектор (матични), прережемо кабл. За сваки случај ћемо проверити да ли смо сви правилно лемљени. Кабл за напајање повезујемо са УСБ пуњењем и на мрежу, залепимо исечени кабл у УСБ прикључак, погледамо тестер + на црвено - на црно. Извучемо кабл и лемимо ДС1820: - на 1, + до 3 преостале 2 жице на 2. Затим премажем епоксидним спојем (за поправак резервоара, радијатора), остављајући мало кућишта сензора напољу, како би дошло до брже реакције на промене температуре.Па, радимо инсталацију према дијаграму кола (повезујемо снагу и уземљење релејне плоче са заједничким + и - круговима, респективно).
Корак 5: Све компоненте кола су повезане. Повезујемо наш сензор (без њега, екран ће остати црн), применимо напајање. У првом реду - вредност температуре, у 2 ако је „*“ укључено - релеј је укључен, не - искључен. Сада покушајмо да поставимо границе пребацивања релеја. Притисните осовину давача (или ваше дугме) појави се гранична вредност при којој ће се релеј укључити ротирањем осовине - вредност се повећава или смањује. Кликом на вратило поново - добивамо горњу границу (релеј ће се искључити), подесимо вредност и поново притиснемо. Уређај ће пратити температуру, вредност ограничења се одржава када је напајање искључено. То је све.
#инцлуде <ОнеВире.х>
#инцлуде <ЛикуидЦристал.х>
#инцлуде <ЕЕПРОМ.х>
#дефине БУТТОН_1_ПИН 10 // излазни број тастера 1 је 12
ОнеВире ДС (12); // на пин 10 (отпорник од 4,7К је потребан)
// иницијализирајте библиотеку бројевима иглица сучеља
Течни кристални ЛЦД (3, 2, 4, 5, 6, 7);
непотписана дуга струјаТиме;
цонст инт пин_А = 8; // пин 12
цонст инт пин_Б = 9; // пин 11
непотписани цхар енц_А;
непотписани цхар енц_Б;
непотписани цхар енц_А_прев = 0;
флоат н_пр = 24.1;
флоат б_пр = 26,2;
бооле приз = фалсе;
Буттон класе {
јавно:
Дугме (бајт пин, време бајтаБуттон); // опис конструктора
боолеан флагПресс; // дугме заставе је сада притиснуто
боолеан флагЦлицк; // дугме заставе је притиснуто (клик)
воид сцанСтате (); // метода за проверу стања сигнала
воид сетПинТиме (бајт пин, бајт тимеБуттон); // метода за подешавање излазног броја и времена потврде (броја)
приватно:
бите _буттонЦоунт; // стабилни бројач потврде стања
бите _тимеБуттон; // вријеме потврде стања дугмета
бите _пин; // пин број
};
Дугме дугмета1 (БУТТОН_1_ПИН, 30);
воид кнопка () {
лцд.цлеар ();
лцд.сетЦурсор (1,0);
лцд.принт (н_пр);
// буттон1.сцанСтате ();
док је (буттон1.флагЦлицк == фалсе) {
енц_А = дигитално читање (пин_А);
енц_Б = дигитално читање (пин_Б);
иф ((! енц_А) && (енц_А_прев)) {
ако (енц_Б) {
н_пр = н_пр-0,1;
} елсе {
н_пр = н_пр + 0,1;
}
лцд.цлеар ();
лцд.сетЦурсор (1,0);
лцд.принт (н_пр);
}
енц_А_прев = енц_А;
буттон1.сцанСтате ();
}
буттон1.флагЦлицк = лажно;
лцд.цлеар ();
лцд.сетЦурсор (1,0);
лцд.принт (б_пр);
док је (буттон1.флагЦлицк == фалсе) {
енц_А = дигитално читање (пин_А);
енц_Б = дигитално читање (пин_Б);
иф ((! енц_А) && (енц_А_прев)) {
ако (енц_Б) {
б_пр = б_пр-0,1;
} елсе {
б_пр = б_пр + 0,1;
}
лцд.цлеар ();
лцд.сетЦурсор (1,0);
лцд.принт (б_пр);
}
енц_А_прев = енц_А;
буттон1.сцанСтате ();
}
буттон1.флагЦлицк = лажно;
иф (н_пр> б_пр) {
флоат вр = н_пр;
н_пр = б_пр;
б_пр = вр;
}
инт аддр = 0;
ЕЕПРОМ.врите (аддр, 'и');
аддр = 1;
ЕЕПРОМ.пут (аддр, н_пр);
аддр + = сизеоф (флоат);
ЕЕПРОМ.пут (аддр, б_пр);
кашњење (300);
}
подешавање празнине (воид) {
пинМоде (11, ИЗЛАЗ);
пинМоде (пин_А, ИНПУТ_ПУЛЛУП);
пинМоде (пин_Б, ИНПУТ_ПУЛЛУП);
лцд.бегин (8.2);
инт аддр = 0;
цхар ц = ЕЕПРОМ.реад (аддр);
аддр = аддр + 1;
ако је (ц == 'и') {
ЕЕПРОМ.гет (аддр, н_пр);
аддр + = сизеоф (флоат);
ЕЕПРОМ.гет (аддр, б_пр);
}
// Сериал.бегин (9600);
}
воид петља (воид) {
бите и;
бајт присутан = 0;
бите типе_с;
бајтни подаци [12];
бајт аддр [8];
флоат целсиус;
иф (! дс.сеарцх (аддр)) {
дс.ресет_сеарцх ();
кашњење (250);
повратак
}
иф (ОнеВире :: црц8 (аддр, 7)! = аддр [7]) {
повратак
}
// први бајт РОМ-а означава који чип
преклопник (аддр [0]) {
кућиште 0к10:
типе_с = 1;
одмор;
кућиште 0к28:
типе_с = 0;
одмор;
кућиште 0к22:
типе_с = 0;
одмор;
подразумевано:
повратак
}
дс.ресет ();
дс.селецт (аддр);
дс.врите (0к44, 1); // започните претварање, са укљученом енергијом паразита на крају
енц_А = дигитално читање (пин_А);
енц_А_прев = енц_А;
цуррентТиме = миллис ();
док ((миллис () - цуррентТиме) <2000) {
буттон1.сцанСтате ();
ако (буттон1.флагЦлицк == тачно) {
// било је клика на дугме
буттон1.флагЦлицк = лажно; // ресетирај атрибут клика
кнопка ();
}
}
// кашњење (1000); // можда је 750мс довољно, можда није
// могли бисмо овде да урадимо дс.деповер (), али ресет ће се побринути за то.
пресент = дс.ресет ();
дс.селецт (аддр);
дс.врите (0кБЕ); // Прочитајте Сцратцхпад
за (и = 0; и <9; и ++) {// потребно нам је 9 бајтова
дата [и] = дс.реад ();
}
// Претворите податке у стварну температуру
// јер је резултат 16-битни цијели број, требао би
// бити сачуван до типа "инт16_т", који је увек 16 бита
// чак и када се компилира на 32-битном процесору.
инт16_т рав = (подаци [1] << 8) | дата [0];
иф (типе_с) {
рав = рав << 3; // Подразумевана 9 битна резолуција
иф (подаци [7] == 0к10) {
// „цоунт цоунт остаће“ даје пуну 12-битну резолуцију
рав = (рав & 0кФФФ0) + 12 - подаци [6];
}
} елсе {
бите цфг = (подаци [4] и 0к60);
// код ниже резолуције, ниски битови су недефинисани, па их поништимо
ако је (цфг == 0к00) рав = рав & ~ 7; // 9-битна резолуција, 93,75 мс
друго ако (цфг == 0к20) рав = рав & ~ 3; // 10-битна рес, 187,5 мс
друго ако (цфг == 0к40) рав = рав & ~ 1; // 11 битна резолуција, 375 мс
//// подразумевана је 12-битна резолуција, време конверзије 750 мс
}
целсиус = (плута) сиров / 16.0;
лцд.цлеар ();
лцд.сетЦурсор (1,0);
лцд.принт (целзијус);
иф (приз) {
лцд.сетЦурсор (0,1);
лцд.принт ('*');
}
иф (н_пр! = б_пр) {
иф (целзијус <н_пр) {
дигиталВрите (11, ХИГХ);
приз = тачно;
}
иф (целзијус> б_пр) {
дигиталВрите (11, НИЗ);
приз = фалсе;
}
}
}
// метода провјере стања дугмета
// флагПресс = тачно - кликнуто
// флагПресс = лажно - притиснуто
// флагЦлицк = труе - кликнута је (клик)
воид дугме :: сцанСтате () {
иф (флагПресс == (! дигиталРеад (_пин))) {
// стање сигнала остаје исто
_буттонЦоунт = 0; // ресетује бројач статуса сигнала
}
елсе {
// стање сигнала се променило
_буттонЦоунт ++; // +1 на бројачу стања сигнала
иф (_буттонЦоунт> = _тимеБуттон) {
// стање сигнала није промењено одређено време
// стање сигнала постало је стабилно
флагПресс =! флагПресс; // инверзна индикатор статуса
_буттонЦоунт = 0; // ресетује бројач статуса сигнала
иф (флагПресс == труе) флагЦлицк = труе; // знак клика на клик
}
}
}
// метода за подешавање излазног броја и времена потврде
воид дугме :: сетПинТиме (бајт пин, бите тимеБуттон) {
_пин = пин;
_тимеБуттон = тимеБуттон;
пинМоде (_пин, ИНПУТ_ПУЛЛУП); // дефинишу излаз као улаз
}
// опис конструктора класе Буттон
Дугме :: Дугме (бајт пин, бајт времеБуттон) {
_пин = пин;
_тимеБуттон = тимеБуттон;
пинМоде (_пин, ИНПУТ_ПУЛЛУП); // дефинишу излаз као улаз
}