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.
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);
}
}