RoπLawnMow

Hallo,
heute habe ich auf github den bisherigen Code für den MINI-roπLawnMow hochgeladen. Da der große noch im Gartenhaus steht, entwickle ich den Code und den Ablauf der Steuerung derzeit auf dem kleinen Modell. Nachdem ich die Gyro Daten des MPUs erfolgreich auslesen kann und auch die Tracks sehr gut reproduzierbar sind, habe ich in den letzten Tagen damit begonnen die ToF Sensoren in die Steuerung mit einzueziehen.
Heute habe ich dieses Video aufgenommen. Es zeigt eine autonome Fahrt, bei der er nur die ToF Entfernungen ausließt (Threshhold 20cm) und entsprechend reagiert.
View attachment MINIAutoMow.mp4
Läuft er im Winkel auf ein Hindernis zu, so biegt er ab, steurt er direlkt auf das Hindernis zu, dann vollzieht er eine Wendung. Bei den Fahrten wird die Richtungskorrektur nur zum aktuellen Richtung durchgeführt, mit der er nach einer Drehung/ Wendung gestartet ist.
Als nächstes werde ich daran arbeiten andere Fahrmuster zu hinterlegen und konfiguriernar zu machen, danach die Kamera als Sensor mit einbeziehen. Dann wird es sicher auch schon bald wieder wärmer und ich kan den roπLawnMow wieder hervorholen und die SW darauf portieren und testen.
Viel Spaß beim Video Schauen
 
Hallo, habe heute endlich meine ZS-X11 expander Platine getestet. Hatte ich Ende letztes Jahr layoutet und mir bei AISLER als PCB fertigen lassen. Die Platine ist 43mm breit und 30mm lang.
Damit lässt sich der Pi ohne Levelshifter direkt anschließen. Heraus geführt sind die Anschlüsse GND, PWM, HALL, DIR, Break
Am Hall-Eingangs-Pin muss nur SW mäßig ein Pull-up eingestellt werden.

ZS-X11-Expander.jpg
 
Kleine Ergänzung heute morgen habe ich festgestellt, dass der SW Pull-up nicht so sicher ist wie ein HW-Pull-up.
Beim SW Pull-up verschluckt er ab und zu einige Hall Impulse.
Doku und update de Codes folgt in den nächsten Tagen
 
Hallo, habe heute endlich meine ZS-X11 expander Platine getestet. Hatte ich Ende letztes Jahr layoutet und mir bei AISLER als PCB fertigen lassen. Die Platine ist 43mm breit und 30mm lang.
Damit lässt sich der Pi ohne Levelshifter direkt anschließen. Heraus geführt sind die Anschlüsse GND, PWM, HALL, DIR, Break
Am Hall-Eingangs-Pin muss nur SW mäßig ein Pull-up eingestellt werden.

View attachment 1182
Can you explain the PCB or show us the schematics ?
 
Yes it is easy. I use opto-coppler because I made the experience, that several levelshifter have several characteristicas and the Pi is sometimes picky. So far I remember right end of last year, I tested out, that on the break Pin of the ZS Board, there are 5 Volt. So the Pi is not happy with that.
The HALL signal is 5 Volt, as you know you can manage this with 2 restiors. But I started my professional carrer as a Radio & TV technician and I love Optocoppler and I have I'm honest around 100 PC817 in a box. So they will be used. But it is really true. I used 3 different Levelshifters and an arduiono works propper with the levelshifter, the pi had problems. This is the reason why I designed this smart PCB wich fits exactly in Front of the ZS Boards. But I forgot the Pull-up for GPIO 12 🙁
1707671667518.png
 

Attachments

Heute habe ich dann mal alles zusammen geschaltet.
was mich fasziniert, ist die die "Übersichtlichkeit" der Verdrahtung.
Mein Pi HAT ist zwar hier nur eine Lochrasterplatine, war der Prototyp von den geätzten Platinen (rechtes Bild), aber die sind alle im Gebrauch.
zum Glück hatte ich noch die "Null Serie" verfügbar.
Also mit den ExpanderBoards einfach an den Pi und fertig. Beim Hall Anschluss habe ich nun doch einen physikalischen Pull-up genutzt, das funktiioniert zuverlässiger.
 

