Forum: Mikrocontroller und Digitale Elektronik Ideen/Anregungen zur Steuerung eines DC-Motors mit einem Infrarotsensor im Sanitärbereich


von Vitali A. (cxv)


Angehängte Dateien:

Lesenswert?

Hallo liebe mikrocontroller.net-Mitglieder,
hier soll es um eine Realisierung der Steuerung eines Motors gehen, der 
eine Spiegelfläche hoch- und runter fährt. Dieser ist bereits eingebaut 
und erledigt die Aufgabe die ca. 10 Kg Platte inkl. des Spiegels hoch 
und runter zu fahren mit Bravour (Hochfahren dauert ca. 3,5 Sek, der Weg 
beträgt 50 cm.).
Die Steuerung soll hoffentlich mit eurer Hilfe nun Schritt für Schritt 
realisiert werden.

Im Anhang ist nur eine erste Übersichtskizze mit den nötigen 
mechanischen und einigen elektrischen Bauteilen und ungefährer 
Positionierung eingefügt (Trafo fehlt).

Nun zur Erklärung der Funktion und Aufbau:
-------------
Sobald ein handelsüblicher 230V Lichtschalter für den Sanitärbereich in 
Stellung "EIN" geht, wird die Anlage mitsamt eines Infrarot-Lichttasters 
aktiviert (Trafo wird eingeschaltet). D.h. die ganze Anlage muss in der 
zuletzt verlassenen Position verweilen, auch wenn vorübergehend keine 
Spannung anliegt.
Voraussetzung 1) Wird nun eine Hand vor dem Infrarotsensor gehalten ODER 
durchgeführt, fährt ein Motor über eine Rollenmechanik die Spiegelwand 
hoch. Die Endpositionen werden hierbei von Endschaltern erfasst.
Voraussetzung 2) NACHDEM DER SPIEGEL HOCHGEFAHREN IST, soll bei erneutem 
Halten/Durchführen der Hand über dem Infrarotsensor der Motor in die 
umgekehrte Richtung laufen und die Spiegelwand absenken.
Voraussetzung 3) Während der Motor in eine beliebige Richtung noch läuft 
soll bei erneutem HALTEN (nicht durchführen) der Hand über den 
Infrarotsensor der Motor stehen bleiben (NOTFALL-Stop), wird die Hand 
vom Sensor wegbewegt, soll der Motor in die zuvor gefahrene Richtung bis 
zum Endanschlag weiterfahren.

Zu PWM: Es ist möglich den Motor zwecks Geschwindigkeitssteuerung (da 
mangelnde Kenntnisse im Bereich Programmierung und PWM) mit zwei 
Spannungen (24/12V) laufen zu lassen da dieser eig. für 24 Volt 
ausgelegt ist, jetzt jedoch auch mit einem 12V Akku sehr gut läuft. Der 
Gedanke ist den Motor jeweils nahe der Endlagen etwas langsamer laufen 
zu lassen (also 12V) ansonsten aber etwas schneller (24V), wobei die 
Positionen durch zwei weitere Endtaster erfasst werden können (ist in 
der Skizze oben eingefügt). Dies könnte man doch mit einem 2ten Trafo 
erledigen statt PWM?
ACHTUNG! Ich kenne mich mit PWM noch gar nicht aus und kenne den 
entsprechenden Aufwand und die Auslegung der nötigen Bauteile nicht. 
Evtl. wäre eine PWM-Steuerung zu übertrieben oder aber doch die einzig 
vernünftige Lösung?
--------------------

Gegebenheiten Infrarotsensor (sollte demnächst geliefert werden):
---------------------------
Industriestandard
Licht im Infrarotbereich (nicht sichtbar)
Spritzwassergeschützt
Einstellbare Erfassungsweite bei ca. 1 bis 10. cm
Sichere Erkennung einer Handfläche im Erfassungsbereich
Zylinderförmiges Gehäuse
Ub 11 bis 30 Volt DC
PNP/NPN (Wechselschalter) Schaltausgang 200 mA
-------------------------

