Výměna vody v akvárium
Napsal: 27 úno 2019, 10:26
Zdravím všechny,
pustil jsem se do projektu automatické výměny vody v akváriu (předem říkám, že jsem začátečník
, tak mě omluvte jestli kód bude nepřehledný). Zatím to mám vymyšleno tak, že se v určitém čase spustí čerpadlo vypouštění. Hladinu "hlídá" senzor HC-SR05. Až se vypustí určité množství (podle výšky hladiny, denně cca. 10 litrů), čerpadlo se zastaví a sepne se čerpadlo napouštění. Až dosáhne určité výšky, tak se čerpadlo vypne. Tady mám problém - sériová linka se kousne a přestane vypisovat.
Používám Mega 2560 R3 (z Aliexpressu)
4x relé modul
RTC DS3231
Potřeboval bych "nakopnout", kde dělám chybu nebo jak by se to dalo udělat lépe. Zatím zkouším pokus/omyl.
pustil jsem se do projektu automatické výměny vody v akváriu (předem říkám, že jsem začátečník

Používám Mega 2560 R3 (z Aliexpressu)
4x relé modul
RTC DS3231
Potřeboval bych "nakopnout", kde dělám chybu nebo jak by se to dalo udělat lépe. Zatím zkouším pokus/omyl.
Kód: Vybrat vše
#include <SPI.h>
#include <Wire.h>
#include <DS3231.h>
#define DS3231_I2C_ADDRESS 0x68
// inicializace RTC z knihovny
DS3231 rtc;
// vytvoření proměnné pro práci s časem
RTCDateTime datumCas;
// Arduino Měřič vzdálenosti ultrazvukový
// piny pro připojení Trig a Echo z modulu
int pTrig = A0;
int pEcho = A1;
// inicializace proměnných, do kterých se uloží data
long odezva, vzdalenost;
void setup() {
// komunikace přes sériovou linku rychlostí 9600 baud
Serial.begin(9600);
Wire.begin();
// nastavení pinů modulu jako výstup a vstup
pinMode(pTrig, OUTPUT);
pinMode(pEcho, INPUT);
// zahájení komunikace s RTC obvodem
rtc.begin();
// nastavení času v RTC podle času kompilace programu,
// stačí nahrát jednou
rtc.setDateTime(__DATE__, __TIME__);
// přímé nastavení času pro RTC
//rtc.setDateTime(__DATE__, "12:34:56");
pinMode(8, OUTPUT); // pin pro čerpadlo vypouštění
pinMode(9, OUTPUT); // pin pro čerpadlo napouštění
}
void loop()
{
Serial.begin(9600);
digitalWrite(pTrig, LOW);
delayMicroseconds(2);
digitalWrite(pTrig, HIGH);
delayMicroseconds(5);
digitalWrite(pTrig, LOW);
odezva = pulseIn(pEcho, HIGH);
// přepočet času na vzdálenost v cm
vzdalenost = odezva / 58.31;
int sensorValue = analogRead(A4); //senzor pro alarm přetečení nádrže
delay(200);
// načtení času z RTC do proměnné
datumCas = rtc.getDateTime();
// postupný tisk informací po sériové lince
Serial.print("Datum a cas: ");
Serial.print(datumCas.hour); Serial.print(":");
Serial.print(datumCas.minute); Serial.print(":");
delay(500);
Serial.print("Vzdalenost je ");
Serial.print(vzdalenost);
Serial.println(" cm.");
delay(500);
Serial.println(sensorValue);
delay(500);
if (datumCas.hour == 21 && datumCas.minute == 40 ){
//Pokud je vše splněno, tak se začne vypouštět
digitalWrite(8, HIGH); // Vypouštění vody z akva (motor)
digitalWrite(9, LOW);
delay(300); //
}
if (vzdalenost>=4){
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
delay(400);
}
if (vzdalenost<=2){
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(2000);
}
}