Hi,
ich hab mal ne Frage:
Ich habe auch meine Pumpe fertig: Dadrin steckt ein Arduino mit RTC und ein 4fach Relaisboard (http://www.ebay.de/itm/Neu-4-C…chnik&hash=item4ab473efc6) aus Übersee.
Dosierpumpen: 4x http://www.ebay.de/itm/Schlauc…umpen&hash=item51a0acb28b
Die Stromversorgung sieht wie folgt aus:
- 12 V liegen am Arduino an
- die selben 12 V liegen an den 4 Relaisausgängen an
- 5V zapfe ich hinter einem 7805 direkt ab und nutze sie als Schaltspannung für die Relais, da ich gemerkt habe, dass der Strom der 4 AUsgangspins nicht ausreicht
Mein Problem ist, dass der Arduino sehr häufig abschmiert, wenn ich die Pumpen anschalte. Ich bin noch am checken ob es ein Softwarefehler ist, schließe das aber eigentlich aus.
Was mich viel mehr interessieren würde: Läuft eure Pumpenstromversorgung über einen getrennten Stromkreis (extra Netzteil)?
Oder habt ihr die Pumpen mittels Diode und Kondensator abgesichert? Bei Motoren macht man sowas ja.
Vielleicht hat ja jemand einen guten TIpp für mich
VG
Thorsten
Trotzdem hier mal mein aktueller Codestand, vielleicht habt ihr ja dazu Tipps:
//*****************************************INITIALISIERUNG*************************************
//*********************************************************************************************
#include <EEPROM.h>
boolean neustart = true;
const byte PowerLED = 13;
//********************************************Dosing*****************************************
const byte dosing[] = {7,8,9,10};
boolean doseStat[] = {false, false, false, false, false};
int milliliter=150; //ml pro trace
float x = milliliter*0.02; //5mal10ml
unsigned long dosingTime[] = { (28866*x), (27000*x), (28579*x), (28728*1.083*x), 60000}; //*zeit für 10ml *x
unsigned long doserMillis[5];
boolean once=true;
//********************************************TIME**************************************
long Powerinterval = 1000;
long previousMillis = 0;
boolean PowerState;
//****************************************DS1307 RealTimeClock*********************************
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 RTC;
byte sec, mins, hour, day, date, month, year;
void setup()
{
//********************************************Dosing*****************************************
digitalWrite (dosing[0], HIGH);
digitalWrite (dosing[1], HIGH);
digitalWrite (dosing[2], HIGH);
digitalWrite (dosing[3], HIGH);
pinMode(dosing[0], OUTPUT);
pinMode(dosing[1], OUTPUT);
pinMode(dosing[2], OUTPUT);
pinMode(dosing[3], OUTPUT);
pinMode(2, INPUT);
digitalWrite (2, HIGH);
pinMode(PowerLED, OUTPUT);
digitalWrite (PowerLED, LOW);
//****************************************DS1307 RealTimeClock*********************************
Wire.begin();
RTC.begin();
//RTC.adjust(DateTime(__DATE__, __TIME__));
}
void loop() {
if (neustart == true) {
milliliter = EEPROM.read(0);
neustart=false;
blinkNeu();
}
checkPower();
getTime();
autoDose();
doseAll();
}
void getTime() {
DateTime now = RTC.now();
hour= now.hour();
mins= now.minute();
sec= now.second();
date= now.day();
month= now.month();
year= now.year();
}
void blinkNeu () {
for (int i=0; i<5; i++) {
digitalWrite(PowerLED, HIGH);
delay(100);
digitalWrite(PowerLED, LOW);
delay(100);
}
}
void checkPower() {
unsigned long powerMillis = millis();
if (powerMillis - previousMillis > Powerinterval) {
previousMillis = powerMillis;
if (PowerState == LOW) PowerState = HIGH;
else PowerState = LOW;
digitalWrite(PowerLED, PowerState);
}
}
/*
void writeEEPROM() {
milliliter=incomingByte[4];
EEPROM.write(0, milliliter);
x = milliliter/50;
dosingTime[0] = 30750*x;
dosingTime[1] = 29250*x;
dosingTime[2] = 32250*x;
dosingTime[3] = 381000*1.083*x;
}*/
void doseAll() {
if (digitalRead(2)==HIGH && doseStat[4]==false && once==true) {
doserMillis[4]=millis();
doseStat[4]=true;
once=false;
}
if (digitalRead(2)==LOW) {
doseStat[4]=false;
once=true;
}
if (doseStat[4]==true && (millis()-doserMillis[4])<dosingTime[4]) {
for (int i=0; i<4; i++) digitalWrite(dosing[i], LOW);
}
if (doseStat[4]==false || (millis()-doserMillis[4])>dosingTime[4]) {
for (int i=0; i<4; i++) digitalWrite(dosing[i], HIGH);
}
}
void autoDose() {
if (mins==10 && (hour==8 || hour==10 || hour==12 || hour==14 || hour==16) && doseStat[0]==false) { // Triton Base 1
doserMillis[0]=millis();
doseStat[0]=true;
}
if (mins==20 && (hour==8 || hour==10 || hour==12 || hour==14 || hour==16) && doseStat[1]==false) { // Triton Base 2
doserMillis[1]=millis();
doseStat[1]=true;
}
if (mins==30 && (hour==8 || hour==10 || hour==12 || hour==14 || hour==16) && doseStat[2]==false) { // Triton Base 3
doserMillis[2]=millis();
doseStat[2]=true;
}
if (hour==6 && (mins==0 || mins==5 || mins==10 || mins==15 || mins==20 || mins==25 || mins==30 || mins==35 || mins==40 || mins==45 ) && doseStat[3]==false) { // Wechselwasser
doserMillis[3]=millis();
doseStat[3]=true;
}
for (int i=0; i<4; i++) {
if (millis() - doserMillis[i] < dosingTime[i] && doseStat[i]==true) {
digitalWrite(dosing[i], LOW);
}
if (millis() - doserMillis[i] > dosingTime[i] && doseStat[i]==true) {
digitalWrite(dosing[i], HIGH);
doseStat[i]=false;
}
}
}
Alles anzeigen