Liebes NIBO2-Tagebuch,
heute habe ich Schmerzen im Nacken
. Kommt davon, dass ich sehr lange den Kopf geschüttelt habe.
Wie kam es dazu?
Mein Dauerthema Abstandsensorik beschäftigt mich natürlich immer noch. Für die Messingröhrchen habe ich heute im Bastelgeschäft einen guten Tip bekommen (dazu mehr, wenn ich die Dinger endlich fertig abgelängt habe).
Bei meinen "Probefahrten" mit dem "Messe-Programm" ( das nutze ich, weil da die Sensor-Werte so schön angezeigt werden) - natürlich auf dem Schreibtisch, ich möchte ja nicht wie ein Kleinkind auf dem Boden herumrutschen - habe ich mich immer wieder darüber geärgert, dass der NIBO2 stark Suizid-gefährdet
ist; ständig versucht er, sich über die Schreibtischkante in den Abgrund zu stürzen.
Da ich sowieso mal ein wenig tiefer in die Programmierung des NIBO2 einsteigen wollte habe ich das zum Anlass genommen, mein erstes NIBO2-Programm zu schreiben.
Aufgabe: Ein wenig in der Gegend rumfahren und dabei nirgendwo gegenrennen und Abgründe meiden.
"Slice the Elephant" dachte ich und fing mit dem Geradeausfahren an. Damit es nicht gleich so heftig wird wollte ich mich schrittweise (1 Tick fahren und dann schaun mer mal) vorantasten. Essigwasser - mein NIBO2 ist für höhere Aufgaben geboren - unter mindestens 3-5 Ticks mit einem Anlauf wackelt er (eher selten) unregelmäßig mal rechts mal links ein Stückchen vorwärts. Ja, ich habe delays eingebaut - nach jedem Befehl 60 mS (20 Ticks pro Sekunde - 1 Tick soll gefahren werden, also benötigt NIBO2 ca. 50 mS für den Tick zur Ausführung. 10 mS für "Verwaltungsoverhead" drauf). Ich werde dazu mal einen Thread aufmachen - vielleicht sitzt das Problem ja wieder mal vor dem Display.
Da ich das Problem mit den kleinsten Schritten nicht gelöst bekam habe ich mich halt erstmal auf die Bodensensoren konzentriert. Nur irgendwie wollten die gar nicht so recht den "Abgrund" erkennen. Egal was ich machte, der Unterschied zwischen "Esche-Nachbildung"-Schreibtischoberfläche und "Abgrund" verschwand fast ganz im Rauschen der A/D-Wwandlung.
Da gibt es aus meiner Sicht 2 Probleme (auch dazu werde ich mal Threads aufmachen ...):
1. Die A/D-Wandlung entspricht nicht der Empfehlung von Atmel. Atmel empfiehlt nach jedem Kanalwechsel (immer nur jeweils die Spannung von 1 PIN/Sensor kann umgewandelt werden) die jeweils erste Messung nach Kanalwechsel zu ignorieren, da diese ungenau ist. Das ist im ADC-Include - so wie ich das lese - nicht berücksichtigt.
Ergänzung: Im "Messe-Programm" selbst wird die erste Messung bei der Kalibrierung "verworfen". Warum aber nicht in der allgemein verwendeten ADC-Routine ?
2. Die guten CNY70-Sensoren kamen mir beim Einbau schon irgendwie bekannt vor. Habe ich vor ca. 30+ Jahren mal verwendet, um einen primitiven Scanner (Sensor auf Druckkopf eines Matrix-Druckers befestigt und Zeilenweise Werte ermittelt) zu bauen. Da habe ich den Sensor sehr nahe an das Scan-Objekt gebracht.
Datenblatt gelesen und im Internet recherchiert: Der optimale Abstand zum Objekt beträgt ca. 3 mm - ab 8-10mm kommt nur noch 10% Reflektions-Leistung an.
Die Sensoren sind im Standard-Aufbau zwischen ca. 9 und 12 mm vom Boden entfernt (je nachdem, wie der Gleiter angebracht ist). Rad-Radius = 22 mm - 2,5 mm Abstand Achse zu Träger - 1,5 mm Platine - 6 mm Sensorhöhe = ca. 12 mm Abstand der hinteren Sensoren, vorne etwas weniger. Kann etwas differieren, habe keine Schieblehre benutzt, kommt aber prinzipiell hin.
Da kann ich wirklich nur den Kopf schütteln ... verstehen kann ich das nicht.
Ich habe jetzt als erste Maßnahme mal den NIBO2 tiefer gelegt. Hinten habe ich jetzt 30mm Durchmesser Mossgummireifen (Fahrgestell vom Modellflugzeug) dran und vorne habe ich einen Selfmade-Gleiter druntergesetzt. Abstand der Sensoren jetzt ca. 5mm vom Boden.
[Übrigens: Jetzt zeigen die Abstand-Sensoren vorne durch den Höhenunterschied Rad/Achse vs. Gleiter auch nicht mehr Richtung Boden sondern einigermassen geradeaus - vielleicht wird die Hindernis-Erkennung damit etwas besser]
Wenn ich das Einzel-Tick-Fahr-Problem gelöst habe gehts weiter ...
Eine gute Zeit den Lesern
Dieter