Arduino - światło, uzupełnianie wody, chłodzenie

Zrób to sam...

Moderator: =Fresz=

Arduino - światło, uzupełnianie wody, chłodzenie

Postprzez Valdi73 » So 02 lip, 2016 09:50

Hej,
ponieważ urlop coraz bliżej a temperatury w mieszkaniu 26+ to stwierdziłem że nie można zostawić akwarium samemu sobie.
Oczywiście wszystko można oprzeć na gotowcach ale od czego mamy arduino za grosze :)
Całość projektu opiera się na częściach:
arduino - dowolny model (ok 15 pln)
zasilacz 12 V 3-5 A (ok 15 pln)
2 szt. podwójnych przekaźników 12V (15 pln szt.)
Jakaś pompka do wody na 12V (20-40 pln)
2 szt. Czujniki pływakowe (u nas ok 12 pln szt. w chinach poniżej $)
cyfrowy czujnik temperatury (u nas ok 10 pln w chinach poniżej $)
moduł czasu z podtrzymaniem ( u nas ok 12 pln w chinach poniżej $)

teraz tak jeżeli chcemy tylko dolewkę części będzie zależeć tylko na tym to potrzebujemy:
arduino
zasilacz
przekaźnik
pompkę wody
czujniki pływakowe
dwa oporniki i dwa kondensatory
Jak to wtedy nam zadziała:
Arduino sprawdza poziom wody na dwóch czujnikach.
Dla czego dwóch bo jeden może się zepsuć a dodatkowo mamy zabezpieczenie przed zalaniem.
Kiedy mamy za niski poziom to załącza pompkę na minutę i uzupełnia wodę.
Zamiast pompki można zastosować elektrozawór na 12V (u mnie jest i to i to) wtedy działa to grawitacyjnie
Do czego nam są potrzebne kondensator i opornik (wartości podam jak ktoś będzie chętny do budowy i nie będzie wiedział jakie dobrać)
do tego że przy "włączeniu" pływaków występuje falowanie załączników czyli wyglada to tak jak by kilka razy ktoś załączył przycisk.
Minus takiego rozwiązania to że uzupełnianie będzie nam się załączało o dowolnej porze dnia i nocy.
Ale za to mamy uzupełnianie wody kosztem za ok 60 pln.

A teraz wersja jaka działa u mnie czyli woda/światło/temperatura.
potrzebujemy to co na początku
Cały projekt działa tak:
- światło załącza się w określonych godzinach 13:30 - 19:30
- uzupełnianie wody jest w godzinach 9-22
- całą dobę jest sprawdzana temperatura zakres włączania 24,6 stopnia, wyłączania 24 stopnie.

Z zasilacza podajemy napięcie na arduino i przekaźniki 12V, w tej chwili arduino zasila też dwa przekaźniki 5V ale docelowo wszystkie będą na 12V.
Do adrduino podłączamy moduł czasu i czujnik temperatury cyfrowy.
Z arduino wyprowadzamy sterowanie na przekaźniki do światła, wody i wentylatorów.
filmik na youtube narazie pokazuje rozwiązanie testowe więc plątanina kabli (działa)
https://youtu.be/p7M9vHNHM3k
Docelowo będzie wyświetlacz i opakowanie i poukładane kabelki.
Jeżeli ktoś będzie chciał rozrysowany schemat z elementami to go dorysuję.
Kod jest banalnie prosty do napisania jedynie trzeba pobrać biblioteki te co są poniżej.

#include <OneWire.h> // biblioteki do pobrania
#include <DS3231.h>
#include <Wire.h>
#include <Time.h>
#include <DallasTemperature.h>

DS3231 clock;
RTCDateTime dt;
const int oswietlenie = 7;
const int przy1 = 8;
const int dioda1 = 9;
const int przy2 = 10;
const int dioda2 = 11;
//int buttonState = 0;
int startHour = 9;
int startMinute = 00;
int stopHour = 22;
int stopMinute = 00;

int startHour1 = 13;
int startMinute1 = 30;
int stopHour1 = 19;
int stopMinute1 = 30;

int przekaznik1 = 3; //temperatura
int one_wire = 2;
OneWire oneWire(one_wire); //wywołujemy transmisję 1-Wire na pinie 10
DallasTemperature sensors(&oneWire); //informujemy Arduino, ze przy pomocy 1-Wire


