Prosim o pomoc s termostatom
Úvodní stránka › Fórum › Vaše projekty › Arduino › Prosim o pomoc s termostatom
- Toto téma obsahuje celkem 3 odpovědi. Do diskuze (2 diskutující) se naposledy zapojil uživatel dudo a poslední změna proběhla před 8 roky a 3 měsíci.
-
AutorPříspěvky
-
8.8.2016 v 12:13 #7872dudoÚčastník
Ahojte, prosim o pomoc s termostatom. Nasiel som na nete jeden program, ktory sa mi aj po mensich upravach podarilo rozbehat. Potreboval by som pomoct s upravou programu (kedze moje programatorske vedomosti koncia niekde pri pascale repeat until keypressed) 😀 😀 Tu je program:
#include <Wire.h> #include <OneButton.h> #include <OneWire.h> #include <DallasTemperature.h> #include <LCD.h> #include <LiquidCrystal_I2C.h> // F Malpartida's NewLiquidCrystal library LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address #define I2C_ADDR 0x3F // Define I2C Address where the PCF8574A is // States #define S_Monitor 0 #define S_Sleep 1 #define S_SetTemp 2 int state = S_Sleep; // Initial state // DS18B20 setup #define TempSensor 10 // PIN one wire device (temps sensor) is plugged into OneWire oneWire(TempSensor); // Pass the OneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); // OneButton setup OneButton button(7, true); // Tell the OneButton library what PIN the button is on // Initialize the LCD library with the numbers of the interface pins // Other PINs int FridgeRly = 8; // Vars unsigned long Sleep = 0; unsigned long SleepLength = 600000; // Dlzka spanku. float SetTemp = 5.00; // Zakladna teplota float TempC = 0; float TempF = 0; bool CoolRun = false; bool Boot = true; void setup() { lcd.begin(16, 4); // Set up the LCD's number of rows and columns sensors.begin(); // Start the DallasTemperature library // PIN Modes pinMode(FridgeRly, OUTPUT); //Serial.begin(9600); // For testing comment out in production } void loop() { switch(state) { case S_Monitor: F_Monitor(); break; case S_Sleep: F_Sleep(); break; case S_SetTemp: F_SetTemp(); break; } } // Functions void F_Monitor() { button.attachPress(F_ButtonPress); button.tick(); if (TempC <= SetTemp) { lcd.setCursor(0, 1); lcd.print("Sledujem... "); } F_GetTemp(); F_ShowTemp(); if (TempC > SetTemp) { digitalWrite(FridgeRly, HIGH); // Turn on the compressor lcd.setCursor(0, 1); lcd.print("Chladim na: "); // "Coolng" is not a spelling error, not enough room on the screen for the "i" lcd.print(SetTemp); CoolRun = true; } if (CoolRun == true && TempC <= SetTemp) { Sleep = millis(); state = S_Sleep; } } void F_Sleep() { button.attachPress(F_ButtonPress); button.tick(); digitalWrite(FridgeRly, LOW); // Shut off the compressor lcd.setCursor(0, 1); lcd.print("Spim... "); F_GetTemp(); F_ShowTemp(); if (millis() - Sleep > SleepLength) { CoolRun = false; state = S_Monitor; } } void F_SetTemp() { button.attachClick(F_Increse); button.attachPress(F_ButtonPress2); button.tick(); lcd.setCursor(0, 0); lcd.print("Nastav na: "); lcd.print(SetTemp); lcd.setCursor(0, 1); lcd.print("Podrz pre koniec"); } void F_Increse() { SetTemp = SetTemp + 1.00; if (SetTemp > 8.00) { SetTemp = 2.00; } } void F_ButtonPress() { state = S_SetTemp; } void F_ButtonPress2() { state = S_Monitor; } void F_GetTemp() { sensors.requestTemperatures(); // Tell the sensor to record the temp to its memory TempC = sensors.getTempCByIndex(0); // Retrieve the temp from the sensor's memory and store it in a local var TempF = (TempC * 9.0)/ 5.0 + 32.0; // Convert to fahrenheit } void F_ShowTemp() { lcd.setCursor(0, 0); lcd.print("Teplota: "); lcd.print(TempC); lcd.print("C "); //Serial.print(TempF); Serial.println(" degrees F"); // For testing comment out in production }
A teraz pozoor 😀 😀 – potreboval by som tam este druhy teplotny senzor (aby zobrazoval teplotu v mraziaku – len zobrazoval – riadit sa bude len podla teploty v chladnicke) Miesto jedneho tlacidla by som potreboval 3 (+,- a setup) V setup-e by bolo fajn, keby sa da nastavit teplota pri ktorej sa kompresor zapne (povedzme 5°+x => 5° je nastavena a zapne sa, ked dosiahne 5+x…tak isto aj vypnutie 5°-y. Lepsie povedane mam nastavenu teplotu 5° chcem aby sa kompresor zapol pri 6° a vypol pri 4° (5+1, 5-1). Cas spanku (resp. minimalny cas medzi vypnutim a zapnutim) by sa dal nastavit v rozmedzi od 10 min. do 30 min. Display je 16×4. Samozrejme pridavam fritzing schemu pre lepsie pochopenie.
A posledna vec Ako sa da pouzit tento senzorhttp://www.aliexpress.com/item/5a-range-of-single-phase-ac-current-sensor-module-for-arduino-free-shipping-N25/32317969101.html?spm=2114.13010608.0.98.rGqZXl
aby mi to zobrazovalo spotrebu za 48hod?Attachments:
16.8.2016 v 10:01 #7929posjirkaÚčastníkto není drobná úprava, ale napsat nový program.
1, pokud chceš MENU, je třeba si zvolit jaké parametry a v jakých hodnotách to budeš ovládat. Proto pak existují knihovny, které to řeší, Případně si musíš napsat menu sám. Pak se to objevuje otázka zda ukládat hodnoty, kam je ukládat a kdy. Pamatuj, že EEPROm mám max 100 000 zápisu, což vypadá usměvně, ale při ukládání každou 1s je to něco přes 1 den, než zničích EEPROM….2, někdy je lepší použít potenciometr/trimr na analogovém vstupu spíš, než složitě řešit menu. Stejně to budeš nastavovat 5x za život, tak proč ztrácet čas.
Dokonce můžeš nastavit i třeba 2 parametry přes 1 AI. Inspirovat se můžeš když si najdeš one wire keypad a místo tlačítka dáš piny + jumper.3, přidat další senzor, není problém spíš si třeba v excelu zkus navrhnout jak by to mělo vypadat na LCD. Zapomeň, že bys kombinoval 2 znaky na 1 pozici a máš max. 16 vlastních znaků. Mezi nimi bude „stupeň“. Nakresli si nominální stav a pak 2-3 mezní stavy aby se ti to tam vešlo.
4, Tlačítko bych dal pouze 1 na přepnutí zobrazení (stiskneš tlačítko a na LCD se ti objeví hodnoty které nastavuješ. Pustíš tlačítko a budeš mít normální zobrazení LCd. …
22.8.2016 v 11:39 #8079dudoÚčastníkDakujem za odpoved. Toto je prva verzia (bez zmeny programu). Termostat funguje perfektne. Este sa opytam, ze ako tam doplnim dalsie cidlo?
P.S. Toto je moj prvy projekt s mikrokontrolerom = uplny amater 🙂Attachments:
22.8.2016 v 11:53 #8082dudoÚčastníkAttachments:
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.