Arduino schéma - arduino.sk

Ovládanie čerpadla UK.

Vaše nápady a pomoc s Vašimi projektami
Príspevky: 37
Registrovaný: Pon 15. Sep 2014 13:29:24

Ovládanie čerpadla UK.

Poslaťod JK_Soft » Pon 15. Sep 2014 14:06:38

Dobrý deň. Som úplný začiatočník v programovaní. Kúpil som si arduino UNO, lcd 16*2 a relé. S elektrotechnikou mám skúsenosti a v zapojeniach nemám problém. Vytvoril som si program teda lepšie povedané poskladal z toho čo som našiel na webe. Dokonca aj pracuje tak ako som očakával. Snímam teplotu čidlom DS18B20. Keď teplota dosiahne určitú hodnotu T High tak zopne výstup pin 13.
Ak teplota klesne pod t Low tak pin 13 vypne. Na pinoch 9-12 mám zapojené tlačítka.
A tu by som vás chcel poprosiť o pomoc. Ako mám napísať program aby som mohol pomocou tých tlačidiel meniť žiadané hodnoty "T High" a "T Low" a zobrazenie na display.
V prvom riadku SET: T Low /nastaviteľná hodnota 0-100/ T High /nastaviteľná hodnota 0-100/

Prikladám aj svoj výtvor.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 8

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

int piezo = 9; //alarm piezo

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);


DeviceAddress PAa= { 0x28, 0x04, 0xA7, 0xD9, 0x05, 0x00, 0x00, 0x07 };

float PA;

void setup(){

pinMode(13, OUTPUT);

lcd.begin(16, 2);
// Start up the library
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(PAa, 10);


}


void loop()
{
PA = sensors.getTempC(PAa);
sensors.requestTemperatures();
lcd.setCursor(0 ,0);
lcd.print ("JK_Soft");
lcd.setCursor(0 ,1);
lcd.print("Teplota = ");
lcd.print(PA,1); //(PA,1) jedno desatinne miesto
delay(1000);
if (PA > 26) digitalWrite(13, HIGH); // podmienka T High zapni led
if (PA > 25) tone(piezo, 500, 1000); //pípání
if (PA < 25) digitalWrite(13, LOW); //podmienka T Low vypni led
}

Obrázok užívateľa
Príspevky: 311
Registrovaný: Pon 19. Nov 2012 12:01:08
Bydlisko: HC/BA

Re: Ovládanie čerpadla UK.

Poslaťod tomXX » Uto 16. Sep 2014 10:36:37

Ahoj,

nebudem Ti tu pisat cely kod, dam nejake tipy a podla nich to hadam zvladnes a nieco sa aj naucis.

1) zbav sa funkcie delay - pouzi millis - lebo ak sa prave vykonava delay, tak nevies citat stav tlacidiel

setup(){
long t1 = millis();
}
if (millis() - t1 > 1000){ .... t1 = millis();}

2) T_low a T_High si daj do premennych, nemaj ich priamo zadane v podmienke

byte tlow, thigh;

3) ja by som asi tieto limity (tlow, thigh) ukladal do EEPROM, aby po vypnuti/zapnuti zostali nastavene.

#include <EEPROMEx.h>

setup(){
tlow = EEPROM.read(0);
thigh = EEPROM.read(1);
}

...nasledne pri nastavovani ulozit:

if (...){
tlow++;
EEPROM.updateByte(0, tlow);
}

4) na tlacitka by som pouzil kniznicu Button - http://playground.arduino.cc/Code/Button

----------

Take v hlavnej slucke citat stav tlacitok, ak je stlacene, zistit ci je v limitoch (0 - 100), ak ano, tak upravit limit a zapisat do EEPROM, pomocou millis() kazdu sekundu vypisat teplotu a ak je mimo limit, ovladat rele. Na dispeji si mozes nechat zobrazovat aj tlow a thigh... asi tak v skratke.
blog.sitepoint.sk - zaujímavé riešenia okolo Arduina