Was ich nun gerne möchte, ist ein Anstoß zur Realisierung.
- Soll die Steuerung komplett digital erfolgen und auf eine 
Lochrasterplatine aufgebaut werden? Soll es doch gewöhnlich mit Relais 
aufgebaut werden, wobei ich die Schaltung wohl selbst hinbekommen würde 
(bin nie mit der Porgrammierung von ATMELs o.ä. beschäftigt gewesen).
- Welcher Trafo soll nun genommen werden (gehen wohl LED-Trafos, z.B. 
soetwas wie Ebay-Art.Nr.: 320633266622?
- Was würdet Ihr verbessern, was würdet Ihr anders machen, wie würdet 
Ihr es letztendlich realisieren?

Vielen Dank für Eure Hilfe und jegliche Anregungen im Voraus.
Vitali
PS: Soll sich etwas finden, was es als fertige Lösung gibt, oder sich 
jemand dafür bereit erklären die Steuerung zu verwirklichen, so bin ich 
selbstverständlich bereit Geld dafür auszugeben.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Das Übliche...

Alles kannst Du mit einem uC machen,
die Relais-Technik ist obsolet.

Speisespannung wäre egal, eine PWM ist einfach. Der Rest ist nix dolles.
Also eine H-Brücke im Ausgang für 24V und ein paar Ampere.
Digitale Eingänge.
Letzte Stellung wird im EEPROM des uC gespeichert.

Ich hab da eine Platine für 2 24V-Motore aber die digitalen Eingänge 
müßte man dazubasteln.

von Vitali A. (cxv)


Lesenswert?

Hallo Herr Rüter und vielen Dank für die Antwort. Leider haben Sie sich 
auf meine PM hin nicht gemeldet, also habe ich erst einmal nach einem 
Motortreiber gesucht und diesen hier gefunden:
http://www.watterott.com/de/Motor-Steuerung-15A-IRF7862PBF
Was meint Ihr dazu, ist dieser für den vorhandenen 85W 24V Motor 
geeignet?

Als Spannungsversorgung soll dieses 24V LED-Netzteil dienen:
Ebay-Artikelnummer: 270959579361
Was ist mit diesem Netzteil, kann man mit diesem LED-Trafo auch meinen 
24V Motor antreiben?

Was nun noch bleibt ist ein Prozessor der die Geschichte steuert, mit 
PWM und mind. 5 Eingängen. Gibt es fertige Platinen mit einem Atmega 
o.a. den man nur noch programmieren bräuchte?

So wie ich das verstehe müsste ich die Ein- und Ausgänge der 
Controllerplatine mit den externen Sensoren und den Endschaltern 
verschalten und den Motortreiber damit ansteuern.
Ist meine Denkweise so richtig?

Könnt Ihr mir anraten welcher Motortreiber, Controller (evtl. 
Entwiklungskit??) und Trafo für meine Zwecke zu empfehlen sind. Da ich 
mich mit den entsprechenden Möglichkeiten, Marken und Programmierung 
nicht auskenne, wären ein Paar Ratschläge sehr hilfreich.
Vielen Dank an alle die mir antworten.
Vitali

von Vitali A. (cxv)


Lesenswert?

Habe eben ein Paar Beiträge zu Entwicklerkits gelesen und die Preise 
diese angeschaut. Auf jeden Fall wäre so ein Entwicklerkit für meine 
oben genannte Aufgabe völlig überdimensioniert.
Gibt es simple, fertig aufgebaute Kits mit z.B. einem ATMEL-IC, ein Paar 
Ein- und Ausgängen und einer USB-Programmierschnittstelle?
Als Spannungsversorgung für die Controllerplatine müsste ich ja 5V zur 
Verfügung stellen. Da der von mir oben genannte Motortreiber IRF7862PBF 
einen Ausgang mit 5V hat, könnte man die Controllerplatine da ja 
dranhängen, richtig? Strom-mäßig sollte es ja völlig ausreichen.
Nochmals vielen Dank im Voraus für jegliche Hilfe.
Vitali

von Flohzirkus (Gast)


Lesenswert?

Vitali A. schrieb:
> Gibt es simple, fertig aufgebaute Kits mit z.B. einem ATMEL-IC, ein Paar
> Ein- und Ausgängen und einer USB-Programmierschnittstelle?

Arduino könnte ein Kandidat für dich sein - USB Programmierschnittstelle 
und EEPROM zur nichtflüchtigen Speicherung onboard. Auch ein 5V 
Spannungsregler ist eingebaut, falls du doch keine stabilisierte 
Versogrungsspannung zur Verfügung hast.

Grüße

von Ralph (Gast)


Lesenswert?

Vitali A. schrieb:
> D.h. die ganze Anlage muss in der
> zuletzt verlassenen Position verweilen, auch wenn vorübergehend keine
> Spannung anliegt.

Das heißt du brauchst eine mechanische Verriegelung der Position damit 
der Spiegel auch ohne Strom in dieser Position bleibt.

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> - Was würdet Ihr verbessern, was würdet Ihr anders machen, wie würdet
> Ihr es letztendlich realisieren?

Auf jeden Fall ein Mikrocontroller, dann ist das alles ganz einfach. Das 
Hauptprogramm wird auch nicht sonderlich schwer, wird wohl in etwa so 
aussehen:
1
if(handVormSensor() && handWarVormSensor==false){
2
   if(position==oben){
3
      position=runterfahren;
4
      motorGeschwindigkeit(-100);
5
   }else if(position==unten){
6
      position=rauffahren;
7
      motorGeschwindigkeit(100);
8
   }else{
9
      notstop=true;
10
      motorGeschwindigkeit(0);
11
   }
12
   handWarVormSensor=true;
13
}
14
if(!handVormSensor()){
15
   handWarVormSensor=false;
16
   notstop=false;
17
}
18
19
if(notstop==false){
20
   if(position==runterfahren && endschalterVorUntenGedrückt()){
21
      motorGeschwindigkeit(-50);
22
   }else if(position==rauffahren && endschalterVorObenGedrückt()){
23
      motorGeschwindigkeit(50);
24
   }
25
}
26
27
if(endschalterUntenGedrückt()){
28
   position=unten;
29
   motorGeschwindigkeit(0);
30
}else if(endschalterObenGedrückt()){
31
   position=oben;
32
   motorGeschwindigkeit(0);
33
}

Interessant wird halt dann das einlesen der Schalter und das Steuern des 
Motors. Außerdem wirst du beim Start einmal die Endschalter prüfen 
müssen und wenn keiner gedrückt ist erstmal hoch/runter fahren lassen.

von Vitali A. (cxv)


Lesenswert?

Einen schönen Sonntag und vielen Dank für die zahlreichen Antworten.
Habe mir die Arduino Kits angesehen, da wäre das UNO und das NANO was 
preislich und von der Ausstattung in Frage kommen.
Sind die Boards für meine Zwecke geeignet? Welches wäre besser bzw. 
kleiner zwecks Budgeteinsparung? Wobei ich denke das diese beiden die 
günstigsten im Arduino-Programm sind.

@ Ralph: Die Position des Spiegels bleibt immer erhalten, da der Motor 
ein integriertes Zahnradgetriebe mit Spiralachse hat. Egal in welcher 
Position man den Motor stoppt bleibt der Spiegel stehen.

@ Gast: dies sieht aus wie diverse andere Programmiersprachen aus der 
Schule, gut! Einzig die richtige Syntax- und Schreibweise muss ich noch 
beherrschen. Werde mich demnächst darauf näher beziehen. Auf den ersten 
Blick ist aber glaube ich die in Deinem Beispiel angegebene Funktion 
nicht ganz richtig. Die Bewegung des Spiegels soll bei 
"handWARvormsensor" initiiert werden, bei "handISTvormsensor" soll der 
Notstopp ausgelöst werden. Herzliche Dank für die erste Inspiration im 
Programmieren.

Weitere Fragen:
Ich möchte nun vorankommen und Heute die Sachen bestellen. Was benötige 
ich nun genau für das gesamte Projekt?
Hier eine Bestellliste die von euch vervollständigt oder geändert werden 
darf/soll (wenn jemand helfen möchte):
---------------------
- Arduino Board (welches? Bezugsquelle?)

- Infrarotsensor, hier habe ich einen für Arduino Boards gefunden 
eBay-Artikelnummer: 251032025662. Werde den jetzt vorhandenen, 
wesentlich teureren mit fester Schaltschwelle wohl zurücksenden.

- Motortreiber (passt dieser nun, oder besser einen für Arduino Boards 
kaufen?: http://www.watterott.com/de/Motor-Steuerung-15A-IRF7862PBF

- 24V Trafo: geht es mit dem LED-Trafo: Ebay-Artikelnummer: 270959579361

- Wie speise ich das Arduino Board? Der Motortreiber gibt nur 5V raus, 
ist zu wenig für das Board (7-12V), wie dann mit noch einem 12V 
Netzteil?

- 4 Endtaster (nicht Schalter) vorhanden (werden die mit dem uC 
entprellt?)

- Motor inkl. Mechanik vorhanden, verbaut und funktioniert sehr 
zuverlässig.
---------------------

Noch etwas, es wird ja nicht möglich sein den Spiegel in einer 
Zwischenlage stehen zu lassen und den Raum zu verlassen, entweder fährt 
er ganz runter oder ist ganz oben. Daher muss ich doch eigentlich keine 
Positionen im festen EEPROM abspeichern, sondern nur die Endtaster 
auswerten, einer ist stets offen, der andere geschlossen und umgekehrt. 
Auf der anderen Seite denke ich an eine zweite Person, die außen den 
Badezimmerlichtschalter betätigt währen der Spiegel hoch/runter fährt, 
was passiert in diesem Fall? Wie beugt man vor?

Ich hoffe auf Hilfe eurerseits und bedanke mich zutiefst bei allen die 
mir geholfen haben und helfen werden.
Vitali

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> @ Gast: dies sieht aus wie diverse andere Programmiersprachen aus der
> Schule, gut! Einzig die richtige Syntax- und Schreibweise muss ich noch
> beherrschen. Werde mich demnächst darauf näher beziehen. Auf den ersten
> Blick ist aber glaube ich die in Deinem Beispiel angegebene Funktion
> nicht ganz richtig. Die Bewegung des Spiegels soll bei
> "handWARvormsensor" initiiert werden, bei "handISTvormsensor" soll der
> Notstopp ausgelöst werden. Herzliche Dank für die erste Inspiration im
> Programmieren.

Das war jetzt an C angelehnter Pseudocode. Die Variablen und Funktionen 
fehlen halt noch, ansonsten sollte das zumindest sehr ähnlich schon 
funktionieren.
Wegen der Funktion, ich dachte der Nutzer hält die Hand vor den Sensor, 
dann fängt das Teil an runter-/raufzufahren. Wenn der Nutzer die Hand 
wegnimmt fährt es weiter. Wenn der Nutzer jetzt die Hand nochmal 
hinhält, soll ein Notstop ausgelöst werden, wenn der Nutzer die Hand 
wieder wegnimmt geht es weiter. Wenn der Spiegel ganz oben/unten ist 
geht das Spielchen wieder von vorne los. Meintest du das anders?

Vitali A. schrieb:
> - Infrarotsensor, hier habe ich einen für Arduino Boards gefunden
> eBay-Artikelnummer: 251032025662. Werde den jetzt vorhandenen,
> wesentlich teureren mit fester Schaltschwelle wohl zurücksenden.

Hier 
http://www.dfrobot.com/wiki/index.php?title=Adjustable_Infrared_Sensor_Switch_(SKU:SEN0019) 
ist Beispielcode dazu. Ich sehe leider nicht, wie man die Range 
einstellen kann. Muss wohl mechanisch gehen? Scheinbar ist jedenfalls 
keine echte Datenübertragung zwischen Sensor und µC, nur ein simpler 
Schaltkontakt.

Vitali A. schrieb:
> - Motortreiber (passt dieser nun, oder besser einen für Arduino Boards
> kaufen?: http://www.watterott.com/de/Motor-Steuerung-15A-IRF7862PBF

Der von Watterott sieht gut aus. Bräuchte aber mehr Infos zum Motor 
(welcher Typ, welche Leistung usw) für genauere Aussagen.

Vitali A. schrieb:
> - 24V Trafo: geht es mit dem LED-Trafo: Ebay-Artikelnummer: 270959579361

Theoretisch denke ich schon, auch hier bräuchte man aber mehr Infos, 
welche Leistung der Motor braucht. Ich denke es gibt auch billigere 
Netzteile.

Vitali A. schrieb:
> - Wie speise ich das Arduino Board? Der Motortreiber gibt nur 5V raus,
> ist zu wenig für das Board (7-12V), wie dann mit noch einem 12V
> Netzteil?

Wo gibt der Motortreiber 5V aus? Das habe ich nirgends gelesen. Falls 
dem so ist kannst du die 5V an den USB Eingang des Arduino hängen, dann 
geht das. Ansonsten braucht der eben noch n eigenes Netzteil, im Zweifel 
einfach noch nen Linearregler der von 24V auf 9V oder so regelt.

Vitali A. schrieb:
> - 4 Endtaster (nicht Schalter) vorhanden (werden die mit dem uC
> entprellt?)

Kann man entprellen, kommt wohl auf den mechanischen Aufbau an was du da 
genau brauchst.

Vitali A. schrieb:
> Auf der anderen Seite denke ich an eine zweite Person, die außen den
> Badezimmerlichtschalter betätigt währen der Spiegel hoch/runter fährt,
> was passiert in diesem Fall? Wie beugt man vor?

Wenn sich der µC einschaltet prüft er eben die Endschalter, wenn der 
Spiegel oben oder unten ist passts, wenn er fast oben ist fährt er 
erstmal hoch, wenn er fast unten ist fährt er erstmal runter, wenn 
garkein Schalter gedrückt ist fährt er halt immer in eine Richtung. 
Irgendwie musst du ja in einen definierten Zustand kommen.

von Guest (Gast)


Lesenswert?

Sorry, mein Link war kaputt, hier der richtige:
dfrobot.com/wiki/index.php?title=Adjustable_Infrared_Sensor_Switch_(SKU: 
SEN0019)

von STK500-Besitzer (Gast)


Lesenswert?

Wenn man zwei Sensoren benutzt, kann man auch die Richtung beim 
Betätigen festlegen...

von Guest (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Wenn man zwei Sensoren benutzt, kann man auch die Richtung beim
> Betätigen festlegen...

Und wenn man einen Alkoholsensor einbaut kann man auf den Geisteszustand 
beim Betätigen schließen. Was soll das bringen?

von Vitali A. (cxv)


Lesenswert?

@ Gast: Tausendfach danke für die weitere Info. Das mit der 
Programmiersprache habe ich wohl zu optimistisch gesehen, peinlich. 
Werde dann wohl noch Hilfe dabei benötigen, denke aber das dieser 
Aufwand sich in Grenzen hält. Wie verhält sich das beim beschreiben des 
uC, per USB an den PC, Software laden, Programm schreiben und auf den uC 
aufspielen? Oder sind da noch irgendwelche Besonderheiten im Wege? 
Banale Frage ich weiß, muss auch nicht beantwortet werden, da es ja noch 
eh auf mich zukommt.

Guest schrieb:
> Wegen der Funktion, ich dachte der Nutzer hält die Hand vor den Sensor,
> dann fängt das Teil an runter-/raufzufahren. Wenn der Nutzer die Hand
> wegnimmt fährt es weiter. Wenn der Nutzer jetzt die Hand nochmal
> hinhält, soll ein Notstop ausgelöst werden, wenn der Nutzer die Hand
> wieder wegnimmt geht es weiter. Wenn der Spiegel ganz oben/unten ist
> geht das Spielchen wieder von vorne los. Meintest du das anders?

Genau SO soll das gehen, es soll keine Rolle spielen ob die Hand davor 
gehalten oder schnell durchgeführt wird, der Spiegel muss in beiden 
Fällen anfangen zu laufen. Wird die Hand während des Laufs vor dem 
Sensor GEHALTEN!! (nachdem sie von dem Sensor wieder wegbewegt wurde) so 
soll dies in jeder Position den NOTSTOP auslösen, bis die Hand wieder 
wegbewegt wird und der Spiegel in die zuvor vorgegebene Richtung weiter 
läuft.
...
Ich habe grade das selbe geschrieben wie Du im Zitat, danke Du hattest 
die Aufgabenstellung von Anfang an richtig interpretiert. Dein 
Programmvorschag weiter oben habe ich wohl falsch verstanden.

IR-Sensor: Die Range lässt sich meist mit einem Drehpoti am Sensor 
einstellen. Hatte hier ein Paar gehabt allerdings Industrieausführung, 
wird wohl nichts anderes sein. Den setze ich jetzt also fest auf die 
Bestellliste, kostet 5 mal weniger als die Industrieausführung und lässt 
sich einstellen.

Motortreiber: Die Belegung sieht man auf dieser Seite:
http://www.pololu.com/catalog/product/755
Der 5V OUT kann jedoch nur eine geringe Leistung abgeben, sollte jedoch 
für die uC-Platine ausreichen denke ich. Leider habe ich aber gelesen 
das der Arduino nicht mit unter 6 oder 7V stabil läuft.
Der Motor ist ein Markisenmotor mit 24V und 85W weitere Daten sind nicht 
bekannt. Sieht von der Größe, als auch  von restlichen Aufbau aus wie 
ein gewöhnlicher Scheibenwischermotor im KFZ. Ist es denn unabdingbar 
die genauen Daten des Motors zu kennen? In den Endbereich kommt dieser 
ja nicht und auch sonst sieht er gelangweilt in der Konstruktion aus, 
der Strom sollte da nicht allzu hoch werden. Der Anlaufstrom wird ja 
auch per PWM in Grenzen liegen.

Netzteil: Ich habe dieses ausgewählt, da es ein IP67 Gehäuse hat, was im 
Feuchtraum vllt. nicht von Nachteil ist. Andererseits kommt in den 
Bereich eh nie Wasser oder Dampf rein. Ansonsten gibt es noch diesen 
hier Artikelnummer: 270926647014 . Die Frage ist, warum sind diese 
explizit mit LED-Trafo gekennzeichnet?

Guest schrieb:
> Wenn sich der µC einschaltet prüft er eben die Endschalter, wenn der
> Spiegel oben oder unten ist passts, wenn er fast oben ist fährt er
> erstmal hoch, wenn er fast unten ist fährt er erstmal runter, wenn
> garkein Schalter gedrückt ist fährt er halt immer in eine Richtung.
> Irgendwie musst du ja in einen definierten Zustand kommen.

Das hört sich gut an. Soll also bei "GARKEINSCHALTERGEDRÜCKT" nach oben 
bewegen.

Welches Arduino soll das nun sein, bin ziemlich ratlos? Habe hier den 
Arduino NANO V3.0 AVR ATmega328 gefunden, kostet inkl. USB-Kabel und 
Versand 23 Euro. Gut? Schlecht?

@Gast: Danke nochmal für die Hilfe. Auch all den anderen die hier im 
Forum selbstlos helfen einen riesen Dank und Lob!
Vitali

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> Das mit der
> Programmiersprache habe ich wohl zu optimistisch gesehen, peinlich.
> Werde dann wohl noch Hilfe dabei benötigen, denke aber das dieser
> Aufwand sich in Grenzen hält.

Sehe ich auch so, dürfte kein Problem sein.

Vitali A. schrieb:
> Wie verhält sich das beim beschreiben des
> uC, per USB an den PC, Software laden, Programm schreiben und auf den uC
> aufspielen?

Genau so!

Vitali A. schrieb:
> Ich habe grade das selbe geschrieben wie Du im Zitat, danke Du hattest
> die Aufgabenstellung von Anfang an richtig interpretiert. Dein
> Programmvorschag weiter oben habe ich wohl falsch verstanden.

Ich denke, dass mein Programmvorschlag das Richtige bewirkt, müsste man 
halt im Zweifel mal ausprobieren. Das ganze "handWarVorSensor" ist nur, 
um zu erkennen, ob die Hand ständig vor dem Sensor ist, oder 
zwischendurch "losgelassen" wurde.

Vitali A. schrieb:
> Die Range lässt sich meist mit einem Drehpoti am Sensor
> einstellen.

Ahja, okay, das ist dann ja kein Problem.

Zum Motortreiber: Die Angabe "This regulated 5V output provides a few 
milliamps. " ist natürlich alles andere als genau. Sollte aber für den 
Arduino bzw. einen ATmega schon reichen denke ich.

Vitali A. schrieb:
> Leider habe ich aber gelesen
> das der Arduino nicht mit unter 6 oder 7V stabil läuft.

Naja. Der Arduino hat eben einen Strom-Eingang. Hinter diesem Eingang 
sitzt ein Regler der 5V erzeugt. Dieser Regler braucht einen gewissen 
Spannungsunterschied zu den 5V um zu funktionieren (nennt man drop 
voltage). Daran kannst du keine 5V anschließen. Der Arduino kann 
allerdings auch von USB versorgt werden, und akzeptiert dabei eben die 
5V USB Spannung. Du kannst dir also ein USB Kabel zerschneiden, den 5V 
Ausgang des Motorsteuergerätes anlöten und in den Arduino stecken, dann 
geht das.

Vitali A. schrieb:
> Der Motor ist ein Markisenmotor mit 24V und 85W weitere Daten sind nicht
> bekannt.

Ahja, dann sollte das Netzteil schon reichen.

Vitali A. schrieb:
> Die Frage ist, warum sind diese
> explizit mit LED-Trafo gekennzeichnet?

DAS kann ich dir auch nicht beantworten, Es scheint ja keine KSQ zu 
sein. Ich vermute, dass das ganz einfach teuerer zu verkaufen geht, wenn 
LED draufsteht.

Vitali A. schrieb:
> Welches Arduino soll das nun sein, bin ziemlich ratlos? Habe hier den
> Arduino NANO V3.0 AVR ATmega328 gefunden, kostet inkl. USB-Kabel und
> Versand 23 Euro. Gut? Schlecht?

Puh, das "standard" Arduino Board ist wohl das UNO.

von Vitali A. (cxv)


Lesenswert?

Hallo nochmal,
@Gast einen besonderen Dank!
Ich habe nun einige Sachen bestellt und warte auf die Lieferung. Heute 
ist die Motorsteuerung-15A-IRF7862PBF angekommen. Für mich eine 
unglaublich kleine und sauber aufgebaute Platine.
Ich habe dazu noch eine Frage: In der Beschreibung bei 
http://www.pololu.com/catalog/product/755 steht genau dieser Satz:

Zitat:"...The board also provides a regulated 5 V pin which can provide 
a few milliamps (this is typically insufficient for a whole control 
circuit but can be useful as a reference or for very low-power 
microcontrollers)."

Als uC-Kit habe ich das Arduino Uno SMD Edition R gekauft, welcher auf 
dem ATmega328 basiert. Wie viel Strom der UNO zieht konnte ich nirgends 
herausfinden, denke aber dass es nicht klappen wird das UNO mit dem 
Motortreiber anhand des 5V-OUT zu versorgen.
Als Referenz ist für den Board 7 bis 12V angegeben. Wie versorge ich das 
nun elegant? Es wird eigentlich nur eine 24V und eine 230V Quelle 
vorhanden sein.

Falls noch jemand einen günstigen 24V DC Trafo mit kleinen Abmaßen und 
mind 150W kennt, wäre ich für alle Tipps sehr dankbar.

Danke für Eure riesen-Hilfe
Vitali

von Jens (Gast)


Lesenswert?

Hi,

was ist denn mit der C-Control für diesen Fall. Ich würde mich mal im 
Breich der kleinen SPS umsehen...24V würde auch passen...

Gruß,
JJ

von Vitali A. (cxv)


Lesenswert?

Hallo Jens,
danke für Deine Anregung. Es ist gut zu wissen dass es das C-Control 
gibt, scheint auf jeden Fall leicht programmierbar zu sein und auch 
preisgünstig. Leider habe ich schon praktisch sämtliche Teile geholt um 
das ganze mittels des Arduino UNO zu realisieren. Eine passende 
Schaltung mit C-Control für meine Zwecke, habe ich auf die schnelle auch 
nicht gefunden. Dennoch vielen Dank für die Info dass es so etwas auch 
noch gibt.
Vitali

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> Als uC-Kit habe ich das Arduino Uno SMD Edition R gekauft, welcher auf
> dem ATmega328 basiert. Wie viel Strom der UNO zieht konnte ich nirgends
> herausfinden, denke aber dass es nicht klappen wird das UNO mit dem
> Motortreiber anhand des 5V-OUT zu versorgen.
> Als Referenz ist für den Board 7 bis 12V angegeben. Wie versorge ich das
> nun elegant? Es wird eigentlich nur eine 24V und eine 230V Quelle
> vorhanden sein.

http://arduino.cc/en/Main/ArduinoBoardUnoSMD Das hier? Ich kann mich nur 
wiederholen, besorg dir ein USB Kabel, von dem mindestens ein Ende in 
das Arduino Board passt, schneids durch, isolier das rote und das 
schwarze Kabel ab, rot an +5Vout vom Motortreiber, schwarz an GND und 
das andere Ende in den Arduino stecken.
Falls der Strom nicht reicht, wie wärs hiermit: 
http://www.conrad.de/ce/de/product/179191/ ?
Maximum Input Voltage 35V, Vout 9V.

Jens schrieb:
> was ist denn mit der C-Control für diesen Fall. Ich würde mich mal im
> Breich der kleinen SPS umsehen...24V würde auch passen...

Weils dazu hier soviel Hilfe gibt und die auch alle so billig sind, mhm?

von Vitali A. (cxv)


Lesenswert?

Hallo Leute,
es sind Gestern alle bestellten Sachen gekommen und ich möchte Heute 
probieren das UNO zum ersten mal zu programmieren. Einige Sachen habe 
ich schon ausprobiert (Erste Schritte). Ich habe allgemeine Fragen zu 
solchen uC-Kits.

- Kann man die digitalen Ausgänge mit GND bzw. mit +5V OUT 
belegen/Programmieren um z.B. den Infrarotsensor SKU:SEN0019 zu speisen? 
Auch hat der Motortreiber bereits passende Stifte zum Aufstecken auf das 
UNO, nur wäre der GND-Pin des Motortreibers auf einem der Ausgänge des 
UNO.
Sollte es nicht empfehlenswert sein so weiß ich was zu tun ist.

- Wie realisiert man üblicherweise elegant den Massepunkt bei Projekten 
mit dem uC-Board?

- Kann ich an die Analogen Eingänge (A0 bis A5) auch die Endschalter 
legen? Ist vielleicht unnütz, da ich genügend Digitale da habe.

- Ist bei der Belegung und Programierung der Digitalen TTL Eingänge des 
UNO pin 0 (RX<-) und pin 1 (TX->) irgendetwas zu beachten? Ich benötige 
da die TTL Funktion ja nicht, muss diese irgendwie abgestellt werden?

- Ansonsten habe ich erst einmal die Parametrierung bisher so gemacht:

int FF2 = 0;           // Fehlermeldung 2 am Motortreiber am pin 0 
(RX<-)
int FF1 = 1;           // Fehlermeldung 1 am Motortreiber am pin 1 
(TX->)
int RESET = 2;         // RESET Motortreiber
int PWMH = 3;          // PWM connected to digital pin 3
int DIRECTION = 4;     // LED connected to digital pin 4
int GND = 5;           // GROUND Motortreiber

int SENSOR = 8;        // INFRAROTSENSOR Signalleitug GELB
int ENDUNTEN = 9;      // Endtaster bei Spiegel GANZ UNTEN
int ENDVORUNTEN = 10;  // Endtaster bei Spiegel FAST UNTEN
int ENDVOROBEN = 11;   // Endtaster bei Spiegel FAST OBEN
int ENDOBEN = 12;      // Endtaster bei Spiegel GANZ OBEN


Ist das bisher so in Ordnung?

Weiterer Post mit dem ersten Programmversuch folgt noch, ich lese mich 
ein.
Danke für die Hilfe.
Vitali

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> - Kann man die digitalen Ausgänge mit GND bzw. mit +5V OUT
> belegen/Programmieren um z.B. den Infrarotsensor SKU:SEN0019 zu speisen?
> Auch hat der Motortreiber bereits passende Stifte zum Aufstecken auf das
> UNO, nur wäre der GND-Pin des Motortreibers auf einem der Ausgänge des
> UNO.
> Sollte es nicht empfehlenswert sein so weiß ich was zu tun ist.

Der Infrarotsensor könnte noch gehen, das mit dem Motortreiber lässt du 
mal hübsch bleiben ;) . Der Mikrocontroller kann im Grunde nichts 
anderes als +5V oder 0V (im Bezug zu GND) auszugeben. Leider kann er nur 
maximal (allerhöchstens) 40mA Strom ausgeben/einlassen (nennt sich 
source/sink current).
Einfach alle GNDs zusammenschließen und zum Netzteil/GND Pin des Arduino 
packen und gleiches für die 5V.

Vitali A. schrieb:
> - Wie realisiert man üblicherweise elegant den Massepunkt bei Projekten
> mit dem uC-Board?

Gute Frage, alle zusammenlöten und draufstecken vielleicht? Wird dir 
schon was einfallen ;).

Vitali A. schrieb:
> - Kann ich an die Analogen Eingänge (A0 bis A5) auch die Endschalter
> legen? Ist vielleicht unnütz, da ich genügend Digitale da habe.

Die analogen Eingänge sind in erster Linie genauso digitale Eingänge wie 
alle anderen. Man kann sie nur zusätzlich dazu konfigurieren, eine 
analoge Spannung einzulesen. Kannst also ganz normal an die Endschalter 
legen.

Vitali A. schrieb:
> - Ist bei der Belegung und Programierung der Digitalen TTL Eingänge des
> UNO pin 0 (RX<-) und pin 1 (TX->) irgendetwas zu beachten? Ich benötige
> da die TTL Funktion ja nicht, muss diese irgendwie abgestellt werden?

Kann dir leider nicht wirklich folgen was du brauchst. Du kannst einfach 
seriell ausgeben und siehst das ganze dann am PC im Terminal Programm.

Vitali A. schrieb:
> - Ansonsten habe ich erst einmal die Parametrierung bisher so gemacht:

Jetzt weiß ich was du oben meintest. Du KANNST die RX/TX Pins als ganz 
normale IOs verwenden. Allerdings würde ich die lieber offen lassen und 
zum Debuggen als "Sprachrohr" zum PC benutzen. Du hast doch genug Pins 
oder?

> int GND = 5;           // GROUND Motortreiber
Das lässt du bitte bleiben ;).

von Vitali A. (cxv)


Lesenswert?

Ich habe den GND vom Motortreiber von den Pins des UNO genommen, kommt 
mir falsch vor den GND über den uC schalten zu lassen.

Weiterhin mit dem Bereich Setup angefangen:

/*
Badezimmer-Spiegelsteuerung V1.0
 */

int FF2 = 0;           // Fehlermeldung 2 am Motortreiber am pin 0 
(RX<-)
int FF1 = 1;           // Fehlermeldung 1 am Motortreiber am pin 1 
(TX->)
int RESET = 2;         // RESET Motortreiber
int PWMH = 3;          // PWM connected to digital pin 3
int DIRECTION = 4;     // LED connected to digital pin 4

int SENSOR = 8;        // INFRAROTSENSOR Signalleitug GELB
int ENDUNTEN = 9;      // Endtaster bei Spiegel GANZ UNTEN
int ENDVORUNTEN = 10;  // Endtaster bei Spiegel FAST UNTEN
int ENDVOROBEN = 11;   // Endtaster bei Spiegel FAST OBEN
int ENDOBEN = 12;      // Endtaster bei Spiegel GANZ OBEN

void setup() {
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(FF2, INPUT);
  pinMode(FF1, INPUT);
  pinMode(RESET, OUTPUT);
  pinMode(PWMH, OUTPUT);
  pinMode(DIRECTION, OUTPUT);
  pinMode(SENSOR, INPUT);
  pinMode(ENDUNTEN, INPUT);
  pinMode(ENDVORUNTEN, INPUT);
  pinMode(ENDVOROBEN, INPUT);
  pinMode(ENDOBEN, INPUT);
}


Fehlt noch irgendwas? Muss ich die Motorgeschwindigkeit mittels PWM 
irgendwo noch im SETUP einfügen?
Wäre schön wenn noch jemand helfen kann, will aber niemanden bedrängen, 
versuche Fleißig zu PWM was zu lesen.
Danke sehr

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> Fehlt noch irgendwas? Muss ich die Motorgeschwindigkeit mittels PWM
> irgendwo noch im SETUP einfügen?

Logischerweise fehlt da noch ganz viel Programmcode ;).
Sieht soweit aber ganz gut aus denke ich.

