Entwicklung der Schleifen Sensoren (Signalstärkenauswertung)

AlexanderG schrieb:
@Stefan:
Ich will meine Ansprüche aber auch nicht zu hoch schrauben - wenn man bedenkt, wie schlecht der Orignal-Ambrogio L50 sich bei uns gemacht hat, wie unzuverlässig die Rasensensoren liefen und wie oft ich ihn aus den Büschen usw. herausholen musste - dagegen, finde ich, ist das jetzt eine relativ robuste Sache geworden...

@Alexander
Da hast du recht. Ich finde auch, dass er im original Zustand und dann noch für das Geld
relativ unzuverlässig arbeitet. Daher hab ich mich ja auch für den Umbau entschieden.

Durch euer Projekt sind ja so viele Möglichkeiten gegeben. Das läuft schon stark auf den perfekten Roby zu :)
 
Zuletzt bearbeitet von einem Moderator:
Hallo zusammen,

ich baue jetzt bereits meinen zweiten Ardumower zusammen :) und da fällt einem direkt auf was man noch einfacher gestalten könnte. Daher folgende Idee:

Derzeitiger Zustand:
Derzeit generiert der "Schleifencontroller" (Arduino Nano) ja ein PWM-Ausgangssignal für die beiden Spulen, welches über einen Tiefpaß zu einer Gleichspannung umgewandelt wird welche wiederum vom Hauptboard (Mega) über einen ADC-Wandler wieder in einen Digitalwert umgewandelt wird - Ich denke das geht einfacher...

Neue Idee:
Wir verwenden (wie beim "Kompaß-Nano" oder "Stepper-Nano") auch für den "Schleifen-Nano" die I2C-Schnittstelle:


Code:
Mega I2C SCL ------ Nano1 I2C SCL
               +--- Nano2 I2C SCL
               +--- Nano3 I2C SCL

Mega I2C SDA ------ Nano1 I2C SDA
               +--- Nano2 I2C SDA
               +--- Nano3 I2C SDA

(Nano1, Nano2, Nano3 sind Kompaß-Nano, Stepper-Nano, Schleifen-Nano)

Vorteil:
Wir können alle Daten digital austauschen und man kann es per Software einfach erweitern. Beim Kompaß und Stepper-Motor hat sich dieser Ansatz bereits bewährt. Der Mega ist der "Master" (d.h. nur der darf ein "Gespräch" initiieren), die Nanos sind alle "Slaves". Jeder Slave hat eine eindeutige Adresse. Die Leitungen sind per "Software-Pullup" geschaltet.


Wenn also nichts dagegen spricht würde ich es in einer der nächsten Versionen so auch für den Schleifencontroller umsetzen. Die zusätzliche Schaltung am Schleifen-Nano kann dann entfallen.

Gruss,
Alexander
 
Hallo Alexander,

wenn du das abänderst, muss man dann was bei alter Hardwarekonfiguration beachten, bzw. muss die umgebaut werden?

Mir geht es darum, wenn der neue Code eingespielt wird, dass dann alles noch so geht wie bisher, oder verkompliziere ich hier wieder mal was?

Gruß
Stefan
 
Hallo Stefan,

zukünftige Versionen werden weiterhin die alte Verdrahtung unterstützen - ich werde softwareseitig eine Option einbauen, so dass man darüber einfach wechseln kann...

Gruss,
Alexander
 
@Sven: ich habe heute meinen L50 neu verdrahtet und dabei alles auf IC2 umgestellt - und bekomme dieselben niedrigen Werte (max. 50) - Desweiteren stürzt der Perimeter Nano sehr schnell ab (hängt fest) - und der Mega hängt dann auch... (anscheinend haben die Arduino I2C Routinen keinen Timeout)...

Ich muss jetzt erstmal die Punkte nacheinander abarbeiten - irgendwo ist da der Wurm drin! :)
 
@Sven: den ersten Punkt habe ich bereits herausgefunden ... analogRead Werte reichen von 0 to 1023, analogWrite Werte von 0 to 255 - das erklärt warum nun alles um den Faktor 4 kleiner ist!

---alte Verdrathung---
Perimeter-Nano: analogWrite( Wert )
Mega: analogRead() => Ergebis: Wert * 4

---neue Verdrathung---
Perimeter-Nano: I2Cwrite( Wert )
Mega: I2Cread => Wert

Ich denke wir werden besser alles auf 255 skalieren (8 Bit)...
 
@Sven: Es passiert innerhalb von 1-5 Minuten. Die Arduino I2C Library Funktionen hängen anscheinend fest wenn ein Bit mal nicht über die Leitung gekommen ist - Ich glaube jetzt ist der richtige Zeitpunkt gekommen, den Watchdog einzubauen...
 
@Sven: ich habe die Leitungen jetzt verdrillt (SCL/SDA) und das Problem ist weg - anscheinend hatte sich das (dennoch kurze) Kabel etwas eingefangen. Den Nano-Code optimiere ich noch (I2C wird nicht mehr abgeschaltet beim ADC-Sampling), dann wird es eine neue Version geben - Mein Ziel war eigentlich dass man das Frequenzspektrum via pfodApp sehen kann (wäre interessant, um Schleifen-Sender anderer Hersteller zu "scannen") - vielleicht gelingt es mir...
 