Attachments

Hallo, Mittlerweile habe ich mir ein "Indoor" Entwicklungs-Chassis gebaut, damit ich meine HW und SW Entwicklungen bequem im Haus testen kann und nicht immer mit dem roπLawnMow nach draußen muss. Auf X findet ihr hier einige Beiträge zur Enstehung meines Development Chassis. Im Moment ist es so, dass ich die Pi SW die ich auf meinem kleinen MINI-Pimowbot entwckelt hatte auf das Entwicklungs Chassis portiert habe. Ich habe ihm den Namen "BobbyCarII" gegeben, da für dieses Chassis mein erklärtes Ziel ist später ein BobbyCar Top zu montieren und einen Allrad Antrieb zu realisieren.
Heute bin ich aber schon mal mit dem BobbyCarII draußen gewesen und habe in 5m fahren lassen. Sensoren sind zwar montiert, scripte Laufen auch, werden aber noch nicht ausgewertet. Mit dieser Fahrt wollte ich testen ob die PID Einstellungen verändert werden müssen, da in meinem roπLawnMow andere Motore installiert sind als ich für das BobbyCarII zur Verfügung habe. Und wie man hier sehen und hören kann wird schon kräftig geregelt. Da würde ich sagen, dass ich den P Anteil der PID Einstellungen für die Motoren vergößern muss.
Das Bild oben rechts in der Ecke ist ein Stream von der PiCam. Der Client auf dem ich das aufgenommen habe, war zwar im selben Netz, aber der Pi vom BobbyCarII hatte sehr schwaches WLAN Signal, daher manchmal ruckelig. Am Ende der Fahrt hatte er die Richtung schon seit dem Start gehalten, jedoch muss er noch besser nachregeln Sonst muss da noch ein Alkoholtest vom Fahre gemacht werden.
Die Richtungskontrolle erfolgte durch das MPU6050, die Korrekturwerte wirken ebenfalls mit einem PID Regler auf die Motorsteuerung ein.
Viel Spaß beim Video schauen.

View attachment BobbyCarOut..mp4
 
Ich habe heute einmal einige Testfahrten auf meinem kleinen Teppich als ersatzrasen Fläche durchgeführt. Zielsetzung war auszutesten wie gut die Geschwindigkeitsreduzierung funktioniert. Im Moment habe ich die Entfernung die er zurück legen soll einfach in das Steuerscript eingetragen.
Fahre 170cm vor, Ich habe ihn so programmiert, dass er bei 60cm vor dem Ziel das erstemal die RPMs reduziert und bei 30 cm vor dem Ziel das nächste mal reduziert. Das will ich dann auch bei den ToF Sensoren so umsetzen, wobei er dann dort bei 15cm Entfernung schon stoppen soll.
Die Kamera hat ihre Grünerkennung bei 100cm entfernung aktiv, würde da also dann abbremsen, bei 50cm vor dem Mäher soll er dann mit kleinster geschwindigkeit dann noch 35cm fahren und dann Stoppen. So der Plan.
Im Video könnt ihr den Test sehen der aber nur mit den TiCs und dem Gyro zur Richtungserkennung relaisiert ist. Sensoren werden erst demnächst ausgewertet, Kamera wird in meinem Zimmer nicht gehen, es sei denn ich lege es mit grünem Teppich aus :)
Das Ergebnis finde ich schon gut, jedoch muss ich noch einmal schauen ob ich bei den Wendungen immer die Richtige "Sollrichtung" abspeichere, da fährt er mit noch zu ungenau, obwohl er wenn er fährt die Spur sehr gut hält.

View attachment BobyCarIIChange2..mp4

Your feedback is welcome!
Gruß
Ulli
 

42320-grafik-png
News von meinem roπLawnMow Projekt​

Die letzte Fahrt mit meinem Modell war im Dezember. Damals habe ich die Steuerung und die Brushless Motor Treiber ausprobiert und mittels Gyro Erfahrungen mit der Spurtreue sammeln können. Mittlerweile hat sich einiges getan, so dass ich in den vergangenen Tagen für die Sensoren einige Befestigungs-Elemente konstruieren und drucken konnte. Gestern habe ich diese dann an dem Gehäuse mit Selikon Masse angeklebt und heute die Sensoren montiert.
Sieht schon gut aus, oder?
1713452945135.png


