Der Rasenrobo wurde zwischenzeitlich umgebaut. Bilder gibt´s auf Seite 14 und ein Video mit dem letzten Stand der Technik auf der letzten Seite 28. Die Ortung des rasenrobo mit einer WLAN-Camera zur Navigation gibt´s auf Seite 29 und 30
Hallo liebe Freunde von Robos und Rasenmäher,
es ist das erste Mal, dass ich mich im Forum melde. Als Gast habe ich ettliche nützliche Informationen aus dem Forum erhalten und möchte deshalb zeigen was daraus geworden ist. Ich denke, es ist am geeignetsten bereits alle wichtigen und für euch hoffentlich interessante Punkte komplett in einen Beitrag wiederzugeben. Dieser Beitrag ist deshalb etwas lang geraten.
http://www.Rasenrobo.de/IMGP1210.jpg
http://www.Rasenrobo.de/IMGP1201.jpg
Mein Rasenrobo hat die ersten praktischen Einsätze erfolgreich hinter sich.
Chassis: Unten 2 parallele Regalschienen. Eine Metallschiene quer. Darüber Platte aus Flugzeugsperrholz (Modellbau, 4 mm, sehr stabil und eben)
RBNFRA-Board
Navigation mit Begrenzungsschleife (4 Sensoren) und Kompass CMPS03. Neigunssensor. 1 Sharp GP2D12. 9 Mikroschalter.
Kommunikation zum PC über easy radio: ER900TRS-02. RF04/900 USB Telemetrie Modul
Antrieb: 2 x RB35 Getriebe 1:200, Drehzahlmessung und Odometrie mit Hall-Sensoren.
Rasenmähermotor : brushless Torcman 420-20 ohne Getriebe (Abgeschirmt mit Mu-Metall). Regler: Jeti 40-O- F, Drehzahlmessung optisch mit CNY70.
Sichel: Kunststoffscheibe mit 3 beweglichen 4 cm langen Klingen
Akkus 10 x 2000 und 12 x 3600 NiMH.
(Ultraschallentfernungsmesser SRF10 eingebaut, wegen Störanfälligkeit nicht verwendet)
Grundsätzliches zur Navigation: Für den Rasenrobo ist absolut erforderlich, dass er eine Begrenzungsline auf cm genau erkennt, da ich ihn ungern aus unserem Teich fischen möchte. D.h. GPS auch mit Referenzmessung, Peilung mit rotierender IR – Strahl nach VOR – Prinzip, US-Entfenungsmessung, Triangulation mit IR – Baken sind zwar reizvoll aber entweder zu ungenau oder zu unsicher, da mechanisch anfällig.
Induktionsschleife: Über einen Timer - gesteuerten MOS-FET (noname aus altem Regler. evtl. BS 170 verwenden) wird ein kurzer Strompuls durch die Induktionsschleife geschickt. Die steil ansteigende Flanke induziert im Sensor eine Spannung deren Polarität (z.B. positiv) davon abhängt, ob der Sensor innerhalb oder ausserhalb der Induktionsschleife liegt. Anschliessend bricht die Spannung vom Netzteil ein, da fast ein Kurzschluss über die Induktionsschleife vorliegt. Der Abfall ist aber flacher und induziert eine geringere, entgegengesetzte Spannung (negativ) im Sensor. Beim kurz darauf folgenden Abschalten der Induktionsspannung wird durch eine Freilaufdiode ebenfalls die Flanke des Spannungsabfalls eher flach gehalten. D.h. der im Sensor gemessene 2. entgegengesetzte Spannungsimpuls (negativ) ist geringer und kann auch durch die zeitliche Abfolge leicht vom 1. auseinandergehalten werden. Als Netzteil verwende ich, wegen des kräftigen Strompulses, eins für Notebooks 15V (3,5A)-24V 15V Einstellung reicht aber locker aus.
Schaltung:
http://www.Rasenrobo.de/ Induktionsgenerator.JPG
Sensor: Spule mit Eisenkern aus einem alten Relais (z.B. 24V, 300 Ohm Innenwiederstand). Die induzierte Spannung und deren Polaritität wird über einen Operationsverstärker gemessen und über den ADC ausgewertet. Die Spule nur an OP anzuschliessen war bei mir nicht erfolgreich. Die Zeitdauer des Spannungsimpulses ist zu kurz. D.h. Kondensator zur Spule parallel schalten. Damit aber kein Schwingkreis entsteht, muss über einen, ebenfalls parallel geschalteten, Widerstand der Spannungsabfall gedämpft werden. Die u.g. Werte habe ich durch Versuch und Irrtum. Vielleicht kann das ja jemand von Euch optimieren.
Schaltung:
http://www.Rasenrobo.de/ Induktionssensor.JPG
Im Programm wird in einer Schleife gewartet bis am ADC eine größere Schwankung auftritt. Dafür werden die Maximal- und Minimalwerte des ADC seit Einstieg in die Schleife bestimmt. Bei entsprechender Differenz Ausstieg aus der Schleife und Bestimmung ob eine Spannungsausschlag nach + oder – erfolgt ist. Kommt kein Impuls ist der Sensor genau über der Schleife. Liefern alle Sensoren keinen Impuls ist die Induktionsschleife nicht aktiv oder kaputt und der Rasenrobo schaltet sich ab.
Programmschnitzel in BASIC für 4 Sensoren.
Code:
Max0 = 0 : Max1 = 0 : Max2 = 0 : Max3 = 0
MIN0 = 1024 : MIN1 = 1024 : MIN2 = 1024 : MIN3 = 1024
B0 = getadc(0): B1 = getadc(1): B2 = getadc(2): B3 = getadc(3)
Ii = 0
For Iii = 1 To 1000
D0 = getadc(0) : D1 = getadc(1): D2 = getadc(2): D3 = getadc(3)
If D0 > Max0 Then Max0 = D0
If D1 > Max1 Then Max1 = D1
If D2 > Max2 Then Max2 = D2
If D3 > Max3 Then Max3 = D3
If D0 < Min0 Then Min0 = D0
If D1 < Min1 Then Min1 = D1
If D2 < Min2 Then Min2 = D2
If D3 < Min3 Then Min3 = D3
If Ii = 1 Then Exit For ‘nach Ansprechen eines Sensors noch ein Durchgang
D0 = Max0 - Min0
If D0 > 50 Then Ii = 1
D1 = Max1 - Min1
If D1 > 50 Then Ii = 1
D2 = Max2 - Min2
If D0 > 50 Then Ii = 1
D3 = Max3 - Min3
If D0 > 50 Then Ii = 1
Next
D0 = Max0 : D0 = D0 + Min0 : D0 = D0 - B0 : D0 = D0 - B0
D1 = Max1 : D1 = D1 + Min1 : D1 = D1 – B1 : D1 = D1 – B1
D2 = Max2 : D2 = D2 + Min2 : D2 = D2 - B2 : D2 = D2 - B2
D3 = Max3 : D3 = D3 + Min3 : D3 = D3 - B3 : D3 = D3 - B3
‚D > 0 Sensor innen. D< 0 Sensor aussen
http://www.Rasenrobo.de/IMGP1219.jpg
Kompass und Induktionssensor
Prinzip der Kurssteuerung:
Robot kommt an Begrenzung > Neues Kurssoll = Kompasskurs + 60 Grad (z.B.)
Berechnung Kursabweichung = Kurssoll – Kompasskurs
Kursabweichung > 10 Grad: linker Motor volle Kraft zurück, rechter Motor volle Kraft voraus
Kursabweichung < 10 Grad: linker Motor 0, rechter Motor volle Kraft voraus
Kursabweichung < 3 Grad beide Motoren volle Kraft voraus
Dann Beschränkungen durch Sensoren
Ein vorderer Sensor aktiv >> beide Motoren zurück
Linker hinterer Sensor aktiv >> linker Motor darf nicht zurückdrehen
Rechter hinterer Sensor aktiv >> rechter Motor darf nicht zurückdrehen
Rasenmähermotor: Aus meiner Erfahrung mit der Modellfliegerei, kam primär ein brushless Aussenläufer in Betracht, da diese einen hohen Wirkungsgrad und insbesondere ein hohes Drehmoment auch bei niedriger Drehzahl besitzen. Nach Beratung durch Herrn Zaiser von Torcman www.torcman.de wurde ein Torcman 420-20 geordert. Dieser wird normalerweise in Segler bis 7,5 Kg, Motormodelle bis 4 Kg eingesetzt und zieht diese mit etwa 5 m/s hoch. Der Motor ist eigentlich für 600 bis 1000 W ausgelegt. Im Rasenmäher wird ihm nur eine Leistung von etwa 40 bis 100 W abverlangt. Der Vorteil ist aber ein sehr hohes Drehmoment durch eine relativ breite Glocke mit 14 Magneten. Deshalb kann auf ein Getriebe verzichtet werden. Der Motor ist sehr leise und im Freien fast nicht zu hören. Dichtes Gras zu schneiden ist kein Problem. Ein kleinerer Motor würde eohl doch reichen.
http://www.Rasenrobo.de/IMGP1217.jpg
Als Sichel verwende ich eine Kunststoffscheibe mit 3 beweglichen Klingen. Der Sicherheit halber habe ich mir diese komplett von AutoMower als Ersatzteil für etwa 10 Euro besorgt. Die Platte wird von zwei Zahnrädern (oben und unten), welche mit Madenschrauben an der 6mm Welle befestigt sind, gehalten und damit doppelt gesichert.
http://www.Rasenrobo.de/IMGP1222.jpg
http://www.Rasenrobo.de/IMGP1223.jpg
Der Aussenläufer erzeugt natürlich ein starkes rotierendes Magnetfeld und stört die Induktionssensoren total. Zur Abschirmung musste deshalb spezielle Mu-Metallfolie mit 0,1 mm Stärke in 3 Schichten um den Rotor gewickelt werden. Mu-Metall ist mit einer Permeabilität von 8000 DAS Metall zur Magentfeldabschirmung. Quelle: www.db-electronic.de, Kiefersfelden. Ausserdem sind die Sensoren parallel und in gleicher Höhe zum Motor angeordnet. Damit wird ebenfalls die induzierte Spannung stark reduziert. Aus Symmetriegründen ist theoretisch die Induktion bei exakt paralleler Stellung sogar gleich Null. Die Drehzahl wird durch einen optischen Sensor CNY70 gemessen und geregelt.
Ich habe festgestellt, dass auch ein Notebook in etwa 10 cm Entfernung die Sensoren noch deutlich stört. Auch muss der Antriebsakku etwa 10 cm entfernt von den Sensoren angeordnet werden. Bei den Antriebsmotoren reichten je 2 Statorringe (Graupner) zur Abschrimung aus. Die Motoren werden auch nicht schlagartig eingeschaltet, sondern schnell aber kontinuierlich über PWM rauf bzw. runtergeregelt.
Aus Bedenken wegen Verschmutzung habe ich bei den Antriebsmotoren auf Drehzahlmessung durch HALL – Sensoren gesetzt. 16 kleine Magnete (Conrad PIC-M0204 mit 3 mm Durchmesser) sind in einer Holzscheibe an der Antriebsachse angeordnet. 2 unipolare Hall-Sensoren USB620 sitzen unmittelbar nebeneinander, dicht vor der Scheibe.
Tip: nicht die empfindliche Vorderseite zu den Magneten ausrichten, sondern die Stirnseite. Dann gibt’s einen eindeutigen Impuls bei Vorbeiziehen des Magneten durch Wechsel der Polarität im Hall-Sensor.
2. Tip Als Versorgungsspannung für den Hall-Sensor nicht 5 V sondern z.B. 12 V verwenden und nur den Ausgang über einen Pullup-Widerstand an 5 V anschliessen. Hierdurch höhere Sensitivität und der Abstand zu den Magneten ist nicht so kritisch.
Ein Hall-Sensor triggert den Interrupt. In der IR-Routine wird der Zustand des 2. Sensors abgefragt und so die Drehrichtung bestimmt. (Abstand zwischen den Magneten weiter als zwischen den Hall-Sensoren).
http://www.Rasenrobo.de/IMGP1220.jpg
http://www.Rasenrobo.de/IMGP1224.jpg
Die beste Position für den Kompass CMPS03 wurde mit einem magnetischen Kompass bestimmt. (Oder Auspendeln mit einem, an einem Faden aufgehängten Neodym-Magneten). Für den Kompass ist leider ein etwa 8 cm hoher Sockel erforderlich.
Als Stosssensoren habe ich etliche Mikroschalter angebracht. Als Stossstange dient der gesamte Deckel oder Rahmen über dem Robo. Der Deckel ist einfach mit einigen Federn oder Gummi in der Schwebe gehalten. So reagieren die Mikroschalter egal wo der Rasenrobo andotzt.
Tip: Für den Deckel oder Rahmen leichte Platten mit Aluminiumbeschichtung zur Wäremisolierung (Obi) verwenden. Die Isolierplatten sind meiner Meinung nach wesentlich besser als z.B. Depron, Styropor oder Styrodur, da sehr stabil, leicht und einfach zu bearbeiten sind, ohne dass in der gesamten Wohnung Flocken von Styropor an einem kleben bleiben und sehen ausserdem besser aus.
http://www.Rasenrobo.de/IMGP1221.jpg
http://www.Rasenrobo.de/IMGP1227.jpg
Kommpunikation zum Notebook per easy radio 800Mhz.
Progammschnitzel im Robo
Code:
Print "x"; ‘Markiert Anfang
Print Hex(servo); ‚geht auch an Coprocessor zur Steuerung des Torcman
Print Hex(volt) ;
Print Hex(volt2) ;
Print Hex(kurs) ;
Print Hex(entf) ;
Print Hex(d0) ;
Print Hex(d1) ;
Print Hex(d2) ;
Print Hex(d3) ;
Print Hex(rpmTorcman) ;
Print Hex(sharp) ;
Print Hex(Radsensor1);
Print Hex(Radsensor2);
Print Hex(kurssoll);
Print Hex(Essi2); ‚Empfangsstärke des easy radio
Print Chr(13); ‘Abschluss
‘mit folgender loop kann Empfangsstärke des Easyradio bestimmt werden
Essi2 = 1000
Do
Essi3 = getadc(5) : If Essi2 > Essi3 And Essi3 > 5 Then Essi2 = Essi3
Loop Until Ischarwaiting() = 1
Input Inputstring
Programm in VisualBasic im PC
Code:
Private Sub MSComm1_OnComm()
buffer = buffer + MSComm1.Input
End Sub
Sub Hauptprogramm
Do: DoEvents: i = InStr(buffer, "x")
If InStr(buffer, Chr(13)) > 10 And i > 0 Then ‘Buffer komplett ?
DoEvents
sensor0 = Val("&h" + Mid(buffer, i + 1, 4)): Text2(3) = sensor0
sensor1=.......
........ etc.
buffer = "": Text4 = Timer - t: t = Timer: MSComm1.Output = message ‘Sendung an Robo
End If
If Timer > t + timedif Then Fehler = Fehler + 1: t = Timer: buffer = "": MSComm1.Output = message ‘falls keine Meldung vollständig erhalten wird, erfolgt trotzdem Aufnahme der Verbindung zum Robo nach timedif
Loop
End Sub
Zu Beginn habe ich die Verbindung genützt, um die Sensordaten komplett in den PC zu übertragen, dort den neuen Kurs für den Rasenrobo zu berechnen und diese zurück an den PC zu schicken. Dadurch war es etwas einfacher das Programm zur Steuerung zu entwerfen. Inzwischen ist das Steuerprogramm ganz im Robo und der schickt nur Daten zur Information zurück (Versorgungsspannungen, Kurs, Sensordaten). Für einen geordneten Datenverkehr ist erforderlich, dass jede Stelle abwechselnd sendet und empfängt. Das Roboprogramm stopt z.B. bei Input Inputstring bis Zeilenvorschub (vbcrlf) eintrifft. Dann sendet Robo und schließt mit chr(13) ab. PC-Programm wartet in Schleife bis Chr(13) eintrifft und sendet dann seine Daten.
Alle schweren Teile Akkus wurden möglichst weit nach hinten verlegt. Dadurch werden die Vorderräder entlastet und der Robo dreht auch in unebenen Gelände oder auf Rasen.
Das wär´s fürs Erste. Mal sehen, ob ich mich zu einem 2. Bericht aufraffen kann, nämlich über die Schwierigkeiten - z.B. lange Print Befehle beissen sich mit Interrupt, ein Antriebsmotor schaltet sich ohne jeden ersichtlichen Grund nach einigen Minuten aus - deren Lösung und Irrwege (Induktionsschleife mit HF).
Verbesserungsvorschläge sind natürlich gern gesehen !!
Video:
http://www.youtube.com/watch?v=6B8TxPeCObI
http://www.youtube.com/watch?v=v-EaSPodC-I
Viele Grüsse
Lesezeichen