Liste der Anhänge anzeigen (Anzahl: 2)
Rasenrobo, Induktionsschleife, Räder
Hi,
@MichaelM:
zum Schleifensignal: Habe mir noch mal das Signal auf dem Osci angeschaut. Sieht
auch auf der Rückflanke sehr gut (steil) aus. Habe ein Bild dazu geschossen. Ich glaube, mit etwas Phantasie kann man erkennen, dass das Rechtecksignal steile Flanken hat. Habe versuchsweise den 10000 µF-C entfernt; es ist kaum ein Unterschied am Osci festzustellen. Wundert mich auch nicht wirklich, denn C liegt zwischen U und GND und wirkt doch als reiner Puffer. Wenn der MosFet durchschaltet, also die Versorgungsspannung über die Schleife (bei mir 2,6 OHM) nach GND für relativ kurze Zeit (5ms) kurzschließt, stützt das C doch durch seine Ladung die vom Netzgerät bereitgestellte – begrenzte - Power. Oder anders formuliert: C ersetzt ganz oder teilweise die am Netzgerät durch den Fast-Kurzschluss zusammenbrechende Leistung und hat dann - in meinem Fall - 195 ms Zeit, sich wieder aufzuladen.
Sperrt der MosFEt, wird C wieder aufgeladen. Hierdurch könnte die Rückflanke etwas flacher sein. Am Osci kann ich aber nichts Derartiges beobachten. Zwischen +-Pol von C und dem Messpunkt liegt aber immer noch der Schleifenwiderstand von 2,6 Ohm (und die Induktivität? keine Ahnung ob diese hier ins Gewicht fällt). Kann es daran liegen? Oder mein Notebooknetzteil, das ich hier verwende, hat so viel Reserve, dass das C nur unwesentlich belastet wird.
zu meinen Rädern:
Bingo! Der Raddurchmesser war zu gering: Auf dem Rasen lag der Robo zu tief. Konnte so schnell nichts Passendes finden und habe dann Streifen vom Teppichboden aufgeklebt.
Das ist inzwischen aber auch Geschichte. Robo hat neue Motoren und neue Räder aus Plexiglas.
Gruss jguethe
Generator für Induktionsschleife
Hallo homedom,
mit dem Schleifengenerator habe ich noch nie Probleme gehabt. Der FET (ILR3803) wird ungekühlt – auch bei 22 V und Spitzenstrom > 5A - nicht einmal handwarm, die Diode vom Typ 1N4007 !!! hat sich bisher auch noch nicht verabschiedet. Auch hier kann ich keine Erwärmung feststellen.
Die Betriebszeit des Generators kann ich schon in Wochen angeben.
Die übrigen Daten sind wie folgt:
Vorwiderstand am Gate 10k
Ansteuerung über Ausgangsport eines Attiny2313
Ohmscher Widerstand der Schleife ( > 100 m) 2,6 OHM
Speisespannung 12 – 22 V
Impulsdauer 5ms, Pause 195 ms
Das Oscillogramm (siehe meinen Beitrag etwas weiter oben) zeigt ein nahezu rechteckiges Signal mit steilen Flanken, d.h. FET schaltet schlagartig voll durch und sperrt ebenfalls schlagartig. Deshalb wird er auch nicht warm.
Mein Notebooknetzteil liefert bei 22 V noch 5A ; der dicke Elko von 1mF sollte dazu führen, dass der Spitzenstrom noch etwas höher ist.
Wenn dein FET sehr warm wird, sind die Impulsflanken wahrscheinlich nicht so steil.
Bei dieser Gelegenheit eine Frage zum Thema Motor.
Wie ich nun festgestellt habe, reicht der Typ RB35 auch nicht. Ich brauche auf Rasen und um kleine Steigungen zu bewältigen, deutlich stärkere Motoren und schwanke inzwischen zwischen DENSO 730557-7030 und ARM922696716-03 bzw. TRICO (alle bei Pollin).
Kann mir jemand sagen, mit welchem Gewicht ich bei diesen Motoren rechnen muss; auf das g genau muss es nicht sein.
Danke im voraus.
Gruß an alle
jguethe
I
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe seit Langem wieder mal weitergebaut. Die Drehgeber in meinen Motoren scheinen recht vielversprechend zu sein, die endgültige Auswertung und die Drehzahlregelung sind aber noch nicht fertig.
Siehe auch hier:
https://www.roboternetz.de/phpBB2/ze...hlight=#379927
Ich habe momentan kein TTL-Flipflop, evtl. werde ich mir aber mit einem PIC12 oder PIC16 behelfen.
Gruß,
Michael
Nach der Winterpause; Ortung mit Bildanalyse
Hallo
vor Kurzem habe ich meinen Rasenrobo nach der Winterpause wieder in Betrieb genommen und gebe deshalb mal eine kurze Statusmeldung ab. Den Akku und beide Motoren habe ich ausgetausch. Einer der Motoren (RB35) ist zum Schluss heiß gelaufen. Den Betrieb mit 12 Zellen hat er mir nach 3 Jahren übel genommen. Die neuen Motoren sind 540er mit 810:1 Untersetzung (Conrad). Die haben allerdings mehr Strom gezogen als die RB35 weshalb der Motortreiben von dem RN-Board gegrillt wurde. Nach Austausch vom Motortreiber und Anpassen der PWM im Programm verrichtet der Rasenrobo wieder seine Gartenarbeit wie gewohnt. Mit den neuen Akkus werkelt er 1 Stunde und 50 min.
Zur Ortung des Rasenrobo habe ich schon diverse Versuch mit US und IR gemacht. War alles nicht so der Hit. Deshalb ein neuer Versuch mit Bilderkennung: Der Rasenrobo hat eine rote Markierung bekommen. Die webcam ist am Fenster im 2. Stock befestigt und erfaßt leider nicht den ganzen Garten. Das Programm ist mit VB6 geschrieben. Das Bild hat eine Matrix von 320 x 160. Die Auswertung pro Bild dauert nur 0,05 sec. Grob gesagt wird ein Fleck mit dem höchsten Rotanteil gesucht. Zum Ausschluss falscher Messungen werden nur Werte akzeptiert falls 10 aufeinanderfolgende Messungen alle unmittelbar benachbart sind.
Nach etwa 10 Minuten:
http://www.rasenrobo.de/rasenrobo1.jpg
Nach etwa 1 Stunde:
http://www.rasenrobo.de/rasenrobo2.jpg
Die Aufnahmen stammen von heute Abend. Zum Schluss ist´s zu Dunkel geworden. Immer wenn der Robo ausserhalb vom Bild ist, werden gelegentlich rote Punkte markiert die nicht zum Robo gehören. Deshalb die grünen Flecken im Teich (die Goldfische) oder in der Ecke rechts oben.
Das Programm für Interessierte (insb. VB6-Nostalgiker):
Code:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Dim fs
Dim rot As Integer, grün As Integer, blau As Integer, farbealt, rotalt As Byte, grünalt As Byte, blaualt As Byte
Dim starti, startj, endi, endj, am As String, amh As String, j As Integer, jj As Long
Dim ErgebnisIR As Long, a As Picture, b As Picture, c As Picture, groesse As RECT
Dim pointert As Long, smax As Integer, xmax As Integer, ymax As Integer, xmaxalt As Integer, ymaxalt As Integer, mousex As Integer, mousey As Integer, Letztesx(10), Letztesy(10), letzter
Dim Bmp As strucBITMAP ' Struktur für die Bitmap-Rahmenangaben ' des geladenen Bildes
Dim gSafearray As strucSAFEARRAY
Dim Pic() As Integer, i As Integer, k As Integer, ii As Integer, kk As Integer
Private Declare Function VarPtrArray Lib "msvbvm60.dll" _
Alias "VarPtr" ( _
Ptr() As Any) As Long
Private Declare Function GetObject Lib "gdi32" _
Alias "GetObjectA" ( _
ByVal hObject As Long, _
ByVal nCount As Long, _
lpObject As Any) As Long
' Informationsblock der Array-Dimensionierung bei VB6
Private Type strucSAFEARRAY
Dimensionen As Integer ' Zahl der Array-Dimensionen
Features As Integer ' spezielle Array-Eigenschaften
Elemente As Long ' Angabe zum einz. Arrayfeld
Locks As Long ' Sperrvermerke
DatenZeiger As Long ' Zeiger: Speicher-Start der Arraydaten
Elements1 As Long ' Anzahl Elemente in 1.Dimension
lBound1 As Long ' Arrayuntergrenze 1. Dimension
Elements2 As Long ' s.o.
lBound2 As Long
End Type
Private Type strucBITMAP
Type As Long
PixelWidth As Long ' Bildbreite (Pixel)
PixelHeight As Long ' Bildhöhe (Pixel)
BytesWidth As Long ' Breite (in Byte; bei 24 Bit-Bitmap 3 Byte/Pixel)
Planes As Integer
BitsPerPixel As Integer ' Prog unterstützt nur 24 Bits/Pixe
BitZeiger As Long ' Zeiger auf die Bilddaten
End Type
Private Sub Command1_Click()
xmaxalt = 0: ymaxalt = 0
If Command1.Caption = "Start" Then
Command1.Caption = "Stop": Open "C:\efilm\roboter2.dat" For Append As #1: Print #1, Command1.Caption
Else
Command1.Caption = "Start": Close #1
End If
End Sub
Private Sub Form_Load()
Set fs = CreateObject("Scripting.FileSystemObject")
On Error Resume Next 'Don't stop execution, continue on next line
' WebBrowser1.Navigate2 "http:\\www.t-online.de"
WebBrowser1.Navigate2 "http://192.168.1.20/img/main.cgi?next_file=main.htm"
If Err.Number <> 0 Then MsgBox "Error :" & Err.Description 'Display error message
Timer1.Interval = 50: Timer1.Enabled = True
Picture1.Visible = False
End Sub
Private Sub Picture2_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
mousex = x: mousey = Y
End Sub
Private Sub Timer1_Timer()
Bildanalyse
End Sub
Sub Bildanalyse()
t = Timer
ErgebnisIR = FindWindow(0&, "Form1")
DoEvents: ' On Error Resume Next
Set a = CaptureWindow(ErgebnisIR, False, 5, 25, 500, 330)
SavePicture a, "C:\zwischen.bmp": Set a = LoadPicture("C:\zwischen.bmp")
If Command1.Caption = "Start" Then Set Picture2.Picture = a ' Clipboard.GetData(2) ' b
Call GetObject(a, Len(Bmp), Bmp)
With gSafearray
.Elemente = 2 'für integer
.Dimensionen = 2 ' 2-dimensionales Array
.lBound1 = 0
.Elements1 = Bmp.PixelHeight ' Bildhöhe in Pixel
.lBound2 = 0
.Elements2 = Bmp.BytesWidth / 2 ' Bildbreite in Byte !!!
.DatenZeiger = Bmp.BitZeiger ' Zeiger auf die Bilddaten
End With
' Overlay-Array für Bildzugriff
Call CopyMemory(ByVal VarPtrArray(Pic), VarPtr(gSafearray), 4)
Dim S1(600, 600) As Integer, s2(600, 600) As Integer, S3(600, 600) As Integer, S4(600, 600) As Integer, S5(600, 600) As Integer
smax = 0
On Error Resume Next
For k = 0 To UBound(Pic, 2): For i = 0 To UBound(Pic, 1)
rot = Int(Pic(i, k) / &H400): blau = Pic(i, k) And &H1F: grün = Int(Pic(i, k) / &H20) And &H1F
If mousex = i And mousey = UBound(Pic, 2) - k Then
Text1.Text = mousex & vbTab & mousey: Text3.Text = rot: Text4.Text = blau: Text5.Text = grün
End If
If rot <= blau + 2 Or rot <= grün + 2 Then
S5(i, k) = 0
Else
S5(i, k) = rot - (blau + grün) / 2
End If
Next i: Next k
For k = 0 To UBound(Pic, 2): For i = 0 To UBound(Pic, 1)
If S5(i, k) > 0 Then
S1(i, k) = S5(i, k) + (S1(i - 1, k) + S1(i, k - 1)) / 9 * 4
ii = UBound(Pic, 1) - i: kk = UBound(Pic, 2) - k:
s2(ii, kk) = S5(ii, kk) + (s2(ii + 1, kk) + s2(ii, kk + 1)) / 9 * 4
S3(i, kk) = S5(i, kk) + (S3(i - 1, kk) + S3(i, kk + 1)) / 9 * 4
S4(ii, k) = S5(ii, k) + (S4(ii + 1, k) + S4(ii, k - 1)) / 9 * 4
End If
Next i: Next k
For k = 0 To UBound(Pic, 2): For i = 0 To UBound(Pic, 1)
If S5(i, k) > 0 Then
S1(i, k) = S1(i, k) + s2(i, k) + S3(i, k) + S4(i, k)
If smax < S1(i, k) Then smax = S1(i, k): xmax = i: ymax = k
End If
Next i: Next k
ymax = UBound(Pic, 2) - ymax
Text2 = Timer - t & vbTab & xmax & vbTab & ymax: Text2.Refresh
Call CopyMemory(ByVal VarPtrArray(Pic), 0&, 4)
Picture2.FillColor = vbGreen: Picture2.FillStyle = vbFSSolid
Picture2.Circle (xmax, ymax), 1, vbGreen
letzter = letzter + 1: letzter = letzter Mod 10
Letztesx(letzter) = xmax: Letztesy(letzter) = ymax:
For i = 1 To 9: deltax = Abs(Letztesx(i) - Letztesx(0)): deltay = Abs(Letztesy(i) - Letztesy(0))
If deltax > 25 Or deltay > 25 Then i = 25:
Next
If i < 20 And xmaxalt > 0 And ymaxalt > 0 And Command1.Caption = "Stop" Then
Picture2.Line (xmax, ymax)-(xmaxalt, ymaxalt), vbGreen
Print #1, xmax, ymax
End If
If xmax > 0 And ymax > 0 Then xmaxalt = xmax: ymaxalt = ymax
End Sub
So, jetzt gut Nacht
Christian