Nun muss ich nur noch die ToFs verkabeln, anschließen und dann hoffe ich, dass ich am Wochenende mit dem roπLawnMow eine kleine Probefahrt machen kann, oder sollte ich doch lieber ein Schlauchboot bauen?
Drückt die Daumen dass es einigermaßen trocken bleibt.
 
Hallo in die Runde,
In dieser Woche war ich hauptsächlich mit dem HW Update meines kleinen PiMowBots beschäftigt.
Der MINI musste unbedingt neue Motoren bekommen, die verbauten Servo Motoren die ich für den Antrieb genutzt habe machten langsam die Grätsche. Also habe ich noch die beiden 12Volt Motore von meiner BobbyCar Studie in den MINI eingebaut. Das hatte aber doch erhebliche Konstruktionsänderungen zu Folge. Eigentlich ist nur das vordere Chsissteil geblieben und die Halterungen für den Pi, Stepdown Regler und Laderegler konnten unverändert übernommen werden. Alles ander habe ich diese Woche neu in Fusion konstruiert, gedruckt und dann verbaut. Ergebnis: Mit seinen 26 RPMs dreht er jetzt ähnlich schnell wie ein richtiger PiMowBot, hat auf Grund der Getriebe ein enormes Drehmoment, ist aber auch sicher 400g schwerer als vorher und mit den kleinen Rädern erkennbar langsamer als vorher mit 42Rpms.
Erster Testlauf heute war schon mal sehr positiv das Surren der Getriebe hört sich angenehmer an, als die hochdrehenden Servogetriebe Motoren.
Ein kurzes Video habe ich eben auf X gepostet, hier der Link dahin https://x.com/ullisun58/status/1784623838359089454
 

Attachments

  • NEW_MINI.png
    NEW_MINI.png
    1.3 MB · Views: 10
Hallo Sehr lange her, dass ich hier aktiv war, gab ne Menge anderer Dinge zu tun und ein Tag hat nun mal nur 24 Std.
Ich bin nun an dem Punkt angekommen, wo ich mit meinem roπLawnMow eine Ladestation anfahren möchte. Also ohne RTK bliebe da nur die Lösung mit einem Perimterdraht. Das Scenario stelle ich mir so vor: Die Ladestation steht in sagen wir West Richtung in meinem Garten.
Erkennt er nun, das sein Akku zu Ende geht, dann pirscht er sich nach Westen durch vermeidet aber 180 Grad Wendungen. Er kommt also in die Gegend der Ladestation, dort habe ich so 7m vor der Ladestation eine Perimeterschleife die sich dann zur Ladestation Hin verjüngt und ihn dann dorthin führen sollte. Soweit mein Plan. Hat jemand schon mal so etwas gebaut gibt es da Erfahrungserte?
Mein roπLawnMow arbeitet mit einem Pi, Ich kann mir aber die PerimeterDraht Auswertung auch sehr gut mit einem Arduino vorstellen. Da gibt es viele viele Beispiele. @Bernard hat mir schon einige zur Verfügung gestellt mit denen ich experimentiert habe, leider nur mit mäßigem Erfolg.
Den Sender habe ich nach diesem Beipiel mit dem L298 als Treiber als sigcode habe ich diesen
int8_t sigcode[] = { 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1 }; aus dem Empfänger eingefügt
Als Empfänger nutze ich im Moment das PerimeterV2.ino, auch auf einem Arduino, Zielsetung wäre vielleicht beide auf ESP Plattform zu bringen, aber Nice to have. Aber bis dahin ist es noch so glaube ich ein weiter steiniger Weg für mich.
Die Kalibrirung des Perimeter V2 sieht bei mir so aus