von Vitali A. (cxv)


Lesenswert?

@Gast, dachte Du hast mich verlassen. Danke für ein Zeichen Deiner 
Anwesenheit.
Ja mit dem loop wird es nicht einfach, hab eben den RESET des 
Motortreibers auf HIGH gesetzt:
void loop() {
  digitalWrite(RESET, HIGH);  // RESET des Motortreibers auf HIGH 
setzen, sonst Sleep-Mode
}

Scheint ja nur zu laufen wenn dieser auf HIGH ist, hier nachzulesen:
RESET: (Default State: HIGH) The reset pin, when pulled low, puts the 
board into a low-power sleep mode and clears any latched fault flags.
Der Reset Pin hat doch nicht ein HIGH Signal wenn Spannung am 
Motortrieber ist, oder? Dann wird es ja so richtig sein.

Man könnte ja noch einfügen, dass das ganze nur laufen soll, wenn die 
Fehlermeldungen FF1 und FF2 des Motortreibers auf LOW sind,  ist das 
sinnvoll?

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> @Gast, dachte Du hast mich verlassen. Danke für ein Zeichen Deiner
> Anwesenheit.

Ich hab auch zwischen deinen Posts geschrieben, hast du das gelesen?

Vitali A. schrieb:
> Ja mit dem loop wird es nicht einfach, hab eben den RESET des
> Motortreibers auf HIGH gesetzt:

