Stránka 1 z 1

Výroba termostatu

Napsal: 30 pro 2023, 20:23
od Venda
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.
z27-kpz-11.jpg
z27-kpz-11.jpg

Re: Výroba termostatu

Napsal: 31 pro 2023, 08:43
od kiRRow
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

Napsal: 31 pro 2023, 16:24
od Venda
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

Napsal: 31 pro 2023, 18:32
od AstroMiK
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 )

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

Napsal: 02 led 2024, 18:19
od Venda
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:
Termostat.ino
(915 bajtů) Staženo 40 x

Re: Výroba termostatu

Napsal: 15 led 2024, 17:39
od Venda
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

Napsal: 15 led 2024, 19:42
od Venda
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

Napsal: 17 led 2024, 16:01
od kiRRow
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
ChatGPT 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:

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
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.

Můžete také přidat další formátování, podle potřeby.
Jo jo je s tím legrace :-)