Code:
calibrating ADC (power off sender for this!)...
ADC calibration...
ADC calibration ch4=36
ADC calibration ch5=36
---ADC calib---
ADC sampleRate=38462
AD0    min=0    max=0    diff=0    ofs=0
AD1    min=0    max=0    diff=0    ofs=0
AD2    min=0    max=0    diff=0    ofs=0
AD3    min=0    max=0    diff=0    ofs=0
AD4    min=36    max=37    diff=1    ofs=36
AD5    min=36    max=37    diff=1    ofs=36
AD6    min=0    max=0    diff=0    ofs=0
AD7    min=0    max=0    diff=0    ofs=0
AD8    min=0    max=0    diff=0    ofs=0
AD9    min=0    max=0    diff=0    ofs=0
AD10    min=0    max=0    diff=0    ofs=0
AD11    min=0    max=0    diff=0    ofs=0
AD12    min=0    max=0    diff=0    ofs=0
AD13    min=0    max=0    diff=0    ofs=0
AD14    min=0    max=0    diff=0    ofs=0
AD15    min=0    max=0    diff=0    ofs=0

Die Daten dann wenn der Sender läuft sehen so aus und der Messstation innerhalb der Schleife liegt und nicht bewegt wird.

Code:
cnt 0    min 27    max 127    avg 80    mag -659     mag1 685        smag 404    qty 1.01        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 79    mag -659     mag1 678        smag 404    qty 1.01        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 79    mag 665     mag1 678        smag 407    qty 1.00        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 80    mag 665     mag1 654        smag 407    qty 1.00        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 80    mag 674     mag1 654        smag 410    qty 1.07        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 80    mag 674     mag1 -620        smag 410    qty 1.07        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 80    mag 648     mag1 -620        smag 412    qty 1.00        inside 0    on 1    adc 1
cnt 1    min 27    max 127    avg 81    mag 648     mag1 660        smag 412    qty 1.00        inside 0    on 1    adc 1
cnt 1    min 27    max 127    avg 81    mag -689     mag1 660        smag 415    qty 1.01        inside 1    on 1    adc 1
cnt 2    min 27    max 127    avg 82    mag -689     mag1 -624        smag 415    qty 1.01        inside 1    on 1    adc 1

Ich habe 2 Spulen angeschlossen.
Ich denke es würde ja fürs erste reichen, wenn man wüsste, wenn er nah an dem Draht ist und die induzierte Spannung möglichst hoch bleibt.
dann könnte er dem folgen. Eine detection von innerhalb der Schleife zu Außerhalb der Schleife ist im Moment überhaupt nicht möglich und die absoluten Werte von mag und mag1 sagen mir im Moment nicht wirklich wie nah er am Draht ist. Ob ich ihn jetzt 10cm am Draht liegen habe oder 80 cm entfernt macht nicht wirklich einen Unterschied. Ach ja, der Perimeter Draht wird 400mA bestrohmt, aber auch 600mA bringen nicht viel Änderung.
Nun meine Frage, Ich würde das gerne aus Kosten Gründen nicht mit einem Teensy realisieren, wenn es nicht anders geht, dann mache ich das, scheue mich aber im Moment davor einen zu kaufen, wenn das Ergebnis hinterher genauso aussieht wie ich es jetzt hier beschreibe.
Hat jemand eine Idee oder Erfahrungen die er mit mir teilen möchte ? Vielen Dank im Voraus.
 
Bei mir ist der smag wert bei ca 12000! Da der Mäher in der Schleife negative Werte misst und außerhalb positive Werte, kann der Mäher dem Draht gut folgen. Mein rasen ist komplett vom Draht umspannt. Wenn der Akku leer ist, fährt der Mäher geradeaus, bis er auf den Draht trifft, dreht sich dann in eine Richtung und folgt dann dem Draht bis eine Ladespannung an den Ladekontakten anliegt.
Auf dem Draht sind ca. 9,5V. Und nicht den Lastwiderstand von ca. 12ohm und 50W vergessen.
 