Das gehört meiner Meinung nach noch zum Setup.

Vitali A. schrieb:
> Man könnte ja noch einfügen, dass das ganze nur laufen soll, wenn die
> Fehlermeldungen FF1 und FF2 des Motortreibers auf LOW sind,  ist das
> sinnvoll?

Ja, irgendwo wirst du wohl periodisch diese Pins abfragen und wenn ein 
Fehler aufgetreten ist die ganze Geschichte abschalten, bevor dir alles 
abraucht.

von Vitali A. (cxv)


Lesenswert?

Ich habe ein Blackout, weiß nicht wo oder wie ich anfangen soll, hat 
jemand ein Tipp?
Versuche mich an das Beispiel vom lieben Gast zu beziehen. Als erstes 
soll ja der Sensor ausgelesen werden, die Sache soll aber erst in 
Bewegung gesetzt werden, wenn die Hand vor dem Sensor WAR, aber nicht 
mehr IST (das wäre der Notstopp). Ist da eine Variable mit Zeitangabe 
nötig? Wie macht man das?
Danke sehr und bitte um Entschuldigung für meine Unwissenheit.
Vitali

von Vitali A. (cxv)


Lesenswert?

Hallo Gast,
ich habe tatsächlich Deinen letzten Post nicht gesehen, sorry. Deine 
Berichtigungen habe ich umgesetzt und die Deklaration der Pins sieht so 
aus:

