• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterownik do akwarium
#1
Witam.

Na samym początku zaznaczę, że jestem totalnym amatorem. Wink

Zrobiłem mały układ który docelowo ma od godziny 11:00 do 19:00 załączać światło w moich trzech akwariach i w każdym z osobna ma mierzyć temperaturę (termometry to DS18b20 z przewodami) oraz załączać chłodzenie latem oraz wyświetlać podstawowe dane na wyświetlaczu.

Generalnie coś tam działa, ale nie do końca tak jak powinno.

Problemy jakie napotkałem to:

- przy załączaniu się przekaźników przygasa wyświetlacz,
- przy jednym z termometrów skok temperatury to 0,25 stopnia, dwa pozostałe podają temperaturę w setnych stopnia, czym to może być spowodowane? Rezystory mam tak jak na schemacie 4,7 Ohma, zamieniałem je, może coś z termometrem jest nie tak?
- zegar ( DS3231 ) na wyświetlaczu odlicza co dwie sekundy ( pewnie wina kodu mam fragmenty w nim z odniesieniem do ds1307 ).


Prośba moja o rady i może uproszczenie jakoś kodu.

Planuje w przyszłości wykorzystać pin 11 który odpowiada za włączenie oświetlenia do uzyskania efektu świtu i zmierzchu, tylko nie wiem jak się za to zabrać, tzn diodą sterować pwm potrafię, ale jak zadziałać na oświetlenie pod 230V, co dodatkowo jest potrzebne?

Poniżej schemat i kod.

Pozdrawiam.

[Obrazek: twsafsjhuiefypikgwpvdftlgrcmthnilpssuekq...vwmxivsnqg]


Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
#define DS1307_ADDRESS 0x68
#define RELAY_ON 0 // 0 means active low relay
#define RELAY_OFF 1
#define Relay_1  11  // Arduino Digital I/O pin number
OneWire ds_1(A0);  //sensor 1 on pin 11
OneWire ds_2(A1);  //sensor 2 on pin 12
OneWire ds_3(A2);  //sensor 3 on pin 13
DallasTemperature sensor_1(&ds_1);
DallasTemperature sensor_2(&ds_2);
DallasTemperature sensor_3(&ds_3);
int nastaw = 26; // ustaw temperature
int przekaznik8 = 8; // pin przekaznik
int przekaznik9 = 9; // pin przekaznik
int przekaznik10 = 10; // pin przekaznik
byte state = LOW;
const char *monthName[12] = {
 //  "Sty", "Lut", "Mar", "Kwi", "Maj", "Cze",
 //  "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru"
 "01", "02", "03", "04", "05", "06",
 "07", "08", "09", "10", "11", "12"
};
LiquidCrystal_I2C  lcd(0x27, 2, 1, 0, 4, 5, 6, 7);

float temp_1; //HLT
float temp_2; //Mash
float temp_3; //Boil


void setup() {
 Wire.begin();
 digitalWrite(Relay_1, RELAY_OFF);
 pinMode(Relay_1, OUTPUT);
 pinMode(przekaznik8, OUTPUT);
 pinMode(przekaznik9, OUTPUT);
 pinMode(przekaznik10, OUTPUT);
 lcd.begin(20, 4);
 lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
 lcd.setBacklight(HIGH);
 sensor_1.begin(); //initialize sensors
 sensor_2.begin();
 sensor_3.begin();
 Serial.begin(9600);
}

void loop() {
 printDate();
}
byte bcdToDec(byte val)  {
 return ( (val / 16 * 10) + (val % 16) );
}