@Sven: die Leitungen werden von Modul zu Modul geführt:

Code:
Mega SCL ---- RTC ---- Nano ----- Nano
Mega SDA ---- RTC ---- Nano ----- Nano


Jedes Teilstück hat etwa 8cm.

Das Schleifenprinzip des Liam Mower kommt irgendwann auch dran. Aber zuvor soll alles wieder stabil und robust laufen :)
 
@Sven: gute Idee, werd' ich ggf. auch mal probieren!

PS: hier schon mal ein Vorgeschmack auf das Spektrum-Plotting ;-)

spectrum_plot.jpg

Attachment: https://forum.ardumower.de/data/media/kunena/attachments/905/spectrum_plot.jpg/
 
Zuletzt bearbeitet von einem Moderator:
Hallo Sven,

der Entwickler der pfodApp hat auf unseren Vorschlag hin das Plotting eingebaut (und sich dabei für das vorgeschlagene CSV-Format entschieden). Wie die Daten dargstellt werden (Zuordnung zu den Achsen, Skalierung, etc.) wird zuvor mit einem kurzen Befehl an die pfodApp festgelegt (Details stehen im Protokoll auf der pfodApp-Entwicklerseite).

Da der Arduino Mega über extrem wenig Speicher (8K SRAM) verfügt und dieser schon ziemlich gut mit Programmvariablen belegt ist, können die Daten leider nicht im Hintergrund (d.h. ohne pfodApp) aufgezeichnet werden. Zur Fehlersuche etc. reicht es aber allemal...

Gruss,
Alexander
 
Habe die aktuelle Version mal hochgeladen (Ardumower 0.9.2.0 und Perimeter Receiver 0.6) - Schleifenfahrt klappt nun mit dem L50 wieder (ich musste die Perimeter Tracking Regelparameter P,I,D alle um Faktor 4 größer machen da die Meßwerte um Faktor 4 kleiner sind - siehe Diskussion weiter oben)
 
@Sven:

autega schrieb:
Ich habe 2 Stiftleisten auf ein Stück Streifenraster Platine gelötet. Dort führe ich alle SDA und SCL zusammen.
Ein I2C Hub also.
Funktioniert hervorragend.

Falls Du mal Zeit hast, teste mal bitte die aktuelle Version - bei mir tritt hin- und wieder ein Kommunikationsfehler auf (pfod-App -> Error counter). Bei Erreichen von 255 Fehlern geht der Roboter dann in den Fehler-Zustand. Vielleicht liegt es an meiner Verdrahtung... Evtl. sollte man ein "Max Error Counter" für jeden Fehler einführen und die aktuellen Werte nach einem Intervall auf Null setzen - damit der Roboter nicht aufgrund von sporadischen Fehlern stehen bleibt...
 
Zuletzt bearbeitet von einem Moderator:
Nachtrag: habe den Code nochmal verbessert (v0.9.2.1) - er lässt nun I2C-Fehler in einer bestimmten Größenordnung (max. 10 Fehler in 30 Sek.) zu... das scheint ganz gut bei mir zu funktionieren :)
 
Hallo,
Ich bin gerade dabei meine Spulen in den Mäher zu bauen.
Dafür verwende ich die 4 originalen von meinem Tianchen. Jedoch muss ich aus Platzgründen die Spülen in der Höhe unterschiedlich anbringen. Das heißt, die Spule in Fahrtrichtung werde ich auf der kleinen Platiene befestigen und die um 90 Grad gedrehte kann ich leider nur unterhalb dieser Platiene anbringen.


2014-03-0408.43.56neu.png



Die beiden Seiten sind jedoch gleich aufgebaut.
könnte dies zu Problemen führen ?
Gruß
Stephan
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/921/2014-03-0408.43.56neu.png/
 
Zuletzt bearbeitet von einem Moderator:
Hallo Stephan,

das müsste gehen - dass sich die Signalstärke bei Drehung der Spule ändert, kann man hier sehen: http://www.ardumower.de/images/ardumower_coil_signal.png
Bei Verschieben nach unten/oben um 1-2 cm ändert es sich nicht allzu stark: http://www.ardumower.de/images/perimeter_plot.png
Am Besten ausprobieren! (die Signalstärke wird in der pfodApp unter Settings->Perimeter für links/rechts angezeigt)

Beim Überfahren der Schleife wird nur das Maximum aller Spulen ermittelt. Beim Abfahren der Schleife zur Ladestation wird immer zwischen links/rechts ein Gleichgewicht der Signalstärke durch Drehung hergestellt.

Gruss,
Alexander
 
Hallo Alexander,
danke für deine Infos. Ich werde meinen Mäher die Tage wieder fertig zusammen bauen und testen. Dann gebe ich hier nochmal eine kurze Rückmeldung wie es funktioniert.
Gruß
Stephan
 
Oben