DIY Arduino Dosierpumpe

  • ich hab dazu nen ULN2803 genommen


    wobei besagter transistor+ schutzdiode reicht
    ist ja auch nicht wirklich was anderes da drin ^^


    ich hab nur noch einen schaltregler für 12V mit drauf da meine pumpen max 12V vertragen
    ggf kann man sogar ein poti draufpappen um die pumpen langsamer drehen zu lassen


    --- dann würde ich aber eher eine PWM einsetzen ( drehmoment!! )

    Dirk

    Einmal editiert, zuletzt von saddevil ()

  • Die Schlauchpumpe rückwärtsdrehen ist nur Spielerei und verwendet sowieso kaum jemand.

    Hattest Du nicht was von vier Pumpen pro Motorshield geschrieben? Dann geht doch nur eine Richtung: Eine Halbbrücke pro Pumpe.


    Bei Zwei Pumpen ginge auch "rückwärtsdrehen".


    Der Witz beim MIC5842 wäre die serielle Ansteuerung, die beliebig kaskadierbar ist: DIY-Magnetrühre, Magnetventile für CO2, Wasser nachfüllen, Wasser ablassen, Lüfter im Sommer einschalten, Alarmbuzzer einschalten, ...


    Was ich (aber über Geschmack kann man nicht streiten) nicht so schön finde, ist, wenn Taster und Display im gleichen Gehäuse sind wie die Pumpen. Daher denke ich über ein Kabel vom Gehäuse1 mit Arduino, Display und Tasten hin zum Gehäuse2 mit MIC5842 und Dosierpunpen nach.


    Anders geht es natürlich auch: Ein 1602-Display mit I²C und ein paar Taster in die Bedieneinheit und dann den Arduino Mega mit "mind. 40 Dosierpumpen wenn ihr wollt" :P in das Gehäuse der Dosierpumpen. Die Anzahl der Adern im Kabel ist in beiden Varianten fast gleich.


    Ein Patch-kabel hat z.B. 8 Leitungen, das reicht für beide Varianten.

  • Ahhhhh Volker,


    dein Tip mit dem gut durchlesen funktioniert :EVD335~121:


    langsam steige ich auch dahinter,es geschehen noch Zeichen und Wunder :7_small27:


    Ich hoffe das ich dich trotzdem, wenn ich etwas nicht so recht verstehe
    ansprechen,bzw. anschreiben darf.


    Übrigens sehr schön dargestellt und beschrieben.

    Gruß

    :search:

    Einmal editiert, zuletzt von the voice ()

  • HI
    erst mal ein großes Lob an Volker super Arbeit hast du da gemacht :)
    habe schon vor dem Projekt mir einen Arduino zum ausprobieren besorgt und auch schon kleine Programme geschrieben allerdings
    nur ohne Display und auf gar keinen Fall mit einer Menü Führung.
    Habe hier auch schon von der Entstehung des ersten posts an mit gelsen :) und nun habe ich entlich die zeit gefunden mir auch einen kleinen Aquarien Computer zu bauen sprich die Dosierpumpe noch zu erweitern.


    Allerdings habe ich ein kleines Problem und zwar möchte ich bei meinem code anstatt delays natürlich millis benutzen aber leider klappt das nicht so richtig, habe auch schon sämtliche anleitungen durch aber leider klappts nicht.
    Vielleicht kann mir ja einer von euch helfen und mir eventuell ein bsp geben
    hier ist mein ursprünglicher code mit delays :


  • Meinst Du sowas?



    unsigned long currentTime = millis();
    unsigned long previousTime = 0;
    int TimeInterval = 10; //Oder irgend ein Intervall



    void setup() {



    }


    void loop(){


    currentTime = millis();


    if ((currentTime - previousTime) > TimeInterval){


    previousTime = millis();


    }


    }




    Ansonsten weiss ich grad nichts.

  • Hi
    danke schon mal für die schnelle Rückmeldung


    ich glaub das ist nicht das richtige ich möchte nur anstatt meiner delays (Zeile 33 und Zeile 44 ) zu benutzen ,die ja das ganze Programm anhalten, eine andere Möglichkeit benutzen um eine art pause zu simulieren.
    ok das war jetzt glaube ich auch nicht besser erklärt :D
    noch ein versuch :)
    ich möchte zb meine stroemungspumpe1 und stroemungspumpe 2 für 3min (180000ms) anhalten (also auf low setzen) wenn der Taster kommt und dies natürlich ohne ein delay zu benutzen
    genauso ab Zeile 40-49 möchte ich das meine Nachfüllautomatikpumpe 60s länger läuft als Schalter1 Anliegt und dies auch weider ohne delay :)

  • das geht meines Wissens nach auch ohne interrupts
    bei einem interrupt wird das Programm ja trotzdem unterbrochen und führ sozusagen kurz ein Unterprogramm aus, beginnt anschließend aber wieder bei der stelle nach dem interrupt


    ich möchte ja das meine Programmschleife weiter läuft (void loop) und nur die zwei Ausgänge für 3min kurz auf low gesetzt werden sozusagen mit Hilfe eines Zählers ( milli() ) doch leider klappt das irgendwie nicht so richtig :/

  • unsigned long Timer1 = 0;
    unsigned long Timer2 = 0;



    das hatte doch Aquafish007 gesagt ...



    die arduinolib is bei digitalwrite böse !!
    150-70 takte nur für die funktion


    ein einfaches PORTA |= (1<<PA0); tut es in einem takt ^^

    Dirk

    Einmal editiert, zuletzt von saddevil ()

  • könnte einer von euch die gesammte libery zusammén fassen und hochladen


    das macht das ganze nämlich leichter beim nachbauen :D



    MfG


    Jens

    Mit freundlichen Grüßen


    Jens


    200l Mischbecken
    120l Artenbecken
    3 Stöckige Aufzucht Anlege für Ocellaris Mokka, LSD Mandarin und Korallen

  • Super das werde ich gleich morgen probieren da ich heute ein paar fehler drinn hatte so das ich es nicht hochladen konnte :(

    Mit freundlichen Grüßen


    Jens


    200l Mischbecken
    120l Artenbecken
    3 Stöckige Aufzucht Anlege für Ocellaris Mokka, LSD Mandarin und Korallen

  • Hi


    ich habe vorgestern und gestern das von euch mal ausprobiert und auch noch andere Bsp getestet.
    Leider komme ich da nicht wirklich weiter ich weiß leider auch nicht so genau woran es liegt.
    Ich schaffe es nur das der Taste 3min anliegen muss bis strömungspumpe1 und strömungspumpe2 schaltet :/


    könnt ihr mir das vielleicht anhand das codes mal zeigen wie ich



    currentTime = millis();


    if ((currentTime - previousTime) > TimeInterval){


    previousTime = millis();


    einsetzen muss da mit stroemungspumpe1 und stroemungspumpe2 3min auf Low geschaltet werden
    das wäre wirklich super für mein Verständnis :S

    Code
    int val1 = digitalRead(Taster); // lies Input vom Schalter
    if (val1 == HIGH) { // wenn der Wert von val gleich HIGH ist
    digitalWrite(Stroemungspumpe1, LOW); // schaltet LED1 ein
    digitalWrite(Stroemungspumpe2, LOW); // schaltet LED2 aus
    delay(180000);
    }
    else {
    digitalWrite(Stroemungspumpe1, HIGH);
    digitalWrite(Stroemungspumpe2, HIGH);
    }


    LG TC :)

  • ohne die lösung zu verraten :


    es gibt zustände ..


    taster 1 oder 0
    ebenso der ausgang 1 oder 0


    dazwischen läuft ein timer runter -- oder rauf ++


    wenn der Timer gesetzt wird schaltest die pumpe an ( ob taster oder zeit )
    wenn der timer abgelafen ist wieder aus

    Dirk

  • So, jetzt hab ich mal 5 Minuten Zeit:
    So in etwa sollte das laufen, kann sein das noch kleine Fehler drinnen sind, aber vom Prinzip her, mache ich das fast immer nach diesem Schema.




    long aktuelleZeit;


    long zeitStempel;
    long stroemungsPausenzeit;
    int timerSwitch;
    int prevTimerSwitch;



    int val1 = digitalRead(Taster); // lies Input vom Schalter



    void setup(){
    timerSwitch = 0;
    prevTimerSwitch = 0;
    stroemungsPausenzeit = 60 ; //Sekunden



    }



    void loop(){


    aktuelleZeit = (time.hour * HOUR) + (time.min * MINUTE) + time.sec;

    if (val1 == HIGH)
    { zeitStempel = aktuelleZeit }


    if ((aktuelleZeit >= zeitStempel) && (aktuelleZeit <= (zeitStempel + stroemungsPausenzeit)))
    {
    timerSwitch = 1; //Der Zustand bleibt solange auf 1 bis die Zeit abgelaufen ist
    }
    else
    {
    timerSwitch = 0;

    }



    //Jetzt kommt der Trick: Der 1 Zusatand wird nur einmal im loop aufgerufen,
    //weil der Timerswitch nach einer Runde gleich gesetzt wird! Wenn die Zeit abgelaufen ist,
    //wird der Zustand umgestellt. So werden andere Prozesse im Loop nicht beeintraechtigt!
    if (timerSwitch != prevTimerSwitch){
    if (timerSwitch == 0)
    {
    digitalWrite(Stroemungspumpe1, LOW); // schaltet LED1 ein
    digitalWrite(Stroemungspumpe2, LOW); // schaltet LED2 aus

    }
    else if (timerSwitch == 1)
    {
    digitalWrite(Stroemungspumpe1, HIGH);
    digitalWrite(Stroemungspumpe2, HIGH);

    }
    else
    {
    digitalWrite(Stroemungspumpe1, LOW);
    digitalWrite(Stroemungspumpe2, LOW);

    }
    prevTimerSwitch = timerSwitch;
    }

    }

  • Hallo Volker,


    meine Bauteile trudeln so langsam alle ein.
    Frage:
    Wenn ich für jede Pumpe eine Funktions-LED anschließen möchte,
    also wenn eine Pumpe läuft das das zusätzlich mit einer LED angezeigt wird.
    Was für einen Wiederstand muss ich für die LED verbauen?

    Gruß

    :search:

  • Ich würd mal mit 1k-10k probieren. Sonst ist es zu hell. Aber dann an den Pin-Ausgängen dran machen. Musste mal ausprobieren, bei welche 4 von den 8 genutzten Pins für die Drehung im Uhrzeigersinn verwendet werden. Weiss ich jetzt auch nicht. Oder möchtest Du die direkt bei den 24 V Motoranschlüssen dran machen?



    Viele Grüße,


    Volker

  • Ich habe da so ein kleines problem mit der RTC


    habe die RTC an Analog 2 und 3 und habe dann die Ports im Programm auf 94 und 95 geändert nun zeigt mir das display nicht mehr 95.95 oder wie das sondern


    Datum 00.00.2000 kann ich aber nicht verstellen :(
    Urzeit kann ich einstellen aber wird nicht gespeichert :(


    kann mir da jemand helfen

    Mit freundlichen Grüßen


    Jens


    200l Mischbecken
    120l Artenbecken
    3 Stöckige Aufzucht Anlege für Ocellaris Mokka, LSD Mandarin und Korallen

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!