Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Sieht echt gut aus.
Gruß JackFrost
Gruß JackFrost
Meine Hardware:
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
- glassart
- Posting Freak
- Beiträge: 1703
- Registriert: Mittwoch 1. Juli 2015, 11:50
- Wohnort: Gunskirchen OÖ
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Super Michael !
lg Herbert
lg Herbert
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
So, jetzt auch tatsächlich im Einsatz und ein Foto vom Innenleben. Als nächstes werde ich weiter an der Software schrauben.
- glassart
- Posting Freak
- Beiträge: 1703
- Registriert: Mittwoch 1. Juli 2015, 11:50
- Wohnort: Gunskirchen OÖ
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
und du hast dir einen Displayrahmen gedruckt wie ich sehe
lg Herbert
Wie verhält sich eigentlich das Einschwingverhalten wenn mit einem großen Fisch und Masse gearbeitet wird ? Sollte vermutlich deutlich schneller einregeln, oder ?
lg Herbert
Wie verhält sich eigentlich das Einschwingverhalten wenn mit einem großen Fisch und Masse gearbeitet wird ? Sollte vermutlich deutlich schneller einregeln, oder ?
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ja, auf die Idee brachte mich ein gewisser Herbert :) obwohl der Ausschnitt auch so ganz gut geworden ist.
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
habe ich noch nicht probiert. Die Regelung habe ich aber inzwischen verbessert.
- bieratenschreck
- Posting Klettermax
- Beiträge: 275
- Registriert: Donnerstag 16. November 2017, 16:57
- Wohnort: Nürnberger Land
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Todschickes Teil, gefällt mir! Danke für Dein Engagement!
Gruß
chr
Gruß
chr
Gruß
Christian
Christian
- monsti88
- Posting Freak
- Beiträge: 749
- Registriert: Mittwoch 12. Oktober 2016, 21:42
- Wohnort: Braunschweig
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Hab meinen Rührer dann mal aufgeschraubt, aber leider vergessen auch Fotos von den Rührfischen zu machen...DerDerDasBierBraut hat geschrieben: ↑ Schraub mal auf und mach Fotos (mit und ohne Fisch). Das bekommen wir gelöst.
Folgt dann am kommenden WE.
20l Bottichmaischer mit 25l Thermobehälter und 34l Pfanne
- DerDerDasBierBraut
- Posting Freak
- Beiträge: 7890
- Registriert: Donnerstag 2. Juni 2016, 20:51
- Wohnort: Neustadt-Glewe
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Reicht schon. Rührfische bis 2cm passen zu dem Rührer.
Falls auch die Kurzen fliegen könntest du drei Sachen versuchen:
1. Die Mutten von den Stehbolzen abschrauben und Scheiben unter den Lüfter legen, damit die Magneten dichter unter die Rührplatte kommen. Falls die Muttern danach nicht mehr passen -> Heißkleber
2. Mehrere dünne (0,5m), runde, starke (N52) Neodymmagneten kaufen (Durchmesser entsprechend der verbauten Magneten), und die flachen Neodymmagneten auf die vorhandenen Magneten kleben (halten von selbst, ohne Kleber). So kommst du mit jedem Neodymmagneten 0,5mm dichter an die Rührplatte, hast mehr Anziehungskraft und irgendwann passt der Abstand ...
3. Unsere 3D Druck Spezis bitten, dir einen passenden Zentrierring zu drucken, den du anstatt des Metalls auf deinen Lüfter klebst. Damit würden auch längere Fische gut passen (3cm).
Falls auch die Kurzen fliegen könntest du drei Sachen versuchen:
1. Die Mutten von den Stehbolzen abschrauben und Scheiben unter den Lüfter legen, damit die Magneten dichter unter die Rührplatte kommen. Falls die Muttern danach nicht mehr passen -> Heißkleber
2. Mehrere dünne (0,5m), runde, starke (N52) Neodymmagneten kaufen (Durchmesser entsprechend der verbauten Magneten), und die flachen Neodymmagneten auf die vorhandenen Magneten kleben (halten von selbst, ohne Kleber). So kommst du mit jedem Neodymmagneten 0,5mm dichter an die Rührplatte, hast mehr Anziehungskraft und irgendwann passt der Abstand ...
3. Unsere 3D Druck Spezis bitten, dir einen passenden Zentrierring zu drucken, den du anstatt des Metalls auf deinen Lüfter klebst. Damit würden auch längere Fische gut passen (3cm).
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
- monsti88
- Posting Freak
- Beiträge: 749
- Registriert: Mittwoch 12. Oktober 2016, 21:42
- Wohnort: Braunschweig
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Super, danke! Die Maßnahmen werden abgearbeitet.
Ginge auch 4. neuen Lüfter kaufen und mit vorhandener Elektronik nutzen? Also nur die zwei Kabel zum Lüfter tauschen? Dann könnte ich den hier im Thread etablierten Lüfter mit Zentrierhilfe nutzen und müsste nur ein neues Gehäuse basteln (war eh zu klein für den 2l Kolben). Mit Elektronik kenne ich mich leider nicht aus, daher wäre es für mich von Vorteil, wenn ich die vorhandene weiter nutzen könnte...
Ginge auch 4. neuen Lüfter kaufen und mit vorhandener Elektronik nutzen? Also nur die zwei Kabel zum Lüfter tauschen? Dann könnte ich den hier im Thread etablierten Lüfter mit Zentrierhilfe nutzen und müsste nur ein neues Gehäuse basteln (war eh zu klein für den 2l Kolben). Mit Elektronik kenne ich mich leider nicht aus, daher wäre es für mich von Vorteil, wenn ich die vorhandene weiter nutzen könnte...
20l Bottichmaischer mit 25l Thermobehälter und 34l Pfanne
- DerDerDasBierBraut
- Posting Freak
- Beiträge: 7890
- Registriert: Donnerstag 2. Juni 2016, 20:51
- Wohnort: Neustadt-Glewe
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Klar, das geht auch.
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ich hab noch ein bisschen weitergebastelt und herausgekommen ist ein Smart-Rührer .. ich kann den jetzt per App steuern
-
- Posting Freak
- Beiträge: 500
- Registriert: Samstag 9. September 2017, 13:08
- Wohnort: Ö - GU Süd
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Tolle Sachen baut ihr!
ich werde die Tage mal meine Kiste mit alten PC-Sachen (füllt sich seit den späten 80ern...) durchsuchen um auch was zu bauen.
weiß jemand wo ich Rührstäbe ohne 20€ Mindestbestellwert und Versand nach Österreich erwerben kann?
amaz.n ist viel zu teuer...https://www.amazon.de/dp/B01AW7ME7C/ref ... 88823&sr=1
LG
stefan
ich werde die Tage mal meine Kiste mit alten PC-Sachen (füllt sich seit den späten 80ern...) durchsuchen um auch was zu bauen.
weiß jemand wo ich Rührstäbe ohne 20€ Mindestbestellwert und Versand nach Österreich erwerben kann?
amaz.n ist viel zu teuer...https://www.amazon.de/dp/B01AW7ME7C/ref ... 88823&sr=1
LG
stefan
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Klasse Teil , bin begeistert!
Musste nachfragen , wieviel der Versand nach Osterlitsch kostet , bei Ebä gibt es einige , die die Magneten anbieten.
https://www.ebay.de/itm/5-X-POWER-NEODY ... 9#shpCntId
Musste nachfragen , wieviel der Versand nach Osterlitsch kostet , bei Ebä gibt es einige , die die Magneten anbieten.
https://www.ebay.de/itm/5-X-POWER-NEODY ... 9#shpCntId
Viele Menschen benutzen Informationen und Fakten wie ein Betrunkener einen Laternenpfahl :
Vor allem zur Stütze ihres Standpunktes und weniger zum Beleuchten eines Sachverhaltes.
Vor allem zur Stütze ihres Standpunktes und weniger zum Beleuchten eines Sachverhaltes.
-
- Posting Freak
- Beiträge: 500
- Registriert: Samstag 9. September 2017, 13:08
- Wohnort: Ö - GU Süd
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Magnete hab ich. Danke.Frudel hat geschrieben: ↑Montag 11. Februar 2019, 14:10 Klasse Teil , bin begeistert!
Musste nachfragen , wieviel der Versand nach Osterlitsch kostet , bei Ebä gibt es einige , die die Magneten anbieten.
https://www.ebay.de/itm/5-X-POWER-NEODY ... 9#shpCntId
Die RÜHRstäbe oder-fische brauch ich noch.
EDIT: hab mir grad da mal 3 Stück 30x7mm bestellt: https://www.ebay.de/itm/Magnetruhrstabc ... GTR=1#shId
sonst gibt es noch die klar erkennbaren Angebote aus China auf ebay.
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ich hab am Wochenende das Gehäuse vorbereitet. Da meine Möglichkeiten zur Bearbeitung von Holz, Kunststoff und Metall nicht so gut sind, sind die Schlitze für die Stecker und das Display nicht so gut geworden.
Mein Ätzgerät ist leider noch nicht eingetroffen, daher hab ich den Reset von Display per Quick&Dirty an nem freien Pin gelötet.
Heute sollten noch die Duo LEDs kommen, dann kann der Zustand auch von der „Ferne“ gesehen werden.
Es ist geplant rot, grün und grün blinkend zu verwenden. Für gelb hab ich noch keine Idee.
Heute Abend kommen ein paar Bilder. Mit dem Holzgehäuse kann ich bei weitem nicht mithalten.
Meine Smart-Funktionen werden sich auf Automatik und Fernsteurung über USB/RS232 TTL beschränken. Als nächstes muss ja ne Gärsteuerung her und da gibt’s dann nen ARM Cortex M mit Kaskade für Hutschienenmontage.
Gruß JackFrost
Mein Ätzgerät ist leider noch nicht eingetroffen, daher hab ich den Reset von Display per Quick&Dirty an nem freien Pin gelötet.
Heute sollten noch die Duo LEDs kommen, dann kann der Zustand auch von der „Ferne“ gesehen werden.
Es ist geplant rot, grün und grün blinkend zu verwenden. Für gelb hab ich noch keine Idee.
Heute Abend kommen ein paar Bilder. Mit dem Holzgehäuse kann ich bei weitem nicht mithalten.
Meine Smart-Funktionen werden sich auf Automatik und Fernsteurung über USB/RS232 TTL beschränken. Als nächstes muss ja ne Gärsteuerung her und da gibt’s dann nen ARM Cortex M mit Kaskade für Hutschienenmontage.
Gruß JackFrost
Meine Hardware:
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ja, das kann ich gerne machen. Allerdings wird das immer ein Bastelprojekt bleiben. Wer das nachbauen will sollte also schon halbwegs Sattelfest im Umgang mit Arduino und Raspberry Pi sein. Ich helfe da gerne so gut ich kann das ist aber per Ferndiagnose oft schwierig.
Jack, ich habe auch nicht so gute Möglichkeiten. So schwierig ist das nicht. Das Holz habe ich fertig zugeschnitten bestellt, die Glasscheibe auch. Etwas fummelig ist das rechteckige Loch (habe das mit eine Minifräse gemacht, geht aber auch sicher mit Laubsäge oder Dremel. Den 3D gedruckten Rahmen stelle ich gerne zur Verfügung). Für alles andere reicht ein Akkuschrauber.JackFrost hat geschrieben: ↑Montag 11. Februar 2019, 16:41 Da meine Möglichkeiten zur Bearbeitung von Holz, Kunststoff und Metall nicht so gut sind ... Mit dem Holzgehäuse kann ich bei weitem nicht mithalten.
Meine Smart-Funktionen werden sich auf Automatik und Fernsteurung über USB/RS232 TTL beschränken.
Die Smart Funktion mit App ist natürlich Spielerei. Den Raspberry Pi habe ich hauptsächlich eingebaut weil ich nicht mehr an den USB Stecker vom Arduino ran komme. Jetzt kann ich neue Software vom Raspberry Pi (via SSH) auf den Arduino spielen.
Gruß, Michael
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Die LEDs sind eigebaut.
So sieht die Steuerung eingebaut in mein Gehäuse aus :
Die Geschwindigkeit wird nun über einen gleitenden Mittelwert geglättet. Wenn die Zeit im Profil abgelaufen ist, dann blinkt die entsprechende LED mit 2 Hz grün.
Ich hab immer mal wieder Sprünge bei der gemessenen Geschwindigkeit. Da muss ich noch den Fehler noch finden.
Die nächste Stufe wird das GUI in die Bedienung über den Drehencoder.
Anbei noch ein Video https://youtu.be/siCe7xjCs0o
Gruß JackFrost
So sieht die Steuerung eingebaut in mein Gehäuse aus :
Die Geschwindigkeit wird nun über einen gleitenden Mittelwert geglättet. Wenn die Zeit im Profil abgelaufen ist, dann blinkt die entsprechende LED mit 2 Hz grün.
Ich hab immer mal wieder Sprünge bei der gemessenen Geschwindigkeit. Da muss ich noch den Fehler noch finden.
Die nächste Stufe wird das GUI in die Bedienung über den Drehencoder.
Anbei noch ein Video https://youtu.be/siCe7xjCs0o
Gruß JackFrost
Meine Hardware:
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
- murby81
- Posting Senior
- Beiträge: 430
- Registriert: Montag 8. Oktober 2018, 08:33
- Wohnort: Mittelfranken
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Hallo Zusammen,
ich bräucht mal eure Hilfe.
Und zwar hab ich mir auch einen Magnetrührer gebastelt. Nichts besonderes, soll einfach nur den Zweck erfüllen.
Ich hab nen 120mm Gehäuselüfter in eine 150mm ISO Abzweigdose rein. Magnet von einer Festplatte auf den Lüfter geklebt. Habe auf eine Steuerung verzichtet, da ich keine da hatte. Sonst hatte ich alle Sachen da und musste nichts kaufen. Wenn ich den Rührer jetzt anschalte, haut es mir immer den Rührfisch gleich nach außen im Erlenmeyer, so dass er sich nicht dreht.
Liegt es an der fehlenden Steuerung? Lüfter hat 1350 U/Min, ist das zuviel? Hab schon 5V und 12V getestet. Leider immer das selbe Ergebnis. Oder doch ein anderes Problem? Magnet zu groß oder falsch angebracht? (Mittig am Lüfterrad angebracht)
Besten Dank für eure Hilfe.
Gruß
Stefan
ich bräucht mal eure Hilfe.
Und zwar hab ich mir auch einen Magnetrührer gebastelt. Nichts besonderes, soll einfach nur den Zweck erfüllen.
Ich hab nen 120mm Gehäuselüfter in eine 150mm ISO Abzweigdose rein. Magnet von einer Festplatte auf den Lüfter geklebt. Habe auf eine Steuerung verzichtet, da ich keine da hatte. Sonst hatte ich alle Sachen da und musste nichts kaufen. Wenn ich den Rührer jetzt anschalte, haut es mir immer den Rührfisch gleich nach außen im Erlenmeyer, so dass er sich nicht dreht.
Liegt es an der fehlenden Steuerung? Lüfter hat 1350 U/Min, ist das zuviel? Hab schon 5V und 12V getestet. Leider immer das selbe Ergebnis. Oder doch ein anderes Problem? Magnet zu groß oder falsch angebracht? (Mittig am Lüfterrad angebracht)
Besten Dank für eure Hilfe.
Gruß
Stefan
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Poste bitte mal ein Bild von dem Lüfter mit montiertem Magneten. Hast du versucht beide Magneten von der Platte zu verwenden ? Einen mit N nach oben den anderen mit S ?
Gruß JackFrost
Gruß JackFrost
Meine Hardware:
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
- DerDerDasBierBraut
- Posting Freak
- Beiträge: 7890
- Registriert: Donnerstag 2. Juni 2016, 20:51
- Wohnort: Neustadt-Glewe
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Mit einem Magneten wedelt der Rührfisch wie ein Fuchsschwanz. Das kann nicht funktionieren!murby81 hat geschrieben: ↑Dienstag 12. Februar 2019, 20:14 Liegt es an der fehlenden Steuerung? Lüfter hat 1350 U/Min, ist das zuviel? Hab schon 5V und 12V getestet. Leider immer das selbe Ergebnis. Oder doch ein anderes Problem? Magnet zu groß oder falsch angebracht? (Mittig am Lüfterrad angebracht)
Schroll nach oben. Hier sind Problem, Ursache und Lösung erklärt. : https://hobbybrauer.de/forum/viewtopic. ... 75#p268175
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
- murby81
- Posting Senior
- Beiträge: 430
- Registriert: Montag 8. Oktober 2018, 08:33
- Wohnort: Mittelfranken
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ah OK, danke. Also war der HDD Magnet nicht optimal. Dann such ich mal das Haus nach zwei kleineren ab.
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Es geht voran, ich habe jetzt alle Funktionen eingebaut. Also Boost und Fische fangen. Das ganze hat jetzt ein Menu in dem man die verschiedenen Sachen einstellen kann. Alles ist immer noch mit einem einzigen Knopf einstellbar .. das gefällt mir sehr gut:
Alle Einstellungen werden gespeichert und sind nach Stromausfall wieder da. Alle Einstellungen kann man unabhängig für jeden Rührer machen.
Das Menu hat 5 Punkte, durch einfaches drücken kann man zwischen Menu, Rührer 1 und Rührer 2 wechselen.
Geschwindigkeit einstellen
Boost aktivieren und einstellen (drehen zum Geschwindigkeit einstellen, lang drücken zum starten). Das Sternchen zeigt an das der Boost Modus für den Rührer aktiv ist
Boost Zeit einstellen (in Minuten)
Catch aktivieren. CAT zeigt an das der Rührer grade Fische fängt.
Catch intervall einstellen (in Minuten)
Die Sourcen dazu poste ich in ein paar Tagen (reifen lassen).
Gruß, Michael
Alle Einstellungen werden gespeichert und sind nach Stromausfall wieder da. Alle Einstellungen kann man unabhängig für jeden Rührer machen.
Das Menu hat 5 Punkte, durch einfaches drücken kann man zwischen Menu, Rührer 1 und Rührer 2 wechselen.
Geschwindigkeit einstellen
Boost aktivieren und einstellen (drehen zum Geschwindigkeit einstellen, lang drücken zum starten). Das Sternchen zeigt an das der Boost Modus für den Rührer aktiv ist
Boost Zeit einstellen (in Minuten)
Catch aktivieren. CAT zeigt an das der Rührer grade Fische fängt.
Catch intervall einstellen (in Minuten)
Die Sourcen dazu poste ich in ein paar Tagen (reifen lassen).
Gruß, Michael
- glassart
- Posting Freak
- Beiträge: 1703
- Registriert: Mittwoch 1. Juli 2015, 11:50
- Wohnort: Gunskirchen OÖ
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
jetzt fehlt "nur" noch die Heizung und das 1.3 OLED ( ich drucke gerade OLED-Einbaurahmen für 2,3,4 -fach OLED´s )
Super da freue ich mich schon auf das Ende der Reifezeit
lg Herbert
Super da freue ich mich schon auf das Ende der Reifezeit
lg Herbert
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Hier wie versprochen die Sourcen zu meiner Lüftersteuerung. Die Kommentare sollten ausreichen um den Arduino richtig anzuschließen. Das ganze ist angepasst an einen Arduino Leonardo oder einen Pro Micro. Ich verwende die BeQuiet Lüfter mit 1000 Umdrehungen. Der Drehschalter ist ein KY-040 und das Display ein 1602 LCD. Für andere Komponenten muss der Quelltext eventuell angepasst werden.
Schaltplan:
https://easyeda.com/micwes/stir
Quelltext:
Funktionsübersicht:
Display Anzeigen:
Unten Links: Menu
Unten Mitte/Rechts: Zeigt je nach gewähltem Menupunkt die eingestellten Werte für die Rührer an.
Oben Mitte/Rechts: Zeigt die aktuelle Drehzahl der Rührer an (oder 'OFF' oder 'CAT' (Fischfang))
Oben Links: zeigt die noch verbleibende Zeit der Boostfunktion an.
Schaltplan:
https://easyeda.com/micwes/stir
Quelltext:
Code: Alles auswählen
/////////////////////////////////////////////////////////////////////////////// Stir Control (mwx'2019, v1.2.1)
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#define SX Serial.print
#define SXN Serial.println
#define MS (long)millis()
int SPEEDINC = 50; // speed increment
int FANMIN = 200; // fan minimum speed
int FANMAX = 1000; // fan maximum speed
int RINTERVAL = 3000; // regulation interval
int RDELAY = 2000; // regulation delay on changes
int CATCHSTOP = 20000; // catch stop period
int PWM0 = 9; // PWM pin for 1. fan
int PWM1 = 10; // PWM pin for 2. fan
int I0 = 2; // interrupt pin for 1. fan rpm signal
int I1 = 3; // interrupt pin for 2. fan rpm signal
int CLK = 5; // clk on KY-040 encoder
int DT = 6; // dt on KY-040 encoder
int SW = 4; // sw on KY-040 encoder
int SAVETAG = 1004; // save tag
LiquidCrystal_I2C lcd(0x27,16,2); // LCD display (connect to SDA/SCL)
int v0,b0,r0,v1,b1,r1,r,fanstate0,fanstate1; // speed and regulation
long rpmcount0,rpmcount1; // rpm counter
double rpm0,rpm1; // rpm
long speedts,dt,rts,swts,bts,ox,savets,catchts0,catchts1,stop0,stop1,b0ts,b1ts; // timing
int bdelay,bprocess,enclast,encval,swmode; // button processing
char form[8],out[32],M[8];String str; // string buffer
int OK,SAVE,LOCK,bstate0,bstate1,btime0,btime1,catch0,catch1,ctime0,ctime1,mode;
void setup() { ////////////////////////////////////////////////////////////////////////////////////////// SETUP
rpmcount0=0;rpmcount1=0;rpm0=0;rpm1=0;bprocess=0;speedts=0;r0=0;r1=0;swmode=2;
Serial.begin(9600); // start serial
lcd.init();lcd.backlight();lcd.clear(); // initialize lcd
attachInterrupt(I0,rpmint0,FALLING); // setup interrupts vor rpm in
attachInterrupt(I1,rpmint1,FALLING);
TCCR1A=0;TCCR1B=0;TCNT1=0; // setup timer for 25 kHz PWM
TCCR1A = _BV(COM1A1) // non-inverted PWM on ch. A
| _BV(COM1B1) // same on ch; B
| _BV(WGM11); // mode 10: ph. correct PWM, TOP=ICR1
TCCR1B = _BV(WGM13) // ditto
| _BV(CS10); // prescaler=1
ICR1 = 320; // TOP=320
SAVE=0; // load/initialize settings
if (eer(0)!=SAVETAG) {
v0=300;v1=300;b0=700;b1=700;btime0=30;btime1=30;catch0=0;catch1=0;ctime0=120;ctime1=120;
eew(0,SAVETAG);
save();
} else {
v0=eer(1);v1=eer(2);b0=eer(3);b1=eer(4);btime0=eer(5);btime1=eer(6);
catch0=eer(7);catch1=eer(8);ctime0=eer(9);ctime1=eer(10);
}
pinMode(PWM0,OUTPUT);pinMode(PWM1,OUTPUT); // set pin modes
pinMode(CLK,INPUT);pinMode(DT,INPUT);pinMode(SW,INPUT);
enclast=digitalRead(CLK); // get encoder state
fanstate0=0;fanstate1=0;OCR1A=0;OCR1B=0; // turn fans off
rts=MS;swts=MS;bts=MS;savets=MS;catchts0=MS;catchts1=MS;stop0=MS;stop1=MS; // set timer
lcd.clear(); // clear display, start running
bstate0=0;bstate1=0;mode=0;updatelcd();updatespeed();updatemarker();LOCK=0; // set initial states
}
void loop() { //////////////////////////////////////////////////////////////////////////////////////////// LOOP
if (SAVE>0 && MS-savets>60000) {;save();SAVE=0;savets=MS;} ////////////////////////// save settings if needed
if (catch0 && MS-catchts0>(long)ctime0*60000) { ////////////////////////////////////// check catch fish state
catchts0=MS;stop0=MS+CATCHSTOP;
updatePWM();
}
if (catch1 && MS-catchts1>(long)ctime1*60000) {
catchts1=MS;stop1=MS+CATCHSTOP;
updatePWM();
}
if (bstate0 && MS-b0ts>(long)btime0*60000) {;bstate0=0;updatelcd();} ////////////////////// check boost state
if (bstate1 && MS-b1ts>(long)btime0*60000) {;bstate1=0;updatelcd();}
if (Serial.available() > 0) { ////////////////////////////////////////////////////////// serial communication
str=Serial.readString();OK=0;
if (str=="info") {;serinfo();OK=1;} // info
if (str.substring(0,5)=="speed") { // speed <fan0> <fan1>
v0=sstr(str,':',1).toInt();
v1=sstr(str,':',2).toInt();
updatePWM();r0=0;r1=0;rts=MS+RDELAY;
SAVE++;OK=1;updatelcd();serinfo();
}
if (str.substring(0,6)=="bspeed") { // bspeed <fan0> <fan1>
b0=sstr(str,':',1).toInt();
b1=sstr(str,':',2).toInt();
updatePWM();r0=0;r1=0;rts=MS+RDELAY;
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,2)=="on") { // on <fan0> <fan1> (value: 0 or 1)
if (sstr(str,':',1).toInt()==1) {;fanstate0=1;r0=0;} else fanstate0=0;
if (sstr(str,':',2).toInt()==1) {;fanstate1=1;r1=0;} else fanstate1=0;
updatePWM();rts=MS+RDELAY;
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,5)=="boost") { // boost <fan0> <fan1> (value: 0 or 1)
if (sstr(str,':',1).toInt()==1) {;rts=MS+RDELAY;bstate0=1;b0ts=MS;} else {;bstate0=0;}
if (sstr(str,':',2).toInt()==1) {;rts=MS+RDELAY;bstate1=1;b1ts=MS;} else {;bstate1=0;}
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,5)=="catch") { // catch <fan0> <fan1> (value: 0 or 1)
if (sstr(str,':',1).toInt()==1) {;catch0=1;catchts0=MS;} else {;catch0=0;}
if (sstr(str,':',2).toInt()==1) {;catch1=1;catchts1=MS;} else {;catch1=0;}
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,5)=="btime") { // btime <fan0> <fan1> (value: 0-60)
btime0=sstr(str,':',1).toInt();if (btime0<0) btime0=0;if (btime0>60) btime0=60;
btime1=sstr(str,':',2).toInt();if (btime1<0) btime1=0;if (btime1>60) btime1=60;
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,5)=="ctime") { // ctime <fan0> <fan1> (value: 60-240)
ctime0=sstr(str,':',1).toInt();if (ctime0<60) ctime0=60;if (ctime0>240) ctime0=240;
ctime1=sstr(str,':',2).toInt();if (ctime1<60) ctime1=60;if (ctime1>240) ctime1=240;
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (!OK) SXN("ERROR");
}
if (MS-rts>RINTERVAL) { ////////////////////////////////////////////////////////////////////////// regulation
rpm0=rpmcount0/2/((MS-speedts)/1000.0)*60.0;
rpm1=rpmcount1/2/((MS-speedts)/1000.0)*60.0;
speedts=MS;rpmcount0=0;rpmcount1=0;
if (abs(v0-rpm0)>8) {
ox=1;if (abs(v0-rpm0)>20) ox=3;if (abs(v0-rpm0)>50) ox=5;
if (bstate0) r=b0; else r=v0;
if (r>rpm0) {;r0+=ox;if (r0>40) r0=40;}
if (r<rpm0) {;r0-=ox;if (r0<-40) r0=-40;}
}
if (abs(v1-rpm1)>8) {
ox=1;if (abs(v1-rpm1)>20) ox=3;if (abs(v1-rpm1)>50) ox=5;
if (bstate1) r=b1; else r=v1;
if (r>rpm1) {;r1+=ox;if (r1>40) r1=40;}
if (r<rpm1) {;r1-=ox;if (r1<-40) r1=-40;}
}
if (!fanstate0) r0=0;
if (!fanstate1) r1=0;
updatePWM();updatespeed();rts=MS;
}
bdelay=0; //////////////////////////////////////////////////////////////////////////////////// process switch
if (!bprocess) {
while (!digitalRead(SW)){
bdelay++;
delay(25);
bprocess=1;
if (bdelay>20) break;
}
}
if (bdelay>0 && MS-bts>100) { // long button press
if (bdelay>20) {
if (swmode==0 && mode==0 && !LOCK) { // fan 0 on/off
if (fanstate0==0) {;rts=MS+RDELAY;fanstate0=1;r0=0;updatePWM();}
else {;fanstate0=0;}
updatespeed();
}
if (swmode==1 && mode==0 && !LOCK) { // fan 1 on/off
if (fanstate1==0) {;rts=MS+RDELAY;fanstate1=1;r1=0;updatePWM();}
else {;fanstate1=0;}
updatespeed();
}
if (swmode==0 && mode==1 && !LOCK) { // boost 0 on/off
if (bstate0==0) {
rts=MS+RDELAY;bstate0=1;b0ts=MS;updatePWM();
} else {;bstate0=0;}
updatespeed();
}
if (swmode==1 && mode==1 && !LOCK) { // boost 1 on/off
if (bstate1==0) {
rts=MS+RDELAY;bstate1=1;b1ts=MS;updatePWM();
} else {;bstate1=0;}
updatespeed();
}
if (swmode==2) { // lock/unlock
if (LOCK==0) LOCK=1;
else LOCK=0;
updatemarker();
}
bdelay=0;
} else if (bdelay>0 && bdelay<20 && !LOCK) { // short button press: switch menu -> fan 0 -> fan 1
swmode++;if (swmode>2) swmode=0;
updatemarker();
bdelay=0;
}
bts=MS;
}
if (digitalRead(SW)) bprocess=0;
encval = digitalRead(CLK); ////////////////////////////////////////////////////////////////// process encoder
if (encval != enclast && !LOCK) {
if(!encval){
if (digitalRead(DT) != encval) { // cw
if (swmode==0 && mode==0) v0+=SPEEDINC; // fan 0 speed up
if (swmode==1 && mode==0) v1+=SPEEDINC; // fan 1 speed up
if (swmode==0 && mode==1) b0+=SPEEDINC; // boost 0 speed up
if (swmode==1 && mode==1) b1+=SPEEDINC; // boost 1 speed up
if (swmode==0 && mode==2) btime0++; // boost time 0 up
if (swmode==1 && mode==2) btime1++; // boost time 1 up
if (swmode==0 && mode==3) catch0++; // catch 0 on/off
if (swmode==1 && mode==3) catch1++; // catch 1 on/off
if (swmode==0 && mode==4) ctime0+=10; // catch time 0 up
if (swmode==1 && mode==4) ctime1+=10; // catch time 1 up
if (swmode==2) mode++;
} else { // ccw
if (swmode==0 && mode==0) v0-=SPEEDINC; // fan 0 speed down
if (swmode==1 && mode==0) v1-=SPEEDINC; // fan 1 speed down
if (swmode==0 && mode==1) b0-=SPEEDINC; // boost 0 speed down
if (swmode==1 && mode==1) b1-=SPEEDINC; // boost 1 speed down
if (swmode==0 && mode==2) btime0--; // boost time 0 down
if (swmode==1 && mode==2) btime1--; // boost time 1 down
if (swmode==0 && mode==3) catch0--; // catch 0 on/off
if (swmode==1 && mode==3) catch1--; // catch 1 on/off
if (swmode==0 && mode==4) ctime0-=10; // catch time 0 down
if (swmode==1 && mode==4) ctime1-=10; // catch time 1 down
if (swmode==2) mode--;
}
if (swmode==0 && mode==0) {;updatePWM();r0=0;rts=MS+RDELAY;} // apply speed change 0
if (swmode==1 && mode==0) {;updatePWM();r1=0;rts=MS+RDELAY;} // apply speed change 1
if (swmode==0 && mode==1) {;updatePWM();r0=0;rts=MS+RDELAY;} // apply boost speed change 0
if (swmode==1 && mode==1) {;updatePWM();r1=0;rts=MS+RDELAY;} // apply boost speed change 1
if (swmode==0 && mode==2) {;if (btime0<0) btime0=0;if (btime0>60) btime0=60;} // check boost time 0
if (swmode==1 && mode==2) {;if (btime1<0) btime1=0;if (btime1>60) btime1=60;} // check boost time 1
if (swmode==0 && mode==3) {;if (catch0<0) catch0=1;if (catch0>1) catch0=0;catchts0=MS;} // check catch 0
if (swmode==1 && mode==3) {;if (catch1<0) catch1=0;if (catch1>1) catch1=0;catchts1=MS;} // check catch 1
if (swmode==0 && mode==4) {;if (ctime0<60) ctime0=60;if (ctime0>240) ctime0=240;} // check boost time 0
if (swmode==1 && mode==4) {;if (ctime1<60) ctime1=60;if (ctime1>240) ctime1=240;} // check boost time 1
if (swmode==2) {;if (mode<0) mode=4;if (mode>4) mode=0;} // check menu mode
SAVE++;updatelcd();delay(50);
}
}
enclast=encval;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////// SUPPORT
void updatelcd() { ///////////////////////////////////////////////////////////////////////////////// update LCD
if (mode==0) {
slcd(1,1,5,"SPEED");
ilcd(7,1,-4,int(v0));
ilcd(12,1,-4,int(v1));
}
if (mode==1) {
slcd(1,1,5,"BOOST");
ilcd(7,1,-4,int(b0));
ilcd(12,1,-4,int(b1));
}
if (mode==2) {
slcd(1,1,5,"BTIME");
ilcd(7,1,-4,int(btime0));ilcd(12,1,-4,int(btime1));
}
if (mode==3) {
slcd(1,1,5,"CATCH");
if (catch0==0) slcd(7,1,-4,"OFF");
else slcd(7,1,-3,"ON");
if (catch1==0) slcd(12,1,-4,"OFF");
else slcd(12,1,-3,"ON");
}
if (mode==4) {
slcd(1,1,5,"CTIME");
ilcd(7,1,-4,int(ctime0));ilcd(12,1,-4,int(ctime1));
}
}
void updatemarker() { /////////////////////////////////////////////////////////////////// update current marker
slcd(0,1,1," ");
slcd(6,1,1," ");
slcd(11,1,1," ");
if (!LOCK) {
if (swmode==0) slcd(6,1,1,">");
if (swmode==1) slcd(11,1,1,">");
if (swmode==2) slcd(0,1,1,">");
}
}
void updatespeed() { ///////////////////////////////////////////////////////////////////////// update fan speed
slcd(1,0,5," ");
if (fanstate0) {
if (MS<stop0) {
slcd(7,0,-4,"CAT");
} else {
if (bstate0) {
ilcd(1,0,2, (((long)btime0*60000)-(MS-(long)b0ts))/1000/60+1);
} else slcd(7,0,1," ");
ilcd(7,0,-4,round(rpm0/5.0)*5);
}
}
else slcd(7,0,-4,"OFF");
if (fanstate1) {
if (MS<stop1) {
slcd(12,0,-4,"CAT");
} else {
if (bstate1) {
ilcd(4,0,2, (((long)btime1*60000)-(MS-(long)b1ts))/1000/60+1);
} else slcd(12,0,1," ");
ilcd(12,0,-4,round(rpm1/5.0)*5);
}
}
else slcd(12,0,-4,"OFF");
}
void serinfo() { /////////////////////////////////////////////////////////////////////////// serial info output
SX(fanstate0);SX(":");SX((int)(v0));SX(":");SX((int)(b0));SX(":");
SX(fanstate1);SX(":");SX((int)(v1));SX(":");SX((int)(b1));SX(":");
SX(rpm0);SX(":");SX(rpm1);SX(":");SX(r0);SX(":");SX(r1);SX(":");
SX(bstate0);SX(":");SX(bstate1);SX(":");SX(btime0);SX(":");SX(btime1);SX(":");
SX(catch0);SX(":");SX(catch1);SX(":");SX(ctime0);SX(":");SX(ctime1);SXN("");
}
void ilcd(int x,int y, int l,int v) { //////////////////////////////////////////////////// write integer to LCD
sprintf(form,"%%%dd",l);
sprintf(out,form,v);
lcd.setCursor(x,y);lcd.print(out);
}
void slcd(int x,int y, int l,String s) { ////////////////////////////////////////////////// write string to LCD
sprintf(form,"%%%ds",l);
sprintf(out,form,s.c_str());
lcd.setCursor(x,y);lcd.print(out);
}
void updatePWM() { ///////////////////////////////////////////////////////////////////// update PWM (fan speed)
if (v0<FANMIN) v0=FANMIN;if (v0>FANMAX) v0=FANMAX;
if (v1<FANMIN) v1=FANMIN;if (v1>FANMAX) v1=FANMAX;
if (b0<FANMIN) b0=FANMIN;if (b0>FANMAX) b0=FANMAX;
if (b1<FANMIN) b1=FANMIN;if (b1>FANMAX) b1=FANMAX;
double v;
if (fanstate0) {
if (MS<stop0) {
OCR1A=0;
} else {
if (bstate0) {
v=b0/(FANMAX/320.0)+r0;if (v<0) v=0;if (v>320) v=320;
OCR1A=v;
} else {
v=v0/(FANMAX/320.0)+r0;if (v<0) v=0;if (v>320) v=320;
OCR1A=v;
}
}
} else OCR1A=0;
if (fanstate1) {
if (MS<stop1) {
OCR1B=0;
} else {
if (bstate1) {
v=b1/(FANMAX/320.0)+r1;if (v<0) v=0;if (v>320) v=320;
OCR1B=v;
} else {
v=v1/(FANMAX/320.0)+r1;if (v<0) v=0;if (v>320) v=320;
OCR1B=v;
}
}
} else OCR1B=0;
}
void rpmint0() {;rpmcount0++;} ///////////////////////////////////////////////////////////////// rpm interrupts
void rpmint1() {;rpmcount1++;}
int eer(int adr) {;return EEPROM.read(adr*2)+EEPROM.read(adr*2+1)*256;} /////////////////////////// read EEPROM
void eew(int adr, int val) {;EEPROM.write(adr*2,val%256);EEPROM.write(adr*2+1,val/256);} /////// save to EEPROM
void save() { /////////////////////////////////////////////////////////////////////////////////// save settings
eew(1,v0);eew(2,v1);eew(3,b0);eew(4,b1);eew(5,btime0);eew(6,btime1);
eew(7,catch0);eew(8,catch1);eew(9,ctime0);eew(10,ctime1);
}
String sstr(String data, char separator, int index) { ///////////////////////////////// get seperated substring
int found=0;
int si[]={0,-1};
int mi=data.length()-1;
for (int i=0; i<=mi && found<=index; i++) {
if (data.charAt(i) == separator || i == mi) {
found++;si[0]=si[1]+1;si[1]=(i==mi) ? i+1 : i;
}
}
return found > index ? data.substring(si[0], si[1]) : "";
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////// END
Funktionsübersicht:
- Kurz drücken: wechseln zwischen Menu, Rührer1 und Rührer2
- Drehen wenn Menu ausgewählt ist: wechseln zwischen den Menu Punkten (SPEED, BOOST, BTIME, CATCH, CTIME)
- Lange drücken wenn Menu ausgewählt ist: Alle Funktionen sperren (entsperren ebenfalls durch langes drücken)
- Wenn ein Rührer aus gewählt ist:
- SPEED: drehen stellt Geschwindigkeit ein, lange drücken schaltet Rührer ein bzw. aus.
- BOOST: drehen stellt Boost Geschwindigkeit ein, lange drücken aktiviert/deaktiviert die Boost Funktion (Laufzeit wird im Display angezeigt).
- BTIME: drehen stellt die Boost Zeit in Minuten ein
- CATCH: drehen aktiviert/deaktiviert die Fischfang Funktion
- CTIME: drehen stellt den Interwall in Minuten für die Fishfang Funktion ein
Display Anzeigen:
Unten Links: Menu
Unten Mitte/Rechts: Zeigt je nach gewähltem Menupunkt die eingestellten Werte für die Rührer an.
Oben Mitte/Rechts: Zeigt die aktuelle Drehzahl der Rührer an (oder 'OFF' oder 'CAT' (Fischfang))
Oben Links: zeigt die noch verbleibende Zeit der Boostfunktion an.
Zuletzt geändert von mwx am Montag 18. Februar 2019, 07:28, insgesamt 4-mal geändert.
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Schaltplan hinzugefügt
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ich hab meine Steuerung nun so fertig , das der Standardautomatikmodus, der Handmodus und das verstellen eines Profiles für jeweils die linke und rechte Seite geht.
Im Menu können nun das Profil für die linke und rechte Seite temporär geändert werden. Wenn im Automatikmodus gestoppt wird, bleibt die verstrichene Zeit erhalten. Erst mit einem Reset des geladenen Porfiles wird es auf die aktuellen Werte gestellt.
Aktuell läuft der Magnetrüher mit der langsamen Geschwindigkeit weiter wenn die Gesamtezeit verstrichen ist.
Ich hatte noch eine Störeintrahlung bei der Drehzahlmessung, daher musst ich mit der Hand ein paar Kondensatoren einlöten, das werde ich bei der Rev. 2 beheben.
Die gemessene Drehzahl wird über einen gleitenden Durchschnitt mit 16 Werten geglättet.
Ich kann derzeit Drehzahlen von 400UpM bis maximale Drehzahl regeln. Aus dem Stand sind Drehzahlen < 400 UpM schwierig, da muss ich an der Regelung noch ein paar Sachen verbessern.
USB, Fernsteuerung und der Bootloader sind noch nicht fertig.
Morgen werde ich mal den "Betatest" mit einer W164 machen. Für meine größeren Gefässe werde ich mir noch ein 15V Netzteil besorgen.
Hier ist noch ein Link zu einem Video in dem man die Menus usw sieht https://youtu.be/QRJ7w1K40rU
Gruß JackFrost
Im Menu können nun das Profil für die linke und rechte Seite temporär geändert werden. Wenn im Automatikmodus gestoppt wird, bleibt die verstrichene Zeit erhalten. Erst mit einem Reset des geladenen Porfiles wird es auf die aktuellen Werte gestellt.
Aktuell läuft der Magnetrüher mit der langsamen Geschwindigkeit weiter wenn die Gesamtezeit verstrichen ist.
Ich hatte noch eine Störeintrahlung bei der Drehzahlmessung, daher musst ich mit der Hand ein paar Kondensatoren einlöten, das werde ich bei der Rev. 2 beheben.
Die gemessene Drehzahl wird über einen gleitenden Durchschnitt mit 16 Werten geglättet.
Ich kann derzeit Drehzahlen von 400UpM bis maximale Drehzahl regeln. Aus dem Stand sind Drehzahlen < 400 UpM schwierig, da muss ich an der Regelung noch ein paar Sachen verbessern.
USB, Fernsteuerung und der Bootloader sind noch nicht fertig.
Morgen werde ich mal den "Betatest" mit einer W164 machen. Für meine größeren Gefässe werde ich mir noch ein 15V Netzteil besorgen.
Hier ist noch ein Link zu einem Video in dem man die Menus usw sieht https://youtu.be/QRJ7w1K40rU
Gruß JackFrost
Meine Hardware:
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ich habe die Software oben geupdatet. Sie läßt sich nun sehr einfach für beliebige Lüfter anpassen.
- flensdorfer
- Posting Freak
- Beiträge: 695
- Registriert: Freitag 5. Februar 2016, 09:26
- Wohnort: Flensburg
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Günstige Bezugsquelle für die Magnete? magnet-shop.net nimmt den Warenwert nochmal als Versandkosten... Oder hat jemand ein paar 20x10x5 rumliegen?
Gruß, Arne
Anfänger in der 20l-Klasse
Anfänger in der 20l-Klasse
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Für alle, die auch kleinere Lüfter verwenden, hier noch die angepasste Version von Michaels Magnethalter.
Neben dem Durchmesser (fw), habe ich auch Zeile 30 angepasst. Zur Dokumentation habe ich den Originalcode als Kommentar stehen gelassen.
Da der Drucker vom Arbeitskollegen nicht ordentlich kallibriert war, muss der Durchmesser eventuell noch minimal verkleinert werden. Bei mir sitzt das Teil ordentlich auf dem Lüfter, aber die Vertiefungen für die Magnete waren um über 0,5mm zu schmal. Da musste ich nachschleifen. Da ich selber keinen 3D-Drucker habe, kann ich das aktuell nicht selber machen.
Neben dem Durchmesser (fw), habe ich auch Zeile 30 angepasst. Zur Dokumentation habe ich den Originalcode als Kommentar stehen gelassen.
Da der Drucker vom Arbeitskollegen nicht ordentlich kallibriert war, muss der Durchmesser eventuell noch minimal verkleinert werden. Bei mir sitzt das Teil ordentlich auf dem Lüfter, aber die Vertiefungen für die Magnete waren um über 0,5mm zu schmal. Da musste ich nachschleifen. Da ich selber keinen 3D-Drucker habe, kann ich das aktuell nicht selber machen.
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Kann den Beitrag oben nicht mehr ändern, also hier das nächste Update mit nur kleinen Verbesserungen (danke@Herbert).
Noch ein Hinweis für die die einen Arduino UNO verwenden möchten: Der hat auf Pin 0 und 1 keine Interrupts sondern nur auf Pin 2 und 3 also bitte dort anschließen. Im Quelltext müssen dann die Interrupts noch auf 0 und 1 geändert werden. Das ist verwirrend weil genau umgekehrt :)
Gruß, Michael
Noch ein Hinweis für die die einen Arduino UNO verwenden möchten: Der hat auf Pin 0 und 1 keine Interrupts sondern nur auf Pin 2 und 3 also bitte dort anschließen. Im Quelltext müssen dann die Interrupts noch auf 0 und 1 geändert werden. Das ist verwirrend weil genau umgekehrt :)
Gruß, Michael
Code: Alles auswählen
/////////////////////////////////////////////////////////////////////////////// Stir Control (mwx'2019, v1.2.4)
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#define SX Serial.print
#define SXN Serial.println
#define MS (long)millis()
int SPEEDINC = 50; // speed increment
int FANMIN = 200; // fan minimum speed
int FANMAX = 1000; // fan maximum speed
int RINTERVAL = 3000; // regulation interval
int RDELAY = 2000; // regulation delay on changes
int CATCHSTOP = 20000; // catch stop period
int PWM0 = 9; // PWM pin for 1. fan
int PWM1 = 10; // PWM pin for 2. fan
int I0 = 2; // interrupt for 1. fan rpm signal
int I1 = 3; // interrupt for 2. fan rpm signal
int CLK = 5; // clk on KY-040 encoder
int DT = 6; // dt on KY-040 encoder
int SW = 4; // sw on KY-040 encoder
int SAVETAG = 1004; // save tag
LiquidCrystal_I2C lcd(0x27,16,2); // LCD display (connect to SDA/SCL)
int v0,b0,r0,v1,b1,r1,r,fanstate0,fanstate1; // speed and regulation
long rpmcount0,rpmcount1; // rpm counter
double rpm0,rpm1; // rpm
long speedts,dt,rts,swts,bts,ox,savets,catchts0,catchts1,stop0,stop1,b0ts,b1ts; // timing
int bdelay,bprocess,enclast,encval,swmode; // button processing
char form[8],out[32],M[8];String str; // string buffer
int OK,SAVE,LOCK,bstate0,bstate1,btime0,btime1,catch0,catch1,ctime0,ctime1,mode;
void setup() { ////////////////////////////////////////////////////////////////////////////////////////// SETUP
rpmcount0=0;rpmcount1=0;rpm0=0;rpm1=0;bprocess=0;speedts=0;r0=0;r1=0;swmode=2;
Serial.begin(9600); // start serial
lcd.init();lcd.backlight();lcd.clear(); // initialize lcd
attachInterrupt(I0,rpmint0,FALLING); // setup interrupts vor rpm in
attachInterrupt(I1,rpmint1,FALLING);
TCCR1A=0;TCCR1B=0;TCNT1=0; // setup timer for 25 kHz PWM
TCCR1A = _BV(COM1A1) // non-inverted PWM on ch. A
| _BV(COM1B1) // same on ch; B
| _BV(WGM11); // mode 10: ph. correct PWM, TOP=ICR1
TCCR1B = _BV(WGM13) // ditto
| _BV(CS10); // prescaler=1
ICR1 = 320; // TOP=320
SAVE=0; // load/initialize settings
if (eer(0)!=SAVETAG) {
v0=300;v1=300;b0=700;b1=700;btime0=30;btime1=30;catch0=0;catch1=0;ctime0=120;ctime1=120;
eew(0,SAVETAG);
save();
} else {
v0=eer(1);v1=eer(2);b0=eer(3);b1=eer(4);btime0=eer(5);btime1=eer(6);
catch0=eer(7);catch1=eer(8);ctime0=eer(9);ctime1=eer(10);
}
pinMode(PWM0,OUTPUT);pinMode(PWM1,OUTPUT); // set pin modes
pinMode(CLK,INPUT);pinMode(DT,INPUT);pinMode(SW,INPUT);
enclast=digitalRead(CLK); // get encoder state
fanstate0=0;fanstate1=0;OCR1A=0;OCR1B=0; // turn fans off
rts=MS;swts=MS;bts=MS;savets=MS;catchts0=MS;catchts1=MS;stop0=MS;stop1=MS; // set timer
bstate0=0;bstate1=0;mode=0;updatelcd();updatespeed();updatemarker();LOCK=0; // set initial states
}
void loop() { //////////////////////////////////////////////////////////////////////////////////////////// LOOP
if (SAVE>0 && MS-savets>60000) {;save();SAVE=0;savets=MS;} ////////////////////////// save settings if needed
if (catch0 && MS-catchts0>(long)ctime0*60000) { ////////////////////////////////////// check catch fish state
catchts0=MS;stop0=MS+CATCHSTOP;
updatePWM();
}
if (catch1 && MS-catchts1>(long)ctime1*60000) {
catchts1=MS;stop1=MS+CATCHSTOP;
updatePWM();
}
if (bstate0 && MS-b0ts>(long)btime0*60000) {;bstate0=0;mode=0;updatelcd();} /////////////// check boost state
if (bstate1 && MS-b1ts>(long)btime1*60000) {;bstate1=0;mode=0;updatelcd();}
if (Serial.available() > 0) { ////////////////////////////////////////////////////////// serial communication
str=Serial.readString();OK=0;
if (str=="info") {;serinfo();OK=1;} // info
if (str.substring(0,5)=="speed") { // speed <fan0> <fan1>
v0=sstr(str,':',1).toInt();
v1=sstr(str,':',2).toInt();
updatePWM();r0=0;r1=0;rts=MS+RDELAY;
SAVE++;OK=1;updatelcd();serinfo();
}
if (str.substring(0,6)=="bspeed") { // bspeed <fan0> <fan1>
b0=sstr(str,':',1).toInt();
b1=sstr(str,':',2).toInt();
updatePWM();r0=0;r1=0;rts=MS+RDELAY;
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,2)=="on") { // on <fan0> <fan1> (value: 0 or 1)
if (sstr(str,':',1).toInt()==1) {;fanstate0=1;r0=0;} else fanstate0=0;
if (sstr(str,':',2).toInt()==1) {;fanstate1=1;r1=0;} else fanstate1=0;
updatePWM();rts=MS+RDELAY;
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,5)=="boost") { // boost <fan0> <fan1> (value: 0 or 1)
if (sstr(str,':',1).toInt()==1) {;rts=MS+RDELAY;bstate0=1;b0ts=MS;} else {;bstate0=0;}
if (sstr(str,':',2).toInt()==1) {;rts=MS+RDELAY;bstate1=1;b1ts=MS;} else {;bstate1=0;}
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,5)=="catch") { // catch <fan0> <fan1> (value: 0 or 1)
if (sstr(str,':',1).toInt()==1) {;catch0=1;catchts0=MS;} else {;catch0=0;}
if (sstr(str,':',2).toInt()==1) {;catch1=1;catchts1=MS;} else {;catch1=0;}
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,5)=="btime") { // btime <fan0> <fan1> (value: 0-60)
btime0=sstr(str,':',1).toInt();if (btime0<0) btime0=0;if (btime0>60) btime0=60;
btime1=sstr(str,':',2).toInt();if (btime1<0) btime1=0;if (btime1>60) btime1=60;
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (str.substring(0,5)=="ctime") { // ctime <fan0> <fan1> (value: 60-240)
ctime0=sstr(str,':',1).toInt();if (ctime0<60) ctime0=60;if (ctime0>240) ctime0=240;
ctime1=sstr(str,':',2).toInt();if (ctime1<60) ctime1=60;if (ctime1>240) ctime1=240;
SAVE++;OK=1;updatelcd();updatespeed();serinfo();
}
if (!OK) SXN("ERROR");
}
if (MS-rts>RINTERVAL) { ////////////////////////////////////////////////////////////////////////// regulation
rpm0=rpmcount0/2/((MS-speedts)/1000.0)*60.0;
rpm1=rpmcount1/2/((MS-speedts)/1000.0)*60.0;
speedts=MS;rpmcount0=0;rpmcount1=0;
if (abs(v0-rpm0)>8) {
ox=1;if (abs(v0-rpm0)>20) ox=3;if (abs(v0-rpm0)>50) ox=5;
if (bstate0) r=b0; else r=v0;
if (r>rpm0) {;r0+=ox;if (r0>40) r0=40;}
if (r<rpm0) {;r0-=ox;if (r0<-40) r0=-40;}
}
if (abs(v1-rpm1)>8) {
ox=1;if (abs(v1-rpm1)>20) ox=3;if (abs(v1-rpm1)>50) ox=5;
if (bstate1) r=b1; else r=v1;
if (r>rpm1) {;r1+=ox;if (r1>40) r1=40;}
if (r<rpm1) {;r1-=ox;if (r1<-40) r1=-40;}
}
if (!fanstate0) r0=0;
if (!fanstate1) r1=0;
updatePWM();updatespeed();rts=MS;
}
bdelay=0; //////////////////////////////////////////////////////////////////////////////////// process switch
if (!bprocess) {
while (!digitalRead(SW)){
bdelay++;
delay(25);
bprocess=1;
if (bdelay>20) break;
}
}
if (bdelay>0 && MS-bts>100) { // long button press
if (bdelay>20) {
if (swmode==0 && mode==0 && !LOCK) { // fan 0 on/off
if (fanstate0==0) {;rts=MS+RDELAY;fanstate0=1;r0=0;updatePWM();}
else {;fanstate0=0;}
updatespeed();
}
if (swmode==1 && mode==0 && !LOCK) { // fan 1 on/off
if (fanstate1==0) {;rts=MS+RDELAY;fanstate1=1;r1=0;updatePWM();}
else {;fanstate1=0;}
updatespeed();
}
if (swmode==0 && mode==1 && !LOCK) { // boost 0 on/off
if (bstate0==0) {
rts=MS+RDELAY;bstate0=1;b0ts=MS;fanstate0=1;r0=0;updatePWM();
} else {;bstate0=0;}
updatespeed();
}
if (swmode==1 && mode==1 && !LOCK) { // boost 1 on/off
if (bstate1==0) {
rts=MS+RDELAY;bstate1=1;b1ts=MS;fanstate1=1;r1=0;updatePWM();
} else {;bstate1=0;}
updatespeed();
}
if (swmode==2) { // lock/unlock
if (LOCK==0) LOCK=1;
else LOCK=0;
updatemarker();
}
bdelay=0;
} else if (bdelay>0 && bdelay<20 && !LOCK) { // short button press: switch menu -> fan 0 -> fan 1
swmode++;if (swmode>2) swmode=0;
updatemarker();
bdelay=0;
}
bts=MS;
}
if (digitalRead(SW)) bprocess=0;
encval = digitalRead(CLK); ////////////////////////////////////////////////////////////////// process encoder
if (encval != enclast && !LOCK) {
if(!encval){
if (digitalRead(DT) != encval) { // cw
if (swmode==0 && mode==0) v0+=SPEEDINC; // fan 0 speed up
if (swmode==1 && mode==0) v1+=SPEEDINC; // fan 1 speed up
if (swmode==0 && mode==1) b0+=SPEEDINC; // boost 0 speed up
if (swmode==1 && mode==1) b1+=SPEEDINC; // boost 1 speed up
if (swmode==0 && mode==2) btime0++; // boost time 0 up
if (swmode==1 && mode==2) btime1++; // boost time 1 up
if (swmode==0 && mode==3) catch0++; // catch 0 on/off
if (swmode==1 && mode==3) catch1++; // catch 1 on/off
if (swmode==0 && mode==4) ctime0+=10; // catch time 0 up
if (swmode==1 && mode==4) ctime1+=10; // catch time 1 up
if (swmode==2) mode++;
} else { // ccw
if (swmode==0 && mode==0) v0-=SPEEDINC; // fan 0 speed down
if (swmode==1 && mode==0) v1-=SPEEDINC; // fan 1 speed down
if (swmode==0 && mode==1) b0-=SPEEDINC; // boost 0 speed down
if (swmode==1 && mode==1) b1-=SPEEDINC; // boost 1 speed down
if (swmode==0 && mode==2) btime0--; // boost time 0 down
if (swmode==1 && mode==2) btime1--; // boost time 1 down
if (swmode==0 && mode==3) catch0--; // catch 0 on/off
if (swmode==1 && mode==3) catch1--; // catch 1 on/off
if (swmode==0 && mode==4) ctime0-=10; // catch time 0 down
if (swmode==1 && mode==4) ctime1-=10; // catch time 1 down
if (swmode==2) mode--;
}
if (swmode==0 && mode==0) {;updatePWM();r0=0;rts=MS+RDELAY;} // apply speed change 0
if (swmode==1 && mode==0) {;updatePWM();r1=0;rts=MS+RDELAY;} // apply speed change 1
if (swmode==0 && mode==1) {;updatePWM();r0=0;rts=MS+RDELAY;} // apply boost speed change 0
if (swmode==1 && mode==1) {;updatePWM();r1=0;rts=MS+RDELAY;} // apply boost speed change 1
if (swmode==0 && mode==2) {;if (btime0<0) btime0=0;if (btime0>60) btime0=60;} // check boost time 0
if (swmode==1 && mode==2) {;if (btime1<0) btime1=0;if (btime1>60) btime1=60;} // check boost time 1
if (swmode==0 && mode==3) {;if (catch0<0) catch0=1;if (catch0>1) catch0=0;catchts0=MS;} // check catch 0
if (swmode==1 && mode==3) {;if (catch1<0) catch1=0;if (catch1>1) catch1=0;catchts1=MS;} // check catch 1
if (swmode==0 && mode==4) {;if (ctime0<60) ctime0=60;if (ctime0>240) ctime0=240;} // check boost time 0
if (swmode==1 && mode==4) {;if (ctime1<60) ctime1=60;if (ctime1>240) ctime1=240;} // check boost time 1
if (swmode==2) {;if (mode<0) mode=4;if (mode>4) mode=0;} // check menu mode
SAVE++;updatelcd();delay(50);
}
}
enclast=encval;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////// SUPPORT
void updatelcd() { ///////////////////////////////////////////////////////////////////////////////// update LCD
if (mode==0) {
slcd(1,1,5,"SPEED");
ilcd(7,1,-4,int(v0));
ilcd(12,1,-4,int(v1));
}
if (mode==1) {
slcd(1,1,5,"BOOST");
ilcd(7,1,-4,int(b0));
ilcd(12,1,-4,int(b1));
}
if (mode==2) {
slcd(1,1,5,"BTIME");
ilcd(7,1,-4,int(btime0));ilcd(12,1,-4,int(btime1));
}
if (mode==3) {
slcd(1,1,5,"CATCH");
if (catch0==0) slcd(7,1,-4,"OFF");
else slcd(7,1,-3,"ON");
if (catch1==0) slcd(12,1,-4,"OFF");
else slcd(12,1,-3,"ON");
}
if (mode==4) {
slcd(1,1,5,"CTIME");
ilcd(7,1,-4,int(ctime0));ilcd(12,1,-4,int(ctime1));
}
}
void updatemarker() { /////////////////////////////////////////////////////////////////// update current marker
slcd(0,1,1," ");
slcd(6,1,1," ");
slcd(11,1,1," ");
if (!LOCK) {
if (swmode==0) slcd(6,1,1,">");
if (swmode==1) slcd(11,1,1,">");
if (swmode==2) slcd(0,1,1,">");
}
}
void updatespeed() { ///////////////////////////////////////////////////////////////////////// update fan speed
slcd(1,0,5," ");
if (fanstate0) {
if (MS<stop0) {
slcd(7,0,-4,"CAT");
} else {
if (bstate0) {
ilcd(1,0,2, (((long)btime0*60000)-(MS-(long)b0ts))/1000/60+1);
} else slcd(7,0,1," ");
ilcd(7,0,-4,round(rpm0/5.0)*5);
}
}
else slcd(7,0,-4,"OFF");
if (fanstate1) {
if (MS<stop1) {
slcd(12,0,-4,"CAT");
} else {
if (bstate1) {
ilcd(4,0,2, (((long)btime1*60000)-(MS-(long)b1ts))/1000/60+1);
} else slcd(12,0,1," ");
ilcd(12,0,-4,round(rpm1/5.0)*5);
}
}
else slcd(12,0,-4,"OFF");
}
void serinfo() { /////////////////////////////////////////////////////////////////////////// serial info output
SX(fanstate0);SX(":");SX((int)(v0));SX(":");SX((int)(b0));SX(":");
SX(fanstate1);SX(":");SX((int)(v1));SX(":");SX((int)(b1));SX(":");
SX(rpm0);SX(":");SX(rpm1);SX(":");SX(r0);SX(":");SX(r1);SX(":");
SX(bstate0);SX(":");SX(bstate1);SX(":");SX(btime0);SX(":");SX(btime1);SX(":");
SX(catch0);SX(":");SX(catch1);SX(":");SX(ctime0);SX(":");SX(ctime1);SXN("");
}
void ilcd(int x,int y, int l,int v) { //////////////////////////////////////////////////// write integer to LCD
sprintf(form,"%%%dd",l);
sprintf(out,form,v);
lcd.setCursor(x,y);lcd.print(out);
}
void slcd(int x,int y, int l,String s) { ////////////////////////////////////////////////// write string to LCD
sprintf(form,"%%%ds",l);
sprintf(out,form,s.c_str());
lcd.setCursor(x,y);lcd.print(out);
}
void updatePWM() { ///////////////////////////////////////////////////////////////////// update PWM (fan speed)
if (v0<FANMIN) v0=FANMIN;if (v0>FANMAX) v0=FANMAX;
if (v1<FANMIN) v1=FANMIN;if (v1>FANMAX) v1=FANMAX;
if (b0<FANMIN) b0=FANMIN;if (b0>FANMAX) b0=FANMAX;
if (b1<FANMIN) b1=FANMIN;if (b1>FANMAX) b1=FANMAX;
double v;
if (fanstate0) {
if (MS<stop0) {
OCR1A=0;
} else {
if (bstate0) {
v=b0/(FANMAX/320.0)+r0;if (v<0) v=0;if (v>320) v=320;
OCR1A=v;
} else {
v=v0/(FANMAX/320.0)+r0;if (v<0) v=0;if (v>320) v=320;
OCR1A=v;
}
}
} else OCR1A=0;
if (fanstate1) {
if (MS<stop1) {
OCR1B=0;
} else {
if (bstate1) {
v=b1/(FANMAX/320.0)+r1;if (v<0) v=0;if (v>320) v=320;
OCR1B=v;
} else {
v=v1/(FANMAX/320.0)+r1;if (v<0) v=0;if (v>320) v=320;
OCR1B=v;
}
}
} else OCR1B=0;
}
void rpmint0() {;rpmcount0++;} ///////////////////////////////////////////////////////////////// rpm interrupts
void rpmint1() {;rpmcount1++;}
int eer(int adr) {;return EEPROM.read(adr*2)+EEPROM.read(adr*2+1)*256;} /////////////////////////// read EEPROM
void eew(int adr, int val) {;EEPROM.write(adr*2,val%256);EEPROM.write(adr*2+1,val/256);} /////// save to EEPROM
void save() { /////////////////////////////////////////////////////////////////////////////////// save settings
eew(1,v0);eew(2,v1);eew(3,b0);eew(4,b1);eew(5,btime0);eew(6,btime1);
eew(7,catch0);eew(8,catch1);eew(9,ctime0);eew(10,ctime1);
}
String sstr(String data, char separator, int index) { ///////////////////////////////// get saperated substring
int found=0;
int si[]={0,-1};
int mi=data.length()-1;
for (int i=0; i<=mi && found<=index; i++) {
if (data.charAt(i) == separator || i == mi) {
found++;si[0]=si[1]+1;si[1]=(i==mi) ? i+1 : i;
}
}
return found > index ? data.substring(si[0], si[1]) : "";
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////// END
Zuletzt geändert von mwx am Dienstag 19. Februar 2019, 18:09, insgesamt 3-mal geändert.
- glassart
- Posting Freak
- Beiträge: 1703
- Registriert: Mittwoch 1. Juli 2015, 11:50
- Wohnort: Gunskirchen OÖ
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Super Michael, läuft perfekt
Danke für deine Mühe
lg Herbert
Danke für deine Mühe
lg Herbert
- DerDerDasBierBraut
- Posting Freak
- Beiträge: 7890
- Registriert: Donnerstag 2. Juni 2016, 20:51
- Wohnort: Neustadt-Glewe
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ist auf dem Wemos auch was zu beachten?
Davon habe ich noch sehr viele hier. Wenn es geht würde ich lieber einen davon verwenden anstatt einen Uno zusätzlich zu kaufen.
Davon habe ich noch sehr viele hier. Wenn es geht würde ich lieber einen davon verwenden anstatt einen Uno zusätzlich zu kaufen.
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Sind das ESP8266 Boards (z.B. D1 Mini)? Soweit ich mich erinnere und die Doku richtig verstanden habe, können die leider nur PWM mit maximal 1 kHz.DerDerDasBierBraut hat geschrieben: ↑Dienstag 19. Februar 2019, 13:42 Ist auf dem Wemos auch was zu beachten?
Davon habe ich noch sehr viele hier. Wenn es geht würde ich lieber einen davon verwenden anstatt einen Uno zusätzlich zu kaufen.
- flensdorfer
- Posting Freak
- Beiträge: 695
- Registriert: Freitag 5. Februar 2016, 09:26
- Wohnort: Flensburg
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
also so für Uno?mwx hat geschrieben: ↑Dienstag 19. Februar 2019, 12:46 Noch ein Hinweis für die die einen Arduino UNO verwenden möchten: Der hat auf Pin 0 und 1 keine Interrupts sondern nur auf Pin 2 und 3 also bitte dort anschließen. Im Quelltext müssen dann die Interrupts noch auf 0 und 1 geändert werden. Das ist verwirrend weil genau umgekehrt :)
[code
int I0 = 0; // interrupt for 1. fan rpm signal
int I1 = 1; // interrupt for 2. fan rpm signal
[/code]
Gruß, Arne
Anfänger in der 20l-Klasse
Anfänger in der 20l-Klasse
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ok, dann geht es nicht. Wenn Du einen UNO nimmst hast Du auch den Vorteil das Du den direkt mit 12V füttern kannst. Du brauchst dann keinen zusätzlichen Step-Down oder ähnliches.
Zuletzt geändert von mwx am Dienstag 19. Februar 2019, 14:21, insgesamt 1-mal geändert.
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
ja genau so.flensdorfer hat geschrieben: ↑Dienstag 19. Februar 2019, 14:19 also so für Uno?
[code
int I0 = 0; // interrupt for 1. fan rpm signal
int I1 = 1; // interrupt for 2. fan rpm signal
[/code]
- glassart
- Posting Freak
- Beiträge: 1703
- Registriert: Mittwoch 1. Juli 2015, 11:50
- Wohnort: Gunskirchen OÖ
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
einen Diplay/Encoder-Einbaurahmen gibt es auch dazu
lg Herbert- flensdorfer
- Posting Freak
- Beiträge: 695
- Registriert: Freitag 5. Februar 2016, 09:26
- Wohnort: Flensburg
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Macht es u.U. mehr sinn, den 120er zu nehmen? Der dreht bis 2200rpm, während der 140er "nur" bis 1600rpm geht. Oder bekommt man dann die Magnete nicht vernünftig untergebracht?.
Gruß, Arne
Anfänger in der 20l-Klasse
Anfänger in der 20l-Klasse
- glassart
- Posting Freak
- Beiträge: 1703
- Registriert: Mittwoch 1. Juli 2015, 11:50
- Wohnort: Gunskirchen OÖ
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
ich habe 2 120er laufen
lg Herbert
lg Herbert
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Schick. Du mußt aber jetzt ein relativ hohes Gehäuse bauen wenn die beiden Teile übereinander sind.
- glassart
- Posting Freak
- Beiträge: 1703
- Registriert: Mittwoch 1. Juli 2015, 11:50
- Wohnort: Gunskirchen OÖ
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
ich mache die Front schräg -ca. 45° dann sieht man besser drauf.
Könnte den Encoder antürlich auch li oder re positionieren.
Könnte den Encoder antürlich auch li oder re positionieren.
- flensdorfer
- Posting Freak
- Beiträge: 695
- Registriert: Freitag 5. Februar 2016, 09:26
- Wohnort: Flensburg
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Herbert, hast Du die Aufnahme für die 120er anpassen müssen oder passen die aus der stl-Datei sowohl auf die 120er als auch auf die 140er SilentWings3?
Gruß, Arne
Anfänger in der 20l-Klasse
Anfänger in der 20l-Klasse
- glassart
- Posting Freak
- Beiträge: 1703
- Registriert: Mittwoch 1. Juli 2015, 11:50
- Wohnort: Gunskirchen OÖ
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Arne ich hab mir selbst welche konstruiert die auf meine 120 er passen -ob die für die 80 er auch gehen kann ich nicht sagen.
Ich habe 3 Möglichkeiten die Magnete zu positionieren und bei mir passen sie so genau dass ich die Halter gar nicht festkleben muss ( fast eine Presspassung )
Ich habe 3 Möglichkeiten die Magnete zu positionieren und bei mir passen sie so genau dass ich die Halter gar nicht festkleben muss ( fast eine Presspassung )
-
- Posting Freak
- Beiträge: 500
- Registriert: Samstag 9. September 2017, 13:08
- Wohnort: Ö - GU Süd
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
ein Link von Frudel:https://www.ebay.de/itm/5-X-POWER-NEODY ... 9#shpCntIdflensdorfer hat geschrieben: ↑Dienstag 19. Februar 2019, 10:45 Günstige Bezugsquelle für die Magnete? magnet-shop.net nimmt den Warenwert nochmal als Versandkosten... Oder hat jemand ein paar 20x10x5 rumliegen?
ich hab meine von da: https://www.magnetmax.de/Neodym-Quaderm ... g::66.html
-
- Posting Freak
- Beiträge: 500
- Registriert: Samstag 9. September 2017, 13:08
- Wohnort: Ö - GU Süd
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
bis zu welcher Drehzahl werden die denn in der Praxis tatsächlich eingesetzt?flensdorfer hat geschrieben: ↑Dienstag 19. Februar 2019, 14:43 Macht es u.U. mehr sinn, den 120er zu nehmen? Der dreht bis 2200rpm, während der 140er "nur" bis 1600rpm geht. Oder bekommt man dann die Magnete nicht vernünftig untergebracht?.
es ist mir schon klar daß das auf das Gefäß und die Füllmenge ankommt. Wäre trotzdem interessant...
LG
stefan
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ich hab bei nem 30er Rührgisch mit 220ml im 250ml Erlenmeyrkolben 1300 bis 1400 UpM gebraucht.
140 mm Lüfter haben mehr Drehmoment, ist nem größeren Abstand der Magnete kommt man mit nem 50er Rührfisch leichter in größeren Gefäßen zu recht.
Gruß JackFrost
140 mm Lüfter haben mehr Drehmoment, ist nem größeren Abstand der Magnete kommt man mit nem 50er Rührfisch leichter in größeren Gefäßen zu recht.
Gruß JackFrost
Meine Hardware:
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
- flensdorfer
- Posting Freak
- Beiträge: 695
- Registriert: Freitag 5. Februar 2016, 09:26
- Wohnort: Flensburg
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
der ebay-Link war gut, mir wurde noch ein 5€ Gutschein von ebay angezeigt. Habe mir dann gleich mal welche bestellt.daleipi hat geschrieben: ↑Dienstag 19. Februar 2019, 18:36ein Link von Frudel:https://www.ebay.de/itm/5-X-POWER-NEODY ... 9#shpCntIdflensdorfer hat geschrieben: ↑Dienstag 19. Februar 2019, 10:45 Günstige Bezugsquelle für die Magnete?
Gruß, Arne
Anfänger in der 20l-Klasse
Anfänger in der 20l-Klasse
-
- Posting Freak
- Beiträge: 1480
- Registriert: Montag 27. März 2017, 11:56
- Wohnort: Berlin
Re: Der Magnetrührer-Thread (DIY, Infos, Bilder und mehr)
Ich habe hier bestellt.daleipi hat geschrieben: ↑Dienstag 19. Februar 2019, 18:36ein Link von Frudel:https://www.ebay.de/itm/5-X-POWER-NEODY ... 9#shpCntIdflensdorfer hat geschrieben: ↑Dienstag 19. Februar 2019, 10:45 Günstige Bezugsquelle für die Magnete? magnet-shop.net nimmt den Warenwert nochmal als Versandkosten... Oder hat jemand ein paar 20x10x5 rumliegen?
ich hab meine von da: https://www.magnetmax.de/Neodym-Quaderm ... g::66.html