Príspevky: 37
Registrovaný: Pon 15. Sep 2014 13:29:24

Re: Ovládanie čerpadla UK.

Poslaťod JK_Soft » Sob 27. Sep 2014 15:43:19

tomXX veľmi pekne ďakujem. Podarilo sa mi to dať dokopy, nie je to asi tak ako by to malo byť ale funguje spoľahlivo. Funkciu millis som nepoužil ešte stále ju nemôžem presne pochopiť. Využívam DELAY na to aby som určil rýchlosť ako mi pripočítava hodnotu keď držím tlačítko. Ukladanie do pamäte som ešte nepoužil nebolo to potrebné ale riešil by som to asi ďalším tlačítkom pre uloženie.
Takto sa mi to podarilo.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 8

// this constant won't change:
const int butonHH = 12;
const int buttonHL =11;
const int buttonLH =10;
const int buttonLL =9;
// Variables will change:
int hygh = 40;
int buttonStateHH = 0;
int lastButtonStateHH = 0;

// tlacitko HL
int buttonStateHL = 0;
int lastButtonStateHL = 0;

// tlacitko LH
int low = 28; // counter for the number of button presses
int buttonStateLH = 0; // current state of the button
int lastButtonStateLH = 0; // previous state of the button

// tlacitko LL
int buttonStateLL = 0; // current state of the button
int lastButtonStateLL = 0; // previous state of the button

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

//int piezo = 9; //alarm piezo

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);


DeviceAddress PAa= { 0x28, 0x04, 0xA7, 0xD9, 0x05, 0x00, 0x00, 0x07 };


float PA;


void setup(){
// initialize the button pin as a input:
pinMode(butonHH, INPUT);
pinMode(buttonHL, INPUT);
pinMode(buttonLH, INPUT);
pinMode(buttonLL, INPUT);

// initialize the LED as an output:
pinMode(13, OUTPUT);

lcd.begin(16, 2);
// Start up the library
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(PAa, 10);



}


void loop()
{

PA = sensors.getTempC(PAa);
sensors.requestTemperatures();

// read the pushbutton input pin:
buttonStateHH = digitalRead(butonHH);
buttonStateHL = digitalRead(buttonHL);
// compare the buttonState to its previous state
if (buttonStateHH != lastButtonStateHH) {
// if the state has changed, increment the counter
if (buttonStateHH == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
hygh++; }
}
// compare the buttonState to its previous state
if (buttonStateHL != lastButtonStateHL) {
// if the state has changed, increment the counter
if (buttonStateHL == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
hygh--;}
}
// funkcia LOW
buttonStateLH = digitalRead(buttonLH);
buttonStateLL = digitalRead(buttonLL);
// compare the buttonState to its previous state
if (buttonStateLH != lastButtonStateLH) {
// if the state has changed, increment the counter
if (buttonStateLH == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
low++; }
}
// compare the buttonState to its previous state
if (buttonStateLL != lastButtonStateLL) {
// if the state has changed, increment the counter
if (buttonStateLL == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
low --;}
}

lcd.setCursor(0 ,0);
lcd.print ("JK_Soft");
//lcd.print(BA);
lcd.setCursor(0 ,1);
lcd.print("Teplota = ");
lcd.print(PA,1); //(PA,1) jedno desatinne miesto
lcd.print((char)223);
if (PA > hygh) digitalWrite(13, HIGH); // podmienka T High zapni led
//if (PA > 60) tone(piezo, 500, 1000); //pípání
if (PA < low) digitalWrite(13, LOW); //podmienka T Low vypni led
lcd.setCursor(9,0);
lcd.print("L");
lcd.print(low);
lcd.setCursor(13,0);
lcd.print("H");
lcd.print(hygh);
delay(200);
}

Späť na Projekty vo fáze vývoja