void setup()
{
pinMode(oswietlenie, OUTPUT);
pinMode(dioda1, OUTPUT);
pinMode(dioda2, OUTPUT);
pinMode(przekaznik1, OUTPUT);
pinMode(przy2, INPUT);
pinMode(przy1, INPUT);
//pinMode(one_wire, INPUT_PULLUP);

sensors.begin(); //rozpocznij odczyt z czujnika

digitalWrite(przekaznik1, HIGH);
digitalWrite(oswietlenie, HIGH);
digitalWrite(dioda1, HIGH);
digitalWrite(dioda2, HIGH);
digitalWrite(przy1, LOW);
digitalWrite(przy2, LOW);

Serial.begin(9600);
// Inicjalizacja DS3231
Serial.println("Initialize DS3231");;
clock.begin();

// Ustawiany date i godzine kompilacji szkicu
//clock.setDateTime(__DATE__, __TIME__);
//clock.setDateTime(2016, 06, 20, 22, 45, 00);
}

void loop()
{
sensors.requestTemperatures(); //odczyt temperatury
//start oswietlenie
dt = clock.getDateTime();
if (( dt.hour > startHour1 || (dt.hour == startHour1 && dt.minute >= startMinute1)) && (dt.hour < stopHour1 || (dt.hour == stopHour1 && dt.minute < stopMinute1)))
{
digitalWrite(oswietlenie, HIGH);
/*Serial.print("oswietlenie wlaczone: ");
Serial.print(dt.year); Serial.print("-");
Serial.print(dt.month); Serial.print("-");
Serial.print(dt.day); Serial.print(" ");
Serial.print(dt.hour); Serial.print(":");
Serial.print(dt.minute); Serial.print(":");
Serial.print(dt.second); Serial.println(""); */
}

else {
digitalWrite(oswietlenie, LOW);
/*Serial.print("oswietlenie wylaczone: ");
Serial.print(dt.year); Serial.print("-");
Serial.print(dt.month); Serial.print("-");
Serial.print(dt.day); Serial.print(" ");
Serial.print(dt.hour); Serial.print(":");
Serial.print(dt.minute); Serial.print(":");
Serial.print(dt.second); Serial.println(""); */
}
// start dolewanie
if (( dt.hour > startHour || (dt.hour == startHour && dt.minute >= startMinute)) && (dt.hour < stopHour || (dt.hour == stopHour && dt.minute < stopMinute))
&& digitalRead(przy1) == HIGH && digitalRead(przy2) == HIGH )
{
digitalWrite(dioda1, LOW);
digitalWrite(dioda2, LOW);
/*Serial.print("poziom niski: ");
Serial.print(dt.year); Serial.print("-");
Serial.print(dt.month); Serial.print("-");
Serial.print(dt.day); Serial.print(" ");
Serial.print(dt.hour); Serial.print(":");
Serial.print(dt.minute); Serial.print(":");
Serial.print(dt.second); Serial.println(""); */
delay(60000);
}

else {
digitalWrite(dioda1, HIGH);
digitalWrite(dioda2, HIGH);
/*Serial.print("poziom normalny: ");
Serial.print(dt.year); Serial.print("-");
Serial.print(dt.month); Serial.print("-");
Serial.print(dt.day); Serial.print(" ");
Serial.print(dt.hour); Serial.print(":");
Serial.print(dt.minute); Serial.print(":");
Serial.print(dt.second); Serial.println(""); */
}
if (sensors.getTempCByIndex(0) >= 24.6) //jezeli temperatura jest większa bądź równa 24,6 stopni Celsjusza
{
digitalWrite(przekaznik1, HIGH); //włącz przekaźnik1 - wiatrak

/*Serial.println("");
delay(500);
Serial.print("TEMP_Wysoka: ");
Serial.println(sensors.getTempCByIndex(0)); */
}
else if (sensors.getTempCByIndex(0) <= 24.2) //jeżeli temperatura jest mniejsza rowna 24,2 stopni Celsujsza
{

digitalWrite(przekaznik1, LOW); //wyłącz przekaźnik1- wiatrak
/* Serial.println("");
delay(500);
Serial.print("TEMP_Normalna: ");
Serial.println(sensors.getTempCByIndex(0)); */
}
{

delay(1000);
}
}
Valdi73
Krewetkowy Maniak
 
Posty: 45
Dołączył(a): Pn 30 wrz, 2013 09:34

Powrót do PROJEKTY DIY

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 15 gości