/*
Badezimmer-Spiegelsteuerung V1.0
 */

int FF2 = 2;           // Fehlermeldung 2 am Motortreiber am pin 0 
(RX<-)
int FF1 = 3;           // Fehlermeldung 1 am Motortreiber am pin 1 
(TX->)
int RESET = 4;         // RESET Motortreiber
int PWMH = 5;          // PWM connected to digital pin 3
int DIRECTION = 6;     // DIR-Pin des Motortreibers

int SENSOR = 8;        // INFRAROTSENSOR Signalleitug GELB
int ENDUNTEN = 9;      // Endtaster bei Spiegel GANZ UNTEN
int ENDVORUNTEN = 10;  // Endtaster bei Spiegel FAST UNTEN
int ENDVOROBEN = 11;   // Endtaster bei Spiegel FAST OBEN
int ENDOBEN = 12;      // Endtaster bei Spiegel GANZ OBEN

void setup() {
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(FF2, INPUT);
  pinMode(FF1, INPUT);
  pinMode(RESET, OUTPUT);
  pinMode(PWMH, OUTPUT);
  pinMode(DIRECTION, OUTPUT);
  pinMode(SENSOR, INPUT);
  pinMode(ENDUNTEN, INPUT);
  pinMode(ENDVORUNTEN, INPUT);
  pinMode(ENDVOROBEN, INPUT);
  pinMode(ENDOBEN, INPUT);
  digitalWrite(RESET, HIGH);  // RESET des Motortreibers auf HIGH 
setzen, sonst Sleep-Mode
}

void loop() {
.....


Man könnte bei loop doch gleich zu Anfang prüfen ob die FF1 und FF2 
negativ sind? Geht das ungefähr so?:
if(FF1 == LOW && FF2 == LOW)
...

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> Man könnte bei loop doch gleich zu Anfang prüfen ob die FF1 und FF2
> negativ sind? Geht das ungefähr so?:
> if(FF1 == LOW && FF2 == LOW)
> ...

Der entsprechende Befehl heißt wohl digitalRead 
(http://arduino.cc/en/Reference/digitalRead).
Also
> if(digitalRead(FF1)==LOW && digitalRead(FF2)==LOW){ ausschalten }

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> Versuche mich an das Beispiel vom lieben Gast zu beziehen. Als erstes
> soll ja der Sensor ausgelesen werden, die Sache soll aber erst in
> Bewegung gesetzt werden, wenn die Hand vor dem Sensor WAR, aber nicht
> mehr IST (das wäre der Notstopp). Ist da eine Variable mit Zeitangabe
> nötig? Wie macht man das?

Sowas nennt sich Flankenerkennung. Du willst hier die fallende Flanke 
lesen. Was du also machst ist dir den aktuellen Zustand des Knopfes zu 
speichern und später wieder zu lesen und dann zu vergleichen. Also in 
etwa so:

> int handWARVorSchalter = false;
und dann im loop am Anfang:
> if(handWarVorSchalter==true && digitalRead(SENSOR)==HIGH){ //ich glaube der 
Sensor ist High wenn die Hand davor ist, sonst halt LOW
>    mach was, hier wurde die Hand grad vom Sensor entfernt
> }
> handWARVorSchalter = digitalRead(SENSOR);

von Guest (Gast)


Lesenswert?

Wieso überlegst du dir übrigens nicht einfach mal so, ohne Code, was 
genau wann passieren soll?

Also so nach dem Motto

> Wenn der Schalter vorher gedrückt war und jetzt nicht mehr
>    Wenn der Spiegel oben ist
>        Spiegel runterlassen
>    Wenn der Spiegel unten ist
>        Spiegel hochfahren
>    Wenn der Spiegel mitten in der Bewegung ist (nach Notstop)
>        Weiterfahren

> Wenn der Schalter gedrückt ist und der Spiegel sich gerade bewegt
>    Anhalten

> Wenn nicht FF1==1 UND FF2==1
>    Anhalten

> Wenn ....

Das hilft ;)

von Vitali A. (cxv)


Lesenswert?

Der Sensor ist LOW wenn Hand davor ist. Wie mache ich das dann mit der 
Variable "HandWarVorSensor"? Das gilt ja nicht mehr:
handWARVorSchalter = digitalRead(SENSOR); Da ja negiert werden muss?

von Guest (Gast)


Lesenswert?

Vitali A. schrieb:
> Der Sensor ist LOW wenn Hand davor ist. Wie mache ich das dann mit der
> Variable "HandWarVorSensor"? Das gilt ja nicht mehr:
> handWARVorSchalter = digitalRead(SENSOR); Da ja negiert werden muss?

Nein da muss nix negiert werden. Das ganze basiert auf dem 
Zeitunterschied zwischen dem handWARVorSchalter = ... und dem Moment in 
dem du prüfst ob die Hand aktuell vorm Schalter war. Stichwort 
Flankenerkennung.

von Vitali A. (cxv)


Lesenswert?

@Gast, würdest Du mir vielleicht eine Dienstleistungen anbieten? Ich 
würde dich bitten mir eine Mail zu schreiben 
(gnomicsbuy[at]googlemail.com)? Ich benötige ein fertiges Programm um 
daran zu lernen und nicht zuletzt damit das hier nicht unendlich Zeit 
schluckt und das Forum zumüllt.
Ich wäre sehr dankbar für eine Rückmeldung.
Vitali

von Guest (Gast)


Lesenswert?

Hast ne email.

von moolder (Gast)


Lesenswert?

Der SKU:SEN0019 Adjustable infrared sensor switch von DFRobot hat 
wirklich eine mechanische Einstellmöglichkeit: Er hat eine kleine 
Stellschraube an der Rückseite, sowie eine LED die anzeigt ob er ein 
Hindernis erkennt oder nicht. Außerdem kommt er mit zwei Schraubringen 
und hat außen komplett ein Gewinde, so dass man ihn mit den beiden 
Ringen irgendwo festklemmen oder durch eine Oberfläche mit Loch stecken 
und dann befestigen kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.