Výroba termostatu
Výroba termostatu
Zdravím Vás, našel by se někdo pro spolupráci na výrobě prototypu termostatu? Stručný popis zařízení umístěné v krabici KPZ11, teplotní čidlo DS18B20 s volitelně dlouhým přívodem (1,2,3m), připojení do zdířky na krabici stereo Jack 3,5mm. Na krabici osazen hodinový display a otočný knoflík potenciometru pro nastavení teploty 0-99°C. První dvě číslovky displeje zobrazují skutečnou teplotu z čidla a druhé dvě nastavenou potenciometrem. Toto je moje prvotní představa, samozřejmě se nebráním lepším nápadům. S hardwarem si poradím, ale potřebuju někoho kdo napíše program. Třeba bychom pak mohli pokračovat na dalších projektech.
Re: Výroba termostatu
Něco takového mám u kotle. Akorát ta věc co se strká do zásuvky má rádiový přijímač místo 3,5 jacku a displej a regulační kolečko je na krabičce s vysílačem. Je tam i teplotní senzor, takže to hodíš někde v místnosti, kde chceš regulovat teplotu někam na zeď a ono to vysílá do sklepa signály, které zapínají a vypínají kotel. Jo a ta krabička v zásuvce přímo neodpojuje 230V, ale má na sobě výstupní relé přes který ten kotel ovládá ...
takže kotel je trvale připojen na 230V a dostává signál on/off...

Re: Výroba termostatu
Takový termostat jsem už taky k elektrokotli připojoval, tohle je takový univerzálnější. Taky by se do toho dalo umístit čidlo DT11 a když nebude připojeno DS18B20, tak to pojede podle něj. Jsem schopen tak nějak poskládat program až na to, že nedokážu donutit displej zobrazovat vedle sebe ty dvě teploty.
Re: Výroba termostatu
Na základě ukázkového příkladu z knihovny toho displeje by se dvě teploty mohly zobrazit třeba takhle:
( https://github.com/avishorp/TM1637/blob ... 37Test.ino )
( https://github.com/avishorp/TM1637/blob ... 37Test.ino )
Kód: Vybrat vše
.
.
.
teplota1 = 25; // vlevo
teplota2 = 48; // vpravo
int zobrazeni = (teplota1 * 100) + teplota2; // = 2548
display.showNumberDec(zobrazeni, true); // zobrazeni cisla s uvodnimi nulami
.
.
.
.
Re: Výroba termostatu
Myslel jsem, že se třeba někdo ozve, že by se mu to hodilo taky a společně bychom to dali dohromady.
Děkuji za kód vyzkouším, zatím pouze zobrazuji teplotu z čidla:
Děkuji za kód vyzkouším, zatím pouze zobrazuji teplotu z čidla:
Re: Výroba termostatu
Tak jsem to zkusil, ale narazil jsem na nulové znalosti... mohl by se mi na to prosím někdo podívat, tady je program. Velice Vám děkuji, už nevím jak dál.
Kód: Vybrat vše
#define Potak 1 // Nastaveni teploty potenciometrem
float NastTep; // Nastavena teplota
#define pinOUT 6 // buzení tranzistoru pro výkonové relé
#define pinLED 13 // led svítí při sepnutém relé
#include <TM1637Display.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Module connection pins (Digital Pins)
#define CLK 4
#define DIO 3
#define ONE_WIRE_BUS 2
const uint8_t SEG_ERR[] = {
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G, // E
SEG_E | SEG_G, // r
SEG_E | SEG_G, // r
0, // space
};
TM1637Display display(CLK, DIO);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
pinMode(pinOUT, OUTPUT); //výstup
pinMode(pinLED, OUTPUT); //výstup
Serial.begin(9600);
display.setBrightness(15);
sensors.begin();
if (sensors.getDS18Count() == 0)
display.setSegments(SEG_ERR);
else
sensors.setResolution(12);
}
void loop() {
NastTep = analogRead(Potak);
NastTep = NastTep * 20 / 205 ; // Přepočet na 0-100°C
if (sensors.getDS18Count() != 0) {
sensors.requestTemperatures();
double temp = sensors.getTempCByIndex(0);
display.showNumberDecEx(temp * 100, 0b01000000, false);
delay(20);
}
temp = 25; // vlevo
NastTep = 48; // vpravo
int zobrazeni = (temp * 100) + NastTep; // = 2548
display.showNumberDec(zobrazeni, true); // zobrazeni cisla s uvodnimi nulami
if(NastTep>temp){
digitalWrite(pinOUT, HIGH);
digitalWrite(pinLED, HIGH);
delay(3000);
Serial.println(NastTep);
}
}
}
Re: Výroba termostatu
Tohle mě napsala AI, je to funkční termostat, ale skutečná a zvolená teplota se na displeji neustále přepínají, spíše jsem chtěl aby se tam zobrazily obě teploty vedle sebe, první dvě číslovky - skutečná teplota z čidla a druhé dvě číslovky nastavená teplota z potenciometru, jinak je to ale bomba pomocník.
Kód: Vybrat vše
#include <OneWire.h>
#include <DallasTemperature.h>
#include <TM1637Display.h>
// Piny pro teplotní senzor DS18B20 a potenciometr
#define ONE_WIRE_BUS 2
#define POTENTIOMETER_PIN A0
// Piny pro TM1637 displej
#define CLK_PIN 3
#define DIO_PIN 4
// Objekty pro teplotní senzor, TM1637 displej a potenciometr
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
TM1637Display display(CLK_PIN, DIO_PIN);
int potValue = 0;
int setTemperature = 0;
void setup() {
sensors.begin();
display.setBrightness(0x0a); // Nastaví jas displeje (0x00 - 0x0f)
}
void loop() {
// Načtení hodnoty teploty z DS18B20
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
// Načtení hodnoty nastavené teploty z potenciometru
potValue = analogRead(POTENTIOMETER_PIN);
setTemperature = map(potValue, 0, 1023, 0, 100);
// Zobrazení skutečné a nastavené teploty na displeji
display.showNumberDec(temperature, false);
delay(1000); // Zpoždění pro čitelnost
display.showNumberDec(setTemperature, false);
delay(1000); // Zpoždění pro čitelnost
}
Re: Výroba termostatu
Já píše: // Zobrazení skutečné a nastavené teploty na displeji
display.showNumberDec(temperature, false);
delay(1000); // Zpoždění pro čitelnost
display.showNumberDec(setTemperature, false);
delay(1000); // Zpoždění pro čitelnost
Tento kod přepíná dvě obrazovky displeje a na jedné ukazuje hodnotu temperature a na druhé hodnotu setTemperature, chtěl bych přepsat ten kód tak, aby byla jen jedna obrazovka co se nebude přepínat a na ní zobrazené obě hodnoty
Jo jo je s tím legraceChatGPT píše: Pro zobrazení obou hodnot teplot na jedné obrazovce můžete použít například funkci display.showString a spojit obě hodnoty do jednoho řetězce. Zde je příklad kódu pro Arduino, který můžete použít:V tomto příkladu String(temperature) a String(setTemperature) převede hodnoty teplot na řetězce a pak jsou spojeny do jednoho řetězce displayText. Funkce display.showString pak zobrazí tento řetězec na displeji. Přidejte vhodné zpoždění (v tomto případě 2000 ms) pro čitelnost.Kód: Vybrat vše
// Zobrazení skutečné a nastavené teploty na displeji String displayText = String(temperature) + " / " + String(setTemperature); display.showString(displayText.c_str()); delay(2000); // Zpoždění pro čitelnost
Můžete také přidat další formátování, podle potřeby.

Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů