Voliere besturing
4 berichten
• Pagina 1 van 1
Voliere besturing
Beste forum leden, sinds kort ben ik ook met Arduino bezig, veel tutorials bekeken en aan de slag gegaan.
Mijn doel is de de hardware matige voliere besturing wat betreft LED verlichting en pomp sturing via een Arduino-One te laten verlopen.
Na vele avonden heb ik met behulp van voorbeelden een werken de sketch weten te schrijven.
De bedoeling is bij en bepaalde waarde van de LDR (bij licht worden) de pomp met een interval ("aantijd en uittijd") aan en uit te laten gaan , via deze LDR wordt ook de trafo voor de LED verlichting geschakeld, via een aan uit timer wordt de dimmer aan of uit gezet.
Alles werkt echter met een probleem, dat bij licht worden de pomp met de "uittijd" start en niet zoals de bedoeling is met de "aantijd" begint.
Pomp blijft dus eerst 30 minuten uit staan.
Ik heb van alles geprobeert maar kom er niet uit, wat doe ik fout, hopelijk kan iemand mij verder helpen, zodat ik weer wat verder kom met programeren.
Hieronder de sketch:
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 RTC;
int waardeLDR;
int pomp = 12;
int trafo = 13;
int dimmer = 2;
int reserve = 4;
int ledState = HIGH;
byte startHour1 = 8;
byte startHour2 =11;
byte startMinute1 = 0;
byte startMinute2 = 0;
byte endHour1 = 19;
byte endHour2 = 11;
byte endMinute1 = 30;
byte endMinute2 = 1;
byte validStart1 = 0;
byte validStart2 = 0;
byte poweredOn1 = 0;
byte poweredOn2 = 0;
byte validEnd1 = 0;
byte validEnd2 = 0;
unsigned long previousMillis = 0;
const long uittijd = (30*60000);
const long aantijd = (30*60000);
void setup () {
pinMode(dimmer, OUTPUT);
pinMode(trafo, OUTPUT);
pinMode(pomp, OUTPUT);
pinMode(reserve, OUTPUT);
digitalWrite(dimmer, HIGH);
digitalWrite(trafo, HIGH);
digitalWrite(pomp, HIGH);
digitalWrite(reserve, LOW);
Serial.begin(9600);
Wire.begin();
RTC.begin();
}
void loop () {
waardeLDR = analogRead(1);
Serial.println(waardeLDR);
digitalWrite(trafo, HIGH);// led trafo uit
if (waardeLDR > 450)
{
//hier stond ( delay(100); )
unsigned long currentMillis = millis();
if (ledState == LOW)
{
if (currentMillis - previousMillis >= aantijd)
{
digitalWrite(pomp, HIGH);// pomp start
ledState = HIGH;
previousMillis = currentMillis;
}
}
else
{
if (currentMillis - previousMillis >= uittijd)
{
digitalWrite(pomp, LOW); // pomp stopt
ledState = LOW;
previousMillis = currentMillis;
}
}
}
if (waardeLDR <400)
{
digitalWrite(pomp, HIGH); // pomp stopt
digitalWrite(trafo, LOW); // led trafo aan
}
DateTime now = RTC.now();
if (now.second() == 0) {
if (poweredOn1 == 0) {
checkStartTime1();
} else {
checkEndTime1();
}
if (poweredOn2 == 0) {
checkStartTime2();
} else {
checkEndTime2();
}
if (validStart1 == 1) {
dimmeraan();
}
if (validStart2 ==1){
reserveaan();
}
if (validEnd1 == 1) {
dimmeruit();
}
if (validEnd2 ==1) {
reserveuit();
}
}
delay(100);
}
byte checkStartTime1() {
DateTime now = RTC.now();
if (now.hour() == startHour1 && now.minute() == startMinute1) {
validStart1 = 1;
poweredOn1 = 1;
} else {
validStart1 = 0;
}
return validStart1;
}
byte checkStartTime2() {
DateTime now = RTC.now();
if (now.hour() == startHour2 && now.minute() == startMinute2) {
validStart2 = 1;
poweredOn2= 1;
} else {
validStart2 = 0;
}
return validStart2;
}
byte checkEndTime1() {
DateTime now = RTC.now();
if (now.hour() == endHour1 && now.minute() == endMinute1) {
validEnd1 = 1;
poweredOn1 = 0;
} else {
validEnd1 = 0;
}
return validEnd1;
}
byte checkEndTime2() {
DateTime now = RTC.now();
if (now.hour() == endHour2 && now.minute() == endMinute2) {
validEnd2 = 1;
poweredOn2 = 0;
} else {
validEnd2 = 0;
}
return validEnd2;
}
void dimmeraan() {
digitalWrite(dimmer, LOW); // leddimmer start
}
void dimmeruit() { //
digitalWrite(dimmer, HIGH); // leddimmer stopt
}
void reserveaan(){
digitalWrite(reserve, HIGH);
}
void reserveuit(){
digitalWrite(reserve, LOW);
}
Mijn doel is de de hardware matige voliere besturing wat betreft LED verlichting en pomp sturing via een Arduino-One te laten verlopen.
Na vele avonden heb ik met behulp van voorbeelden een werken de sketch weten te schrijven.
De bedoeling is bij en bepaalde waarde van de LDR (bij licht worden) de pomp met een interval ("aantijd en uittijd") aan en uit te laten gaan , via deze LDR wordt ook de trafo voor de LED verlichting geschakeld, via een aan uit timer wordt de dimmer aan of uit gezet.
Alles werkt echter met een probleem, dat bij licht worden de pomp met de "uittijd" start en niet zoals de bedoeling is met de "aantijd" begint.
Pomp blijft dus eerst 30 minuten uit staan.
Ik heb van alles geprobeert maar kom er niet uit, wat doe ik fout, hopelijk kan iemand mij verder helpen, zodat ik weer wat verder kom met programeren.
Hieronder de sketch:
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 RTC;
int waardeLDR;
int pomp = 12;
int trafo = 13;
int dimmer = 2;
int reserve = 4;
int ledState = HIGH;
byte startHour1 = 8;
byte startHour2 =11;
byte startMinute1 = 0;
byte startMinute2 = 0;
byte endHour1 = 19;
byte endHour2 = 11;
byte endMinute1 = 30;
byte endMinute2 = 1;
byte validStart1 = 0;
byte validStart2 = 0;
byte poweredOn1 = 0;
byte poweredOn2 = 0;
byte validEnd1 = 0;
byte validEnd2 = 0;
unsigned long previousMillis = 0;
const long uittijd = (30*60000);
const long aantijd = (30*60000);
void setup () {
pinMode(dimmer, OUTPUT);
pinMode(trafo, OUTPUT);
pinMode(pomp, OUTPUT);
pinMode(reserve, OUTPUT);
digitalWrite(dimmer, HIGH);
digitalWrite(trafo, HIGH);
digitalWrite(pomp, HIGH);
digitalWrite(reserve, LOW);
Serial.begin(9600);
Wire.begin();
RTC.begin();
}
void loop () {
waardeLDR = analogRead(1);
Serial.println(waardeLDR);
digitalWrite(trafo, HIGH);// led trafo uit
if (waardeLDR > 450)
{
//hier stond ( delay(100); )
unsigned long currentMillis = millis();
if (ledState == LOW)
{
if (currentMillis - previousMillis >= aantijd)
{
digitalWrite(pomp, HIGH);// pomp start
ledState = HIGH;
previousMillis = currentMillis;
}
}
else
{
if (currentMillis - previousMillis >= uittijd)
{
digitalWrite(pomp, LOW); // pomp stopt
ledState = LOW;
previousMillis = currentMillis;
}
}
}
if (waardeLDR <400)
{
digitalWrite(pomp, HIGH); // pomp stopt
digitalWrite(trafo, LOW); // led trafo aan
}
DateTime now = RTC.now();
if (now.second() == 0) {
if (poweredOn1 == 0) {
checkStartTime1();
} else {
checkEndTime1();
}
if (poweredOn2 == 0) {
checkStartTime2();
} else {
checkEndTime2();
}
if (validStart1 == 1) {
dimmeraan();
}
if (validStart2 ==1){
reserveaan();
}
if (validEnd1 == 1) {
dimmeruit();
}
if (validEnd2 ==1) {
reserveuit();
}
}
delay(100);
}
byte checkStartTime1() {
DateTime now = RTC.now();
if (now.hour() == startHour1 && now.minute() == startMinute1) {
validStart1 = 1;
poweredOn1 = 1;
} else {
validStart1 = 0;
}
return validStart1;
}
byte checkStartTime2() {
DateTime now = RTC.now();
if (now.hour() == startHour2 && now.minute() == startMinute2) {
validStart2 = 1;
poweredOn2= 1;
} else {
validStart2 = 0;
}
return validStart2;
}
byte checkEndTime1() {
DateTime now = RTC.now();
if (now.hour() == endHour1 && now.minute() == endMinute1) {
validEnd1 = 1;
poweredOn1 = 0;
} else {
validEnd1 = 0;
}
return validEnd1;
}
byte checkEndTime2() {
DateTime now = RTC.now();
if (now.hour() == endHour2 && now.minute() == endMinute2) {
validEnd2 = 1;
poweredOn2 = 0;
} else {
validEnd2 = 0;
}
return validEnd2;
}
void dimmeraan() {
digitalWrite(dimmer, LOW); // leddimmer start
}
void dimmeruit() { //
digitalWrite(dimmer, HIGH); // leddimmer stopt
}
void reserveaan(){
digitalWrite(reserve, HIGH);
}
void reserveuit(){
digitalWrite(reserve, LOW);
}
Advertisement
Re: Voliere besturing
Vanaf
- Code: Alles selecteren
if (waardeLDR <400)
Arduinows!
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001
Re: Voliere besturing
if ldr <450 dan gaat pomp uit else daar staat geen pompaan.
gebruik aub code2=cpp] dan kan ik beter haakjes kijken
en autoformat helpt ook, net als tabs.
en comments.
haal alle delay weg want dat voorkomt dat je tijdschakelaars mist beter is >= dan == want dan is het misschien te laat.
gebruik aub code2=cpp] dan kan ik beter haakjes kijken
en autoformat helpt ook, net als tabs.
en comments.
haal alle delay weg want dat voorkomt dat je tijdschakelaars mist beter is >= dan == want dan is het misschien te laat.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Voliere besturing
Rudi schreef:Vanafin de loop functie wordt niets meer uitgevoerd, ga de accolades maar eens na.
- Code: Alles selecteren
if (waardeLDR <400)
Bedankt voor je reactie.
Misschien kun je me wat op weg helpen.
Alle accolades nagekeken, ik zie nog niet wat hier fout moet zijn, maar ben dan ook nog niet zo lang met programeren bezig.
Wat ik wel zie dat de gehele void loop niet tussen { } staat.
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Majestic-12 [Bot] en 70 gasten