DIY Arduino Dosierpumpe

  • Konstanten kann man ruhig fest zu #defines machen ...
    /*+++++++ K O N S T A N T E N +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
    #define MAXPWMSTEPS 4096
    usw...


    und bei :


    kann man datenstrukturen anlegen ..
    da es auch die selben texte sind würden pointer hier reichen


    Dirk

  • Hi Dirk,


    super, dass Du Optimierungsvorschläge machst. Kann ich mir sicher auch was von abschauen.
    Ich hätte (bzw. habe) in meinem Code, einfach weil ich es nicht besser weiß, statt mit Datenstrukturen ein Array erstellt.
    Vielleicht erklärst mal den Unterschied und die VOrteile.


    Gruß
    Thorsten

  • Hi


    Mit dem arduinozeug hab ich nicht viel am Hut...
    Muss dann schauen ob der Compiler das frisst


    Mag lieber plain "C"....



    Vorteil wäre :
    - Speicherung des Blocks im eeprom
    - schnelle Anpassung... 1- X dosierpumpen..(arrayindex)
    - Vereinfachung von Funktionen
    - dadurch besser lesbar

    Dirk

  • Hallo zusammen,


    Heute am Feiertag mal etwas anderes. Irgendwann muss ja auch mal ein Gehäuse her. Ich hab mir gestern beim Conrad einfach mal eine etwas größere schwarze Plastik Box mitgenommen. Einfach zu Testzwecken. Ich weiss nicht ob ich den Computer nicht später "modular aufbaue". Also ein Gehäuse für Arduino, eins für Motorshield/Dosierpumpen, eins für LCD und Tasten etc.


    Trotzdem würde ich schon einmal Testweise alle Komponenten in das größe Gehäuse einschrauben. Jetzt die Frage wie macht man das eigentlich? Klingt jetzt bestimmt sehr laienhaft aber dazu habe ich wirklich noch nichts im Netz gefunden. Bräuchte ja irgendwelche Abstandshalter, was nimmt man da so damit es nicht total unprofessionell aussieht?
    Sonst noch irgendwelche Tipps für das Gehäuse?


    lG
    Michael

  • Gibt auch beim großen C platinenhalter zum kleben.
    Die machen sich ganz gut.
    Oder die normalen Abstandshalter zum schrauben.

    Dirk

  • Hallo,


    Danke Dirk. Man tut sich echt schwer wenn man nicht weiss wonach man suchen muss ^^


    @all:
    Hab mir ja gestern den Füllstandschalter vom Conrad mitgenommen und diesen auch gleich im Arduino integriert. Leider mussten wegen dem Speicherplatz erstmal die Dosierpumpen weichen. Da ich sowieso noch kein Balling betreibe ist das erstmal zu vernachlässigen. Später kann man das ja wieder integrieren.


    Ich habe es nun so gelöst:
    Ich habe ein 8 Kanal Relaisboard benutzt mit dem ich ein 12V Netzteil schalte. Das Relais an PIN 13 (der sollte ja noch frei sein). Im Menü kann ich nun 2 verschiedene Nachfüllzeiten und die Nachfülldauer festlegen. In dieser Zeit schaltet das Relais und der Nachfüllschalter bekommt Strom -> füllt selbstständig bis zur Grenze auf.
    Irgendwie funktioniert aber die "Manuell" Funktion aus irgendeinem Grund nicht? Ist aber bei der Nachfüllanlage egal, da ich diese ja nicht erst mit dem Osmosewasser füllen muss.


    Wer Interesse daran hat kann sich den Sketch ja mal ziehen.


    lG
    Michael

  • Hi Marco,


    Erinnert irgendwie sehr an den Raspberry Pi :6_small28:


    Allerdings sieht mir das mehr nach einem verbesserten UNO aus. 32KB Flash Speicher, 14 Digital Ports. Da wirst man kaum die Möglichkeiten des Arduino nutzen können.


    lG
    Michael

  • Hallo Volker,


    Ich nochmal :D
    Habe gerade festgestellt dass nicht nur die Funktion "Manuell" bei mir nicht funktioniert, sondern auch die Nachfüllzeit1. Die Nachfüllzeit2 geht ohne Probleme, aber die erste startet er einfach nicht :/



    Vielleicht siehst ja du den Fehler?


    lG
    Michael


    edit: Da die Codefunktion gerade rumspinnt hier nochmal:


    //+++++++++++++++++++++++++++++++++++++ N A C H F Z E I T E N +++++++++++++++++++++++++++++++++++++++++++++++++++




    Nachfautomatzeit1 = (Nachfzeit1.hour * HOUR) + (Nachfzeit1.min * MINUTE) + Nachfzeit1.sec;
    Nachfautomatdauer1 = (Nachfdauer1.hour * HOUR) + (Nachfdauer1.min * MINUTE) + Nachfdauer1.sec;


    Nachfautomatdauer2 = (Nachfdauer2.hour * HOUR) + (Nachfdauer2.min * MINUTE) + Nachfdauer2.sec;
    Nachfautomatzeit2 = (Nachfzeit2.hour * HOUR) + (Nachfzeit2.min * MINUTE) + Nachfzeit2.sec;
    //1. Abfrage: Wann soll dosiert werden


    //2. Abfrage: manuelle Streuerung An/Aus
    //Nachfzeit 1
    if (((lTime >= Nachfautomatzeit1) && (lTime <= Nachfautomatzeit1 + Nachfautomatdauer1)) )//|| (Nachfmanuell_1 == true))
    {
    digitalWrite(R1Pin, LOW);
    }
    else
    {
    digitalWrite(R1Pin, HIGH);
    // Endtime1 = 0;
    }


    //Nachfzeit 2
    if (((lTime >= Nachfautomatzeit2) && (lTime <= Nachfautomatzeit2 + Nachfautomatdauer2)) )//|| ((Endtime2 > 0) && (lTime <= Endtime2)))
    {
    digitalWrite(R1Pin, LOW);
    }
    else
    {
    digitalWrite(R1Pin, HIGH);
    // Endtime2 = 0;
    }

    2 Mal editiert, zuletzt von MoonPie ()


  • das ist eher ein linuxbard mit ARM C0rtex A8 mit LAN und USB
    der arduno ist eher was für kleine steuerungen die dem linuxboard über UART/SPI was mitteilt ...


    der AVR hat dennoch die selben beschränkungen... ist nunmal nur ein ATmega32



    ich hab bei meiner LED /Dosierpumpe nur einen ATMega168P drauf ...
    dort ist neben derm miniframework und der Buskommunikation das jeweile PRogramm drauf
    für die 8kanal dosierpumpensteuerung ist der µC 23% belegt
    die LED Steuerung braucht ~20%

    Dirk

  • Hallo Michael,


    Du kannst einen Pin nur innerhalb einer Methode schalten nicht wie Du in 2 getrennten Methoden. Deshalb finkrioniert nur Deine 2. Zeit. Du musst mit einer ODER-Verknüpfung beide Zeiten verschachteln.


    Gruß,
    Volker



    Sent from my iPhone using Tapatalk

  • Hi Volker,


    Super danke dir :)
    Verstehe das zwar von der Programmlogik nicht wieso er dann die erste If Schleife überspringt aber es scheint nunmal so zu sein. Vielen Dank.


    lG
    Michael

  • Deswegen ist ein ständiges setzen/rücksetzen von ports bei jedem durchlauf teilweise blöd.


    Schreib es so das der Port nur gesetzt/rückgesetzt wird wenn der timer dafür abgelaufen ist...

    Dirk

  • Hallo Dirk,


    Mitlerweile ist mir auch klar warum mein vorheriger Code nicht funktioniert hat. Der Port kann natürlich nicht gleichzeitig gesetzt und nicht gesetzt sein, daher wird eine If Schleife ignoriert. Wie konnte ich das nur nicht sehen :blackeye:


    So ein Timer der Art "If Zeit = x:xx Uhr Dann setze Port y z Sekunden auf Low" wäre natürlich ideal. Dazu haben ich aber leider noch nichts für den Arduino gefunden. Werde ich aber einmal versuchen das so zu realisieren.


    lG
    Michael

  • eine If Schleife


    Gnarf... Das ist eine Bedingung ^^


    Was fertiges ist da glaube schwer zu finden...
    Die Realisierung obliegt dem Programmierer :)


    Ich mache das mit einem Hardwaretimer des AVR
    Dieser schaut zyklisch nach und startet ggf. Einen timer für die Dosierung und setzt den Pin.
    Wenn dieser abgelaufenen ist wird der entsprechende PIN zurückgesetzt.


    Bei mir läuft die Dosierung immer nacheinander ab...
    Es werden nie mehrere pumpen gleichzeitig aktiviert.
    Verhindert stromspitzen bei meinem ULN ... Der hat 8 Kanäle .. aber nur 500mA

    Dirk

  • So liebe Bastelfreunde,


    das lange Warten hat ein Ende. Meine Fotoreihe zur schönsten und günstigsten Allround-Dosierpumpe mit viel Potential beginnt.


    Zu allererst möchte ich sagen, dass Ihr euch bitte nicht abschrecken lässt. Wenn man die (eigentlich) wenige Verkabelung aufmerksam bis zum Schluss verfolgt, dann werdet ihr sehen, dass es nur für den Endbetrachter kompliziert aussieht, nicht mehr jedoch für euch! :spiteful:


    Also, da ich nun ein Protoshield von Sparkfun verwendet habe und keine gewöhnliche Lochrasterplatine, musste ich mein zuvor dargestelltes Layout im Kopf umdenken. Aber was solls, für die meissten von euch braucht ihr nur meine Lötvorgaben zu verfolgen und die Dosierpumpe wird funktionieren!


    So, also los gehts!


    Da wir nicht alle Pins belegen werden, verwende ich für das Protoshield auch nicht alle Pin Headers, sondern nur die wir tatsächlich brauchen. Trotz alledem, können wir mit dem was wir an Ports später noch übrig haben eine Menge machen.
    Die PinHeaders müssen exakt gerade auf dem Protoshield verlötet werden, deswegen ist es wichtig, erst jeweils 1 Pin eines jeden Headers an das Shield zu löten damit man es noch korregieren kann. Erst dann verlötet man die noch freien Pins des Headers an der Platine fest.

  • kannst du mal ne rechnung machen was man nun alles brauch ?
    grob überschlagen ...


    glaube langsam das man bei beta-layout oder haka-lp ein PCB fertigen lassen kann als kleinsere oder prototyp ...
    wo das ganze geraffel aber komplett drauf ist
    ein 2x16 zechen LCD gibts für 2-3€ ... dazu ein mega32 .. oder ein cortex M0 ? ^^

    Dirk

  • Dann setze ich schon mal alle 2 Shields ineinander, um zu schauen, wo meine RTC-Modul am Besten hin passt.


    Man sollte darauf achten, dass man den USB-Stecker des Arduino-Boards auf jeden Fall mit Isolierband umklebt, damit es später keine bösen Kurzschlüsse gibt.


    Dann nehme ich eine Buchsenleiste und knipse mir mit einem Seitenschneider oder Zange 4 Buchsen ab. Ich verwende nur eine 4er Leiste, das RTC-Shield hat zwar auf einer Seite 7 Anschlüsse, aber wir brauchen ja nur GND, VCC, SDA und SCL.

Jetzt mitmachen!

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