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.
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.
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
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
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
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.
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.
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
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.
Sorry, mein Link war kaputt, hier der richtige: dfrobot.com/wiki/index.php?title=Adjustable_Infrared_Sensor_Switch_(SKU: SEN0019)
Wenn man zwei Sensoren benutzt, kann man auch die Richtung beim Betätigen festlegen...
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?
@ 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
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.
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
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
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
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?
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
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 ;).
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
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.
@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?
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.
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
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) ...
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 }
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);
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 ;)
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?
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.
@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
Hast ne email.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.