DIY Arduino Dosierpumpe

  • Hatte ich zwar alles schonmal geschrieben und verlinkt, aber es ist alles richtig so: Jumper muss in jedem Fall raus bei Versorgung des Shield mit einer Spannungsversorgung, sonst knallts direkt oder nach ein paar Schaltvorgängen.


    Einen regelbaren DC-DC wandler als günstigste und ausreichende Lösung habe ich auch bereits vorgeschlagen. Dann brauchst Du kein zweites Netzteil für die Versorgung des Arduinos.



    Sent from my iPhone using Tapatalk

  • Hallo Volker,


    Ich werde auf jeden Fall mit 2 Netzteilen arbeiten. Hat bei mir den Vorteil, dass ich damit auch meine Nachfüllanlage betreiben kann und ich das zweite Netzteil dann nur über ein Relais schalte und somit das Motorshield nicht den ganzen Tag unter Strom steht. Soll einfach eine zweite Sicherung sein, falls die Pumpen einmal nicht mehr ausgehen sollten.


    Leider funktioniert das bei mir nicht. Welches Netzteil wird für das Motorshield nun gebraucht wenn ich mit zwei Netzteilen arbeite, 12 oder 24V? Der Jumper ist raus, aber wenn ich manuell auf "An" mache tut sich nichts.


    lG
    Michael

  • Achso, den Code habe ich noch nicht an das Motorshield angepasst. Zumal ich in dieser Version noch nicht mit der Adafruit Library laufen habe. Ich weiss grad nicht welche Pins das Motorshield verwendet. Google mal nach dem Tutorial von Ladyada. Da steht dronnen welche Ports verwendet wrrden.



    Sent from my iPhone using Tapatalk

  • Hi Michael,
    hängt a) vom Motorshield und b) von den
    Pumpen ab.
    Beide sollten für 24V geeignet sein. Auch auf den max zulässigen
    Strom (vermutlich 0.6A) achten.


    Wenn Du di gleichen Bauteile wie Volker hast, sollte das klappen
    mit 24v.
    Die pumpen laufen bei 200mA und 12 oder 24V. Das Shield kann bei
    max 25V laufen.


    Ich habe das Gefühl, dass Du die Zusammenhänge noch nicht ganz
    verstehst.

    Der Arduino „steuert“ nur, der Motorshield „versorgt“ die
    Pumpen. D.h. zunächst braucht der Arduino Strom um zu funktinoieren.
    Dafür nimmst Du ein Netzteil mit MAX 12V. Ein Atmega läuft natürlich nur bei
    5V, aber auf dem Arduino direkt hinter der Hohlsteckerbuchse (Stromversorgung)
    hängt ein Spannungsregler 7805 de rnix anderes macht, als 7V von den 12V zu
    verbraten und nur 5V an den Arduino weitergibt. Daher nutze ich auch im besten
    Fall nur ein 5V Netzteil für den Arduino. Du merkst den Unterschied, wenn du
    den 7805 mal fühlst. Bei 12V schon gut heiß.


    Der Arduino nimmt nun die 5V, legt die auf einen 5V PWM Ausgang und
    regelt damit das Motorshield. (also der Sketch )


    Da die Pumpen aber bei 5V vermutlich nicht laufen, nimmst du
    dafür eine externe Spannungsversorgung (oder die 12V, die sich das Motorshield
    über VIN VOR DEM 7805 vom Arduino abgreifen kann). In deinem Fall die
    gewünschte 24V Versorgung AN DAS Motorshield.

    Das 5V PWM Signel regelt nun die 24V Spannung. Ähnlich wie bei
    einem Transistor.


    VG
    THorsten

  • Achso, den Code habe ich noch nicht an das Motorshield angepasst. Zumal ich in dieser Version noch nicht mit der Adafruit Library laufen habe. Ich weiss grad nicht welche Pins das Motorshield verwendet. Google mal nach dem Tutorial von Ladyada. Da steht dronnen welche Ports verwendet wrrden.



    Sent from my iPhone using Tapatalk

    Motorshield:



    The following pins are in use only if
    the DC/Stepper noted is in use
    :


    Digital pin 11: DC Motor #1 / Stepper #1 (activation/speed control)


    Digital pin 3: DC Motor #2 / Stepper #1 (activation/speed control)


    Digital pin 5: DC Motor #3 / Stepper #2 (activation/speed control)


    Digital pin 6: DC Motor #4 / Stepper #2 (activation/speed control)



    The following
    pins are in use if any DC/steppers are used


    Digital pin 4, 7, 8 and 12 are used to drive the DC/Stepper motors via the
    74HC595 serial-to-parallel latch



    The
    following pins are used only if that particular servo is in use
    :


    Digitals pin 9: Servo #1 control


    Digital pin 10: Servo #2 control



    Digital pin 2, and 13 are not used.


    @ Michael,
    schau Dir bitte den Link an, den ich geschickt habe. Da findest Du auch die Library die die Steuerung übernimmt.
    Ist ganz easy und in dem Link gut beschrieben.


    Ich vermute, dass bei Dir nix passiert, da ohne Steuercode alles zunächst auf LOW steht, also die 24V zwar anliegen, aber das Arduino Steuersignal auf LOW steht, also 0V. (Siehe meinen vorherigen Beitrag)


    Gruß

  • Digital Pin,


    11 für Motor 1,
    3 für Motor 2,
    5 für Motor 3,
    6 für Motor 4,


    Für den Rückwärtsbetrieb werden 4 weitere Pins benötigt.


    Musste in meinem Code äbdern falls ich diese dort moch nicht angegeben habe.


    Grüße, Volker



    Sent from my iPhone using Tapatalk

  • Hallo zusammen,


    Thorsten:
    Wie ein Spannungswandler funktioniert musst du mir nach 3,5 Jahren Studium nicht sagen :D
    Aber danke für die PIN Belegung.


    @Volker:
    Habe den Code einmal geändert.


    Wenn ich deinen Code richtig verstehe muss ich folgende Zeile auf PIN 11 setzen für Motor 1:

    Code
    const int M1_MENUDOSIERPORT_1 = 11;



    Wenn ich das ändere und ich im Menü bei der Dosierpumpe auf Manuell "An" gehe liegen auch am Ausgang 11 5V an. Allerdings liegt am Ausgang für die Pumpen immernoch keine Spannung an Oo
    Brauch ich dazu noch eine spezielle Lib oder woran liegts?


    lG
    Michael

  • Hallo Michael,


    Da fragst Du mich grad was. Eigentlich nicht. Ich kanns aber auch grade nicht überprüfen. Mir sind diese Woche die Hände gebunden. Ich würde vorschlagen, wenn Du/Ihr es nicht hin bekommt, wartet bis spätestens Montag und ich werde das Problem lösen.


    Ansonsten, teste die Adafruit motorshield Library mit dem enthaltenen Example, ob Dein Shield funktioniert.


    Grus,
    Volker



    Sent from my iPhone using Tapatalk

  • Hallo Volker,


    Habe das Problem schon gefunden. Die Lib von Adafruit scheint zu reichen, zumindest läuft das Beispiel von Ihnen bei mir. Der Fehler war bei mir, dass es nicht reicht nur die 4 von dir geposteten PINS anzuschliessen. Man muss wirklich alle, mit Ausnahme von PIN 9 und 10 anschliessen. Ob man sich trotzdem den ein oder anderen PIN sparen kann weiss ich nicht, aber nur die 4 PINs reichen definitiv nicht.


    Nächstes Problem. Ich habe deinen Code so abgeändert, dass es mit dem Motorshield funktionieren sollte. Allerdings bekomme ich beim Upload folgenden Fehler (und LCD blinkt):
    "
    avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64
    avrdude: stk500_cmd(): programmer is out of sync"



    Hast ne Idee wo das Problem liegen kann? Habe den Code mal angehängt.


    //edit
    Wasn heute nur los mit mir :D
    Natürlich ist der Sketch einfach nur zu groß für den UNO. 2 Dosierer raus gelöscht und schon schnurrts :)


    lG
    Michael

  • Na dann. ;)
    Gut zu wissen mit dem Shield. Ist mir wohl beim Initialtest des adafruit shields gar nicht aufgefallen.


    Aber schon irre: was hast Du bitte alles geändert, dass der Sketch so groß geworden ist? Liegt das an der Library? Wahnsinn.


    Also bei meibem Jetzigen (poste ich evtl. Am WE wenn er läuft) habe ich schon verdammt viel code hinzugefügt, dass er für einen Uno nicht mehr von der Dpricherkapazität passt. Hmm!



    Sent from my iPhone using Tapatalk

  • Naja soviel macht das auch nicht aus. War vorher bei ca 28,5KB und jetzt auch 30KB. Auch wenn ich laut Compiler noch 2KB frei hätte lässt ers mir nicht hochladen. Ist wohl der Speicherverbauch des Bootloaders?


    Was ich bisher alles eingefügt habe?


    - 2 Temperatursensoren (OneWire, Dallastemperature)
    - 4x20 I2C Display
    - Motorshield


    Keine Ahnung was da nun soviel Speicher verbaucht dass der UNO schon an seine Grenzen anbelangt ist. Der Mega liegt ja noch hier, aber solange ich noch rum experimentiere bleibts beim UNO. Nicht dass ich wieder den Bootloader schiesse ^^


    lG
    Michael

  • Hi Leute,


    ich bin total baff wie schnell ihr die ganze Sache hier vorantreibt. Dafür ein dickes Lob.
    Ich habe gerade mal versucht den Code auf meinen Mega zu laden. Leider spukt die Software folgenden Fehler aus:


    Time does not name a type


    und dann markiert er mir folgende Zeile des Codes:


    uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0};


    Habt ihr ne Idee woran das liegt?


    Gruß,


    Ben

  • Hi nochmal,


    Wie wollt ihr den die Dosierzeitpunkte realisieren, bzw. wie viele Intervalle wollt ihr geben?


    Ich persönlich fände mindestens 24 Intervalle gut, da sich hier die Schwanckungen in der Wasserzusammensetzung minimieren.

  • Hallo Ben,
    ich habe in der neuen Version erstmal 10 Dosierzeitpunkte eingepflegt. War'ne Menge Schreibarbeit vor allem wegen den EEPROM-Einträgen. Das ist auch der Grund weshalb der Speicherplatz vom Uno nicht mehr ausreicht.



    Sent from my iPhone using Tapatalk

  • Hallo,


    Ben:
    Ich kann mir nur vorstellen, dass das an irgendeiner Lib liegt. Kontrollier mal ob du wirklich alle und die richtigen Libs hast. Alle Libs die ich benutze habe ich in meinen Beiträgen auch angehängt oder verlinkt.
    Ansonsten könnt ich mir nur vorstellen, dass bei dir auch der Speicherplatz nicht mehr ausreicht. Der Fehler sollte dann zwar anders heissen aber ich hatte bei meinem Fehler anfangs auch nicht an den Speicherplatz gedacht :D


    @Volker:
    Wie groß ist denn dein Programm mitlerweile? Wäre es denn nicht auch möglich die ganzen Daten wie Dosierzeiten, Alarmgrenze etc. nicht in das EEPROM zu schreiben, sondern einfach auf eine SD-Karte zu schieben?


    lG
    Michael

  • hab mr den quelltext mal angeschaut ...


    platz bekommt man da recht schnell und auch die eeprom sachen gehen deutlich einfacher wenn man datenstrukturen anlegt
    auch die ganzen einzelnen variablen müssen ncht sein ...
    vieles ist dort aufgerollt das der optimierer so ncht wegbekommt.

    Dirk

Jetzt mitmachen!

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