void printDate() {
 Wire.beginTransmission(DS1307_ADDRESS);
 byte zero = 0x00;
 Wire.write(zero);
 Wire.endTransmission();
 Wire.requestFrom(DS1307_ADDRESS, 7);
 int second = bcdToDec(Wire.read());
 int minute = bcdToDec(Wire.read());
 int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
 int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
 int monthDay = bcdToDec(Wire.read());
 int month = bcdToDec(Wire.read());
 int year = bcdToDec(Wire.read());

 if ((hour == 11 ) && (minute == 00))
   digitalWrite(Relay_1, RELAY_ON);// set the Relay ON
 if ((hour == 19) && (minute == 00))
   digitalWrite(Relay_1, RELAY_OFF);// set the Relay OFF


 sensor_1.requestTemperatures();
 lcd.setCursor(0, 1);
 lcd.print("Temp1: ");
 lcd.print(sensor_1.getTempCByIndex(0));
 lcd.print(" N:");
 lcd.print(nastaw);
 if (temp_1 < (nastaw)) {
   digitalWrite(8, HIGH);
   int val = digitalRead(8);
   if (val)
     lcd.setCursor(19, 1);
   lcd.print("0");
 } else {
   lcd.setCursor(19, 1);
   lcd.print("1");
   digitalWrite(8, LOW);
 }
 sensor_2.requestTemperatures();
 lcd.setCursor(0, 2);
 lcd.print("Temp2: ");
 lcd.print(sensor_2.getTempCByIndex(0));
 lcd.print(" N:");
 lcd.print(nastaw);
 if (temp_2 < (nastaw)) {
   digitalWrite(9, HIGH);
   int val = digitalRead(9);
   if (val)
     lcd.setCursor(19, 2);
   lcd.print("0");
 } else {
   lcd.setCursor(19, 2);
   lcd.print("1");
   digitalWrite(9, LOW);
 }
 sensor_3.requestTemperatures();
 lcd.setCursor(0, 3);
 lcd.print("Temp3: ");
 lcd.print(sensor_3.getTempCByIndex(0));
 lcd.print(" N:");
 lcd.print(nastaw);
 if (temp_3 < (nastaw)) {
   digitalWrite(10, HIGH);
   int val = digitalRead(10);
   if (val)
     lcd.setCursor(19, 3);
   lcd.print("0");
 } else {
   lcd.setCursor(19, 3);
   lcd.print("1");
   digitalWrite(10, LOW);

 }


 tmElements_t tm;

 if (RTC.read(tm)) {
   lcd.setCursor (0, 0);
   LCDprint2digits(tm.Hour);
   lcd.print(':');
   LCDprint2digits(tm.Minute);
   lcd.print(':');
   LCDprint2digits(tm.Second);
   lcd.setCursor (9, 0);
   lcd.print(tm.Day);
   lcd.print('/');
   lcd.print(monthName[tm.Month - 1]);
   lcd.print('/');
   lcd.print(tmYearToCalendar(tm.Year - 2000));


 } else {
   if (RTC.chipPresent()) {
     lcd.println("DS1307 stoi. Uruchom Zegar");
   }
   else {
     lcd.println("DS1307 blad oczczytu!");
     lcd.println("sprawdz polaczenie");
   }
 }
}
void LCDprint2digits(int number) {
 if (number >= 0 && number < 10) {
   lcd.write('0');
 }
 lcd.print(number);
}
 
Odpowiedź
  


Wiadomości w tym wątku
Sterownik do akwarium - przez Lobaf - 26-12-2015, 18:59
RE: Sterownik do akwarium - przez adix - 26-12-2015, 21:58
RE: Sterownik do akwarium - przez Lobaf - 26-12-2015, 22:41
RE: Sterownik do akwarium - przez adix - 26-12-2015, 23:06
RE: Sterownik do akwarium - przez Lobaf - 26-12-2015, 23:14
RE: Sterownik do akwarium - przez adix - 26-12-2015, 23:30
RE: Sterownik do akwarium - przez Lobaf - 26-12-2015, 23:38
RE: Sterownik do akwarium - przez adix - 26-12-2015, 23:44
RE: Sterownik do akwarium - przez Lobaf - 27-12-2015, 00:00
RE: Sterownik do akwarium - przez adix - 27-12-2015, 00:15
RE: Sterownik do akwarium - przez Lobaf - 27-12-2015, 00:32
RE: Sterownik do akwarium - przez adix - 27-12-2015, 00:37
RE: Sterownik do akwarium - przez Lobaf - 27-12-2015, 00:45
RE: Sterownik do akwarium - przez adix - 27-12-2015, 00:56
RE: Sterownik do akwarium - przez Lobaf - 27-12-2015, 01:11
RE: Sterownik do akwarium - przez adix - 27-12-2015, 22:21
RE: Sterownik do akwarium - przez Lobaf - 28-01-2016, 21:31
RE: Sterownik do akwarium - przez wojtekizk - 29-01-2016, 08:48
RE: Sterownik do akwarium - przez Lobaf - 30-01-2016, 23:46
RE: Sterownik do akwarium - przez Lobaf - 11-02-2016, 05:37
RE: Sterownik do akwarium - przez wojtekizk - 11-02-2016, 13:01
RE: Sterownik do akwarium - przez Lobaf - 11-02-2016, 16:13
RE: Sterownik do akwarium - przez wojtekizk - 11-02-2016, 19:50
RE: Sterownik do akwarium - przez Lobaf - 11-02-2016, 21:29
RE: Sterownik do akwarium - przez wojtekizk - 11-02-2016, 21:45
RE: Sterownik do akwarium - przez Lobaf - 12-02-2016, 17:22

Skocz do:


Przeglądający: 1 gości