PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ...und noch ein Rasenmäher Roboter.....



highblackbon
20.10.2012, 13:35
Hallo zusammen!

Erstmal ein grosses Lob und einen Dank an das Forum , so ganz ohne wäre ich nie soweit gekommen......
Nach vielen Monaten des mitlesens und bastelns möchte ich nun hier mal mein Projekt 1 vorstellen .
Es ist ein Rasenmäher geworden .
Gleich vorweg möchte ich anmerken das das Projekt ohne vorherige Cad Zeichnung entstanden ist , wie an den vielen Fehlbohrungen denk ich auch zu sehen sein dürfte .
Das nächste Projekt wird dem entsprechend anders , besser geplant !
Zum Projekt 1 :
Für das Chassis habe ich Aluprofile verwendet an denen ich Alublech zum Teil mit Nieten zum Teil mit Schrauben befestigt habe ( Bild 1).
Für den Antrieb habe ich RB 35 Motoren , mit einer Übersetzung 1:100 , verwendet . (Die Räder sind in jedem Baumarkt erhältlich .)
Gesteuert werden diese mit dem RN Motorcontrol . Die Hauptplatine ist ein RN Control 1.4 .
Zur Hinderniserkennung habe ich vorn zwei SRF 02 eingebaut , an den Seiten je einen Entfernungssensor Sharp GP2D120 .
Das Mähwerk wird von einem RB 35 Motor angetrieben ( ohne Getriebe ) , die Messer sind normale Cutterklingen .
Um seine zu mähende Fläche zu begrenzen verwende ich eine original Induktionsschleife von "automower-center /Endress GmbH ".
Den Sensor zu Erkennung dieser Schleife habe ich nach der Vorlage aus dem RN Wiki gebaut .
Programmiert ist das ganze in Bascom .
Als Stromversorgung dient ein Laptopakku mit 11,1 V und 4800mAh.
Der "Kopf" war ursprünglich für die Unterbringung des Kompassmoduls gedacht , ist im Moment aber ohne Funktion.....
So das wars erstmal.....Bilder und Videos werde ich in kürze noch ergänzen.....

Hier schonmal ein video : http://youtu.be/bWuawaIkeXQ

Searcher
20.10.2012, 16:21
Klasse! und danke für die Vostellung. Ich mag sowas wirklich gerne sehen!

Viel Erfolg weiterhin
Gruß
Seacher

Sebastian Meyer
23.10.2012, 15:45
Ich kann mich Searcher nur anschließen!

Danke für diese tolle ideen Anregeung ! :)

Manf
23.10.2012, 18:25
Das gefällt mir auch sehr gut.
Wenn man noch nicht alles weiß dann kann man ja die Aufgabenstellung auch von der praktischen Seite her einkreisen.
Man gewinnt dann dort auch schon rasch Erfahrung.

Das erste Bauwerk war das aber wohl ohnehin nicht.
Der Hund verrät mit seinem Verhalten einigen Umgang mit solchen Erscheinungen.

highblackbon
23.10.2012, 22:23
Hallo...
Zuerst mal danke für die angenehme Resonanz. Ich hatte schon befürchtet es interessiert niemanden .
@ Manf - das Projekt lief schon eine Weile , mit dem Chassis hatte ich schon vor zwei Jahren angefangen und das Ganze immer
als Winterprojekt weitergeführt . Nun hatte ich im letzten Winter einige "Durchbrüche" bzw. helle Momente , wo mir vieles klar geworden ist , und Sachen wie Ulraschallsensor und IR Sensor sich ansteuern liessen. Demnach war ich Frühjahr soweit das Mähwerk zu installieren und die Schleife zu verlegen sowie den Sensor dazu zu bauen .Dannach kam es im Frühsommer zu ersten fahr und mähtests, ich denke dadurch ist der Hund etwas abgehärtet , was das betrifft.
Es ist wirklich das erste Projekt dieser Art.....davor hab ich mich mit Beamer modding und anderen Kleinigkeiten beschäftigt .

nero123
24.10.2012, 14:13
Hallo
Super Teil dass Du da gebaut hast.
Kannst Du noch mehr Detailbilder, Fotos und eventuel auch das Program hier einstellen.
Danke

highblackbon
28.10.2012, 12:37
Mahlzeit , so , wie gewünscht, noch ein paar Bilder und ein Auszug des codes

235732357423572

__________________________________________________ __________________________________________________ _


'################################################# ##
''''''''''''''''''' FAHRPROG 2.1 '''''''''''''''''''
'################################################# ##



Declare Function Srf02_firmwarel(byval Slaveid As Byte) As Byte
Declare Function Srf02_entfernungl(byval Slaveid As Byte) As Integer
Declare Function Srf02_firmwarer(byval Slaveid As Byte) As Byte
Declare Function Srf02_entfernungr(byval Slaveid As Byte) As Integer

$regfile = "m32def.dat"
$framesize = 100
$swstack = 100
$hwstack = 100

$crystal = 16000000 'Quarzfrequenz
'''''''''''''''''''''lcd''''''''''''''''''

Config Lcd = 20 * 4 'wir verwenden ein 4 x 20 Zeichen Display
Cursor On

' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''

Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''
Config Adc = Single , Prescaler = Auto , Reference = Internal 'Für Tastenabfrage und Spannungsmessung
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''
Declare Sub Ind
Declare Sub Batteriespannung
Declare Sub Notstopp
'''''''''''''''''''''''''''''''''''''''''''
Declare Sub Fahrt1()
Declare Sub Rechtsfahrn()
Declare Sub Linksfahrn()
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''
Const Ref = 5 / 1024 'Für Batteriespannungsberechnung
Const Entf = -1
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''
Dim Entfernungl As Integer
Dim Entfernungr As Integer
Dim Volt1 As Integer
Dim Volt2 As Integer
Dim Grad As Integer
Dim Grad2 As Integer
Dim I As Integer
Dim N As Integer
Dim Ind As Integer

Dim Zentrum As Single
Dim Zentrum2 As Single
Dim Volt As Single

Dim Grad3 As Single
Dim Akku As Single
Dim Akku1 As Single

Dim Himmelsrichtung As Word
Dim Temperatur As Word
Dim Zentrum1 As Word
Dim Strom1 As Word
Dim Strom2 As Word
Dim Strom3 As Word
Dim Wsl As Word
Dim Wsr As Word

Dim W1 As Word

Dim Wertlow As Byte
Dim Werthigh As Byte
Dim I2cdaten(6) As Byte
Dim V As Byte

Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ' replace ? with number (0-7)
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''
Cls

I2cinit

I2cstart
I2cwbyte &H58
I2cwbyte 35 'Kennung
I2cwbyte 2 'Befehl
I2cwbyte 3 'Motorwahl
I2cwbyte 0 'Geschwindigkeit
I2cstop
Cls
Locate 2 , 1
Lcd Chr(1)
Waitms 200
Locate 2 , 2
Lcd Chr(1)
Waitms 200
Locate 2 , 3
Lcd Chr(1)
Waitms 200

Locate 2 , 4
Lcd Chr(1)
Waitms 200
Locate 2 , 5
Lcd Chr(1)
Waitms 200
Locate 2 , 6
Lcd Chr(1)
Waitms 200
Locate 2 , 7
Lcd Chr(1)
Waitms 200
Locate 2 , 8
Lcd Chr(1)
Waitms 200
Locate 2 , 9
Lcd Chr(1)
Waitms 200
Locate 2 , 10
Lcd Chr(1)
Waitms 200
Locate 2 , 11
Lcd Chr(1)
Waitms 200
Locate 2 , 12
Lcd Chr(1)
Waitms 200
Locate 2 , 13
Lcd Chr(1)
Waitms 200
Locate 2 , 14
Lcd Chr(1)
Waitms 200
Locate 2 , 15
Lcd Chr(1)
Waitms 200
Locate 2 , 16
Lcd Chr(1)
Waitms 200
Locate 2 , 17
Lcd Chr(1)
Waitms 200
Locate 2 , 18
Lcd Chr(1)
Waitms 200
Locate 2 , 19
Lcd Chr(1)
Waitms 200
Locate 2 , 20
Lcd Chr(1)
Wait 1
Cls
Locate 2 , 3
Lcd " moin =) "



Wait 1
I2cstart
I2cwbyte &H58
I2cwbyte 35 'Kennung
I2cwbyte 2 'Befehl
I2cwbyte 3 'Motorwahl
I2cwbyte 0 'Geschwindigkeit
I2cstop
Wait 1
I2cstart
I2cwbyte &H5A
I2cwbyte 35 'Kennung
I2cwbyte 2 'Befehl
I2cwbyte 3 'Motorwahl
I2cwbyte 0 'Geschwindigkeit
I2cstop



Sound Portd.7 , 400 , 350
Waitus 500
Sound Portd.7 , 500 , 650
Waitus 700
Sound Portd.7 , 300 , 650


For I = 0 To 1 ' interne Pullup Widerständ ein,bis auf Batteriespannungsmessungsport

Wait 1
Cls
Locate 1 , 1
Lcd "SRF02 L Ultraschall-Firmware Version:" ; Srf02_firmwarel(&He2)


Wait 1
'Temperatur abrufen
I2cstart
I2cwbyte &H58
I2cwbyte 35 'Kennung
I2cwbyte 44 'Befehl
I2cstop
Waitms 200
I2cstart
I2cwbyte &H59
I2crbyte Wertlow , Ack
I2crbyte Werthigh , Nack
I2cstop
Temperatur = Makeint(wertlow , Werthigh )
Grad = Temperatur / 1.6
Grad2 = Grad + 5
Cls

Locate 2 , 3
Lcd "BOARD Temperatur: "
Locate 3 , 10
Lcd ; Grad2 ; " C"
Wait 2
Call Batteriespannung()
Cls
Locate 1 , 1
Lcd "AKKU Spannung : " ; Volt ; " Volt"
Wait 2


Sound Portd.7 , 600 , 150
Waitus 500 'BEEP
Sound Portd.7 , 200 , 350
Waitms 200 'BEEP
Sound Portd.7 , 400 , 650
Waitms 200
Sound Portd.7 , 200 , 350 'BEEP
Sound Portd.7 , 400 , 250
Sound Portd.7 , 600 , 300
Waitms 500
Sound Portd.7 , 200 , 600
Waitms 500
Sound Portd.7 , 400 , 800
Sound Portd.7 , 500 , 250
Wait 1
Config Pina.0 = Input
Config Pina.1 = Input
Config Pina.2 = Input
Cls
Locate 3 , 3
Lcd "WALL-E 2.0 ;) "
Wait 2
V = 1

Start Adc
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''
Do

Entfernungr = Srf02_entfernungr(&He0)

Entfernungl = Srf02_entfernungl(&He2)


For I = 0 To 4
Start:
Wsr = Getadc(0)
Volt = Wsr * Ref


Wsl = Getadc(1)
Volt = Wsl * Ref

For I = 2 To 500
Ind = Getadc(2)
Volt1 = Ind * Ref
Volt2 = Volt1 * 10000

''''''''''''''''''''''''''''''''''
Next I

Cls
Locate 1 , 1
Lcd "r " ; 0 ; "ADC: " ; Wsr ;

Locate 2 , 9
Lcd "l" ; 1 ; "ADC: " ; Wsl ;
Waitms 100

Locate 3 , 1
Lcd ": " ; Ind
If Ind > 5 Then Gosub Ind

If Entfernungl > 50 Then Gosub Fahrt1
If Strom2 > 1000 Then Gosub Hind3
If Strom1 > 1000 Then Gosub Hind4
If Strom3 > 900 Then Gosub Notstopp
If Entfernungl < 25 And Entfernungr > Entfernungl And Entfernungl > -1 Then Gosub Linksturn
If Entfernungr < 25 And Entfernungr < Entfernungl And Entfernungr > -1 Then Gosub Rechtsturn
If Entfernungr < 50 And Entfernungr < Entfernungl And Entfernungr > -1 And Wsl < 80 Then Call Linksfahrn
If Entfernungl < 50 And Entfernungl < Entfernungr And Wsr < 80 Then Call Rechtsfahrn
If Entfernungl = -1 And Entfernungr = -1 Then Gosub Fahrt1

If Wsr > 500 Then Gosub Rechtsturn
If Wsl > 500 Then Gosub Linksturn
If Wsl > 100 Then Gosub Schnellrechtsfahrn

If Wsr > 400 And Wsl > 400 Then Gosub Hind3
If Wsr > 100 Then Gosub Schnelllinksfahrn





Next I



Loop

Manf
28.10.2012, 13:36
Ich habe nur den Code in ein Code Fenster geschoben, so bleibt der Thread etwas übersichtlicher.

highblackbon
28.10.2012, 15:30
Dankeschön ! ;)