Bei mir ist der smag wert bei ca 12000! Da der Mäher in der Schleife negative Werte misst und außerhalb positive Werte, kann der Mäher dem Draht gut folgen. Mein rasen ist komplett vom Draht umspannt. Wenn der Akku leer ist, fährt der Mäher geradeaus, bis er auf den Draht trifft, dreht sich dann in eine Richtung und folgt dann dem Draht bis eine Ladespannung an den Ladekontakten anliegt.
Auf dem Draht sind ca. 9,5V. Und nicht den Lastwiderstand von ca. 12ohm und 50W vergessen.
Danke für Deine Antwort,wenn ich das richtig verfolgt habe hast Du auch den Sender den ich nutze, Aber welchen Empfänger nutzt Du?
Da meine ich den Controller. Nutzt Du de teensy mit de entsprechenden Bibliotheken? Ich habe vor Jahren schon mal mit einem anderen Sender experimentiert und hatte da nur einen NE555 als Impulsgeber. Das war viel zu gering, Hier messe ich ja schon sehr gute Signale wenn ich den Sender ein und ausschalte Aber 12000 ist natürlich eine Nummer. Weißt Du in welcher GrößenOrdnung bei Dir die mag und mag1 Werte liegen?
Bei mir sind die Werte innerhalb und außerhalb auch leider gar nicht zuverlässig. Von Hause bin ich gelernter Radio&Fernsehtechniker kenne mich also mit Elektronik aus. Das Konzept mir dem MatchedFIlter finde ich gut,kann da aber dem Code intelektuell gar nicht folgen. C ist icht meine prefferred Sprache.
 
Ich bin leider nicht zu Hause, daher kann ich die Werte gerade nicht liefern.
Mein Mäher läuft mit dem Teensy 4.1 und der Sender mir dem ESP32. Die Signale der Empfängerspulen werden durch einen lm386 verstärkt. Der Kondensator muss allerdings überbrückt werden.
Bei C stoße ich auch schnell an meine Grenzen wenn es ins Eingemachte geht.
 
Hallo Sehr lange her, dass ich hier aktiv war, gab ne Menge anderer Dinge zu tun und ein Tag hat nun mal nur 24 Std.
Ich bin nun an dem Punkt angekommen, wo ich mit meinem roπLawnMow eine Ladestation anfahren möchte. Also ohne RTK bliebe da nur die Lösung mit einem Perimterdraht. Das Scenario stelle ich mir so vor: Die Ladestation steht in sagen wir West Richtung in meinem Garten.
Erkennt er nun, das sein Akku zu Ende geht, dann pirscht er sich nach Westen durch vermeidet aber 180 Grad Wendungen. Er kommt also in die Gegend der Ladestation, dort habe ich so 7m vor der Ladestation eine Perimeterschleife die sich dann zur Ladestation Hin verjüngt und ihn dann dorthin führen sollte. Soweit mein Plan. Hat jemand schon mal so etwas gebaut gibt es da Erfahrungserte?
Mein roπLawnMow arbeitet mit einem Pi, Ich kann mir aber die PerimeterDraht Auswertung auch sehr gut mit einem Arduino vorstellen. Da gibt es viele viele Beispiele. @Bernard hat mir schon einige zur Verfügung gestellt mit denen ich experimentiert habe, leider nur mit mäßigem Erfolg.
Den Sender habe ich nach diesem Beipiel mit dem L298 als Treiber als sigcode habe ich diesen
int8_t sigcode[] = { 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1 }; aus dem Empfänger eingefügt
Als Empfänger nutze ich im Moment das PerimeterV2.ino, auch auf einem Arduino, Zielsetung wäre vielleicht beide auf ESP Plattform zu bringen, aber Nice to have. Aber bis dahin ist es noch so glaube ich ein weiter steiniger Weg für mich.
Die Kalibrirung des Perimeter V2 sieht bei mir so aus

Code:
calibrating ADC (power off sender for this!)...
ADC calibration...
ADC calibration ch4=36
ADC calibration ch5=36
---ADC calib---
ADC sampleRate=38462
AD0    min=0    max=0    diff=0    ofs=0
AD1    min=0    max=0    diff=0    ofs=0
AD2    min=0    max=0    diff=0    ofs=0
AD3    min=0    max=0    diff=0    ofs=0
AD4    min=36    max=37    diff=1    ofs=36
AD5    min=36    max=37    diff=1    ofs=36
AD6    min=0    max=0    diff=0    ofs=0
AD7    min=0    max=0    diff=0    ofs=0
AD8    min=0    max=0    diff=0    ofs=0
AD9    min=0    max=0    diff=0    ofs=0
AD10    min=0    max=0    diff=0    ofs=0
AD11    min=0    max=0    diff=0    ofs=0
AD12    min=0    max=0    diff=0    ofs=0
AD13    min=0    max=0    diff=0    ofs=0
AD14    min=0    max=0    diff=0    ofs=0
AD15    min=0    max=0    diff=0    ofs=0

Die Daten dann wenn der Sender läuft sehen so aus und der Messstation innerhalb der Schleife liegt und nicht bewegt wird.

Code:
cnt 0    min 27    max 127    avg 80    mag -659     mag1 685        smag 404    qty 1.01        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 79    mag -659     mag1 678        smag 404    qty 1.01        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 79    mag 665     mag1 678        smag 407    qty 1.00        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 80    mag 665     mag1 654        smag 407    qty 1.00        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 80    mag 674     mag1 654        smag 410    qty 1.07        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 80    mag 674     mag1 -620        smag 410    qty 1.07        inside 1    on 1    adc 1
cnt 0    min 27    max 127    avg 80    mag 648     mag1 -620        smag 412    qty 1.00        inside 0    on 1    adc 1
cnt 1    min 27    max 127    avg 81    mag 648     mag1 660        smag 412    qty 1.00        inside 0    on 1    adc 1
cnt 1    min 27    max 127    avg 81    mag -689     mag1 660        smag 415    qty 1.01        inside 1    on 1    adc 1
cnt 2    min 27    max 127    avg 82    mag -689     mag1 -624        smag 415    qty 1.01        inside 1    on 1    adc 1

Ich habe 2 Spulen angeschlossen.
Ich denke es würde ja fürs erste reichen, wenn man wüsste, wenn er nah an dem Draht ist und die induzierte Spannung möglichst hoch bleibt.
dann könnte er dem folgen. Eine detection von innerhalb der Schleife zu Außerhalb der Schleife ist im Moment überhaupt nicht möglich und die absoluten Werte von mag und mag1 sagen mir im Moment nicht wirklich wie nah er am Draht ist. Ob ich ihn jetzt 10cm am Draht liegen habe oder 80 cm entfernt macht nicht wirklich einen Unterschied. Ach ja, der Perimeter Draht wird 400mA bestrohmt, aber auch 600mA bringen nicht viel Änderung.
Nun meine Frage, Ich würde das gerne aus Kosten Gründen nicht mit einem Teensy realisieren, wenn es nicht anders geht, dann mache ich das, scheue mich aber im Moment davor einen zu kaufen, wenn das Ergebnis hinterher genauso aussieht wie ich es jetzt hier beschreibe.
Hat jemand eine Idee oder Erfahrungen die er mit mir teilen möchte ? Vielen Dank im Voraus.
On sender side:
To build the sender we use a L298N to send voltage + and - at high frequency (each 104 micro second) , so the limit are the L298N sense one and it's better to stay under 1 Amp to avoid that charge resistor heat a lot and burn the L298N
If you set 9V at the L298N input you need to have a 9 Ohm loop resistor, it's not possible with only wire , so you need to add a power resistor, so a 10 Ohm one is OK on small wire loop (<20 meter) ,.


Now on the receiver side:
We need to read the signal using one ADC input of the MCU at the same sender frequency. and decode it.
The trouble is here for some MCU.
NANO have a good ADC ,but have speed trouble to decode all the signal.
In my test I have find these value for teensy4.1
Code:
 ///// ADC0 ////
  adc->adc0->setAveraging(32); // set number of averages
  adc->adc0->setResolution(10); // set bits of resolution
  //adc->adc0->setConversionSpeed(ADC_CONVERSION_SPEED::MED_SPEED); // change the conversion speed
  //adc->adc0->setSamplingSpeed(ADC_SAMPLING_SPEED::MED_SPEED); // change the sampling speed
  adc->adc0->setConversionSpeed(ADC_CONVERSION_SPEED::VERY_HIGH_SPEED); // change the conversion speed
  adc->adc0->setSamplingSpeed(ADC_SAMPLING_SPEED::VERY_HIGH_SPEED); // change the sampling speed
  Serial.println("End setup adc0");

I can't tell you exactly why ,but Using setAveraging(32) ADC reading signal is really better than the one use on arduino platform .
 
Thx Bernard, Sender seems Okay, 9V with 12 Ohm 50W Resistor and a loop of 120cm x 180cm for testing. The sender need 600mA so far okay I would say. As you told me before the sender is the easy one :)

C#:
// Auf Arduino Nano mit geändertem SicCode
// aus dem  PerimeterV2.ino


#define CLR(x,y) (x&=(~(1<<y)))
#define SET(x,y) (x|=(1<<y))
byte c = 1;
//const int signal_length=31;
//char H[signal_length] = {1,1,1,-1,-1,-1,1,1,-1,1,1,1,-1,1,-1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,1,-1,-1,1,1};
//const int signal_length=20;
//char H [20]  = { 1,-1,0,0,0,
//              1,-1,0,0,0,
//             -1, 1,0,0,0,
//              1,-1,0,0,0  };
const int signal_length=24;
char H[signal_length] = {1,1,-1,-1,1,-1,1,-1,-1,1,-1,1,1,-1,-1,1,-1,-1,1,-1,-1,1,1,-1 };   

void setup() {
  // put your setup code here, to run once:
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
Serial.begin(9600);
//timer0
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCCR1B |= (1<<CS11)| (1<<CS10);
TCNT1 = 65511;
TIMSK1 |= (1 << TOIE1);
interrupts();
}

void loop() {
  // put your main code here, to run repeatedly:

}

ISR(TIMER1_OVF_vect)
{
  TCNT1 = 65511;

  if( H[c]<0){
    digitalWrite(10,HIGH);
    digitalWrite(11,LOW);
  }
  if( H[c]>0){
    digitalWrite(10,LOW);
    digitalWrite(11,HIGH);   
  }

  c++;
  if(c>signal_length){
    c=1;
  }
}


Now the Receiver: I use an Arduino Nano and use the PerimeterV2.ino. If there is a speed problem in the Nano, could be a solution to reduce the Speed on the sender but I have no Idea to reduce it - maybe change the value of TCNT1 but then there is the issue how get the sender and the receiver to the near same frequency that the matched filter can work.
I watched a lot of tutorials about that during the last days and i think the challenge for me is I only need a receiver and the information how far is the coil from the perimeter cable away and in the next step (nice to have) is the coil inside or outside. My concern are, if I install the cpl. Ardumower firmware on a teensy, it dont will work because a lot of modules are missing.
So, I'm a little at a loss.


So if the answer is I need a teensy, then i wil buy one
 
If there is a speed problem in the Nano,
Simply the mag value is not so accurate than with the teensy
And your result is OK or Not ,i see a mag at -659 and one at 665 , but normally mag need to change gently from -659 to 665 when coil cross the wire and value is 0 when just upper the wire.

But i don't understand exactly your goal
If your issue is the docking, create a perimeter for that is certainly more complex than use IR Led and receiver on the robot (same as vaccum robot). Also is it not possible to use the PI camera and some target on the charging station ??
 
i see a mag at -659 and one at 665 , but normally mag need to change gently from -659 to 665 when coil cross the wire and value is 0
Thanks this helps a lot. so I can do some further tests. e.g. with the analogread sketch based on ESP. I struggelt last days to add a second coil / input channel.
regarding your question. IR LED you think in terms of lighthouse? I never thought about this in terms of positioning calibration but i didn#t found a propper LED Sender. Do you have some in mind?
And the Pi Camera is no solution. The camera is detecting the gras in front of the mower around two meters to detect the green of the ground. Is no green, then the mower have to turn around or correct the way. So the camera is not looking horizontally.
 
So the camera is not looking horizontally.
You really have a lot of solution.

For camera What about mark on the grass in front of the station .Did your firmware have a kind of line-tracker possibility (OpenCV)?

For LED it's my roomba vaccum robot (can't tell you how it's work, but it's OK)

Also If you don't need the IN/OUT information a simple 5 meter magnet ribbon under grass and magnet detector in the mower ( GY273 or other) can help.
 
Bernard thanks again,
the ribbon with the Gy273 seems a possibility, but the normal compass inside may be disrupted. I think i will test this solution.
 
Back
Top