Archiv verlassen und diese Seite im Standarddesign anzeigen : NIBObee Erfahrungsberichte
m.a.r.v.i.n
09.11.2009, 23:35
In diesem Thread geht es um die ersten Erfahrungen mit dem NIBObee Roboter. Vom Hersteller Nicai systems (http://nibobee.nicai-systems.de/) wurden freundlicherweise 10 Bausätze an interessierte RN-User zur Verfügung gestellt.
Näheres dazu im folgenden Thread:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=50827
Heute kam nun endlich das Paket mit Bausatz an. Die Anleitung und die Blibliotheken hatte ich mir schon während des Wochendes durchgelesen.
Nun konnte ich es kaum mehr erwarten, endlich mit dem praktischen Teil anzufangen.
http://farm3.static.flickr.com/2787/4091004756_ab861dd5d7.jpg
Der Aufbau:
Den Aufbau erfolgte Schritt für Schritt nach der wirklich sehr guten Anleitung. Alles ist schön bebildert und erklärt, man kann eigentlich nicht viel falsch machen.
Alle Bauteile waren soweit vorhanden, keines fehlte und es war auch keines zuviel. Die Widerstände kontrollierte ich vor dem Einlöten mit dem Multimeter. Zudem, um ganz sicher zu gehen, verglich ich den Wert und Bezeichnung zwischen Bestückungsplan und dem Schaltplan. Alles soweit i.O.
Da ich zwischendurch immer wieder mal ein paar Fotos machte, dauerte das Bestücken der Platinen schon mal 2 1/2 Stunden. Damit reichte es mir dann auch schon für heute. So sieht das bisherige Ergebnis aus.
http://farm3.static.flickr.com/2619/4090269533_a3c5203673.jpg
http://farm3.static.flickr.com/2496/4090259895_ea655918c6.jpg
Weiter geht es dann morgen, mit dem Zusammenbau der Komponenten und der Inbetriebnahme.
Weitere Fotos befinden sich auf meiner Flickr Seite (http://www.flickr.com/photos/hmblgrmpf/sets/72157622770689906/).
oberallgeier
10.11.2009, 17:32
Hallo NIBObee `s,
Tester, Löter und sonstwie Zusammenbauer. Wer beim Löten/Bestücken fleissiger ist als ich, der sollte nicht weiterlesen. Ich habe mir die Sache etwas einfach gemacht. Erstmal bei der Kontrolle der Bauteile gleich die Daten der Widerstände (es sind über 50 verbaut !! - die wollen alle sauber eingelötet werden) auf das Gurtband geschrieben - das macht die Bestückungsarbeit sicher gegen Interrupts. Wer keine passende Biegeschablone parat hat, kann sich einfach selbst eine basteln, siehe Bild, rechts unten im Schraubstock (grösseres Bild ist verlinkt).
......https://dl.dropbox.com/s/dlzxrd0o7t0s7rk/NIBO_1814_kl.jpg?dl=0 (https://dl.dropbox.com/s/r07vddvv77kir4g/NIBO_1814.jpg?dl=0)
......Klick aufs Bild - dann gibts ne bessere Auflösung.
Immer mal einen Satz Widerstände biegen, einstecken, löten (ich drehe erst die Platine um - uuups - da können Widerstände rausfallen, wenn man nicht aufpasst - und löte von der Lötseite *ggg*), und dann den nächsten Satz . . . . dann z.B. Dioden, usw. Immer schön so, dass man bei den nächsten Teilen noch an die Lötpunkte kommt. Aber bei der hübschen Hauptplatine ist sowieso nicht wenig Platz.
Hallo,
ich bin ebenfalls gerade dabei den Nibobee zusammen zu löten.
Ich habe mich parallel dazu schon mal mit dem Beispielprogramm Test.c beschäftigt.
Dabei bin ich auch prompt auf ein Problemchen gestossen.
Beim compilieren erhielt ich die Meldung
..\NiboTest.c:8:27: error: nibobee/delay.h: No such file or directory
..\NiboTest.c: In function 'main':
..\NiboTest.c:19: warning: implicit declaration of function 'delay'
make: ***[NiboTest.o] Error 1
Build failed with 1 errors and 1 warnings...
Ursache hierfür ist die Zeile
#include <nibobee/delay.h>
denn in ..\NIBObeeLib\nibobee gibt es keine delay.h Datei.
Ist das nur bei mir so oder hattet ihr auch das Problem?
Also habe ich die Zeile geändert in
#include<util/delay.h>
Das war aber nur die halbe Lösung, denn der Aufruf
delay(500);
muss für die <util/delay.h> wie folgt aussehen
_delay_ms(500);
Erst jetzt konnte ich im AVRStudio die Test.c fehlerfrei übersetzen.
Als Alternative habe ich die delay.h in ..\NIBObeeLib\nibobee selbst erstellt.
Sie sieht wie folgt aus
#include <util/delay.h>
/**
\ingroup util_delay
Perform a delay of \c __ms milliseconds, using _delay_loop_2().
The macro F_CPU is supposed to be defined to a
constant defining the CPU clock frequency (in Hertz).
The maximal possible delay is 262.14 ms / F_CPU in MHz.
When the user request delay which exceed the maximum possible one,
_delay_ms() provides a decreased resolution functionality. In this
mode _delay_ms() will work with a resolution of 1/10 ms, providing
delays up to 6.5535 seconds (independent from CPU frequency). The
user will not be informed about decreased resolution.
*/
void delay(int time)
{
_delay_ms(time);
}
Jetzt funktioniert der Aufruf auch mit
delay(500);
Gibt es einen anderen Trick für das Problemchen?
Oder wie sieht die Lösung eines C-Experten dafür aus?
Viele Grüße
Skroete
m.a.r.v.i.n
10.11.2009, 21:47
Hallo,
schön, das es doch noch ein paar andere Tester gibt :wink:
Das Problem mit der delay Funktion ist mir auch schon aufgefallen. Daraufhin habe ich statt delay delay_ms verwendet Damit ging es dann bei mir.
Die NIBObee Lib ist halt noch nicht fehlerfrei. Vorgestern wurde eine neue Version auf Sourceforge gestellt. Vielleicht ist damit der Fehler schon weg.
Mein Stand der Dinge:
Der Aufbau ist beendet. Ich fand schon, dass es einfacher ging, als beim Asuro. Das liegt sicher auch daran, dass auf der NIBObee Platine mehr Platz ist. Die Widerstände müssen nicht, wie beim Asuro hochkant eingelötet werden.
Nun zu meinen Problemen beim Selbsttest:
* Die Liniensensoren funktionieren soweit.
* Die gelbe LED 3 leuchtet fast immer. Außer man drückt den rechten oder linken Tastsensor nach vorne. Die anderen LEDs funktionieren.
* Die Radencoder funktionieren nicht. Zumindest blinkt keine gelbe LED, egal wie man den Trimmer einstellt.
* Die Motoren drehen nicht, wenn der Jumper 7 gesetzt ist und die Tastsensoren bewegt werden. Weder vorwärts noch rückwärts.
Dann mal fröhliche Fehlersuche. Später mehr.
workwind
10.11.2009, 22:34
Hallo m.a.r.v.i.n!
Die NIBObee Lib ist halt noch nicht fehlerfrei. Vorgestern wurde eine neue Version auf Sourceforge gestellt. Vielleicht ist damit der Fehler schon weg.
Das ist korrekt, der delay Fehler ist in der neuen Version behoben.
* Die gelbe LED 3 leuchtet fast immer. Außer man drückt den rechten oder linken Tastsensor nach vorne. Die anderen LEDs funktionieren.
* Die Radencoder funktionieren nicht. Zumindest blinkt keine gelbe LED, egal wie man den Trimmer einstellt.
Ist der Operationsverstärker IC4 richtig gesteckt?
* Die Motoren drehen nicht, wenn der Jumper 7 gesetzt ist und die Tastsensoren bewegt werden. Weder vorwärts noch rückwärts.
Ist mit dem IC3 (74HC139) alles in Ordnung?
Viele Grüße,
Nils
m.a.r.v.i.n
10.11.2009, 23:20
Hallo Nils,
Ein Fehler ist gefunden. Die Encoder funktionieren jetzt. War eine kalte Lötstelle an der IR LED. LED3 leuchtet zwar weiterhin ständig, aber beide Ausgänge vom LM358 geben Rechteck Signale aus, wenn die Räder bewegt werden.
Die Signale am HC139 sehen eingangsseitig i.O. aus. DIR wechselt zwischen LOW und HIGH wenn man die Tastsensoren bewegt, PWM bleibt immer auf HIGH. Beide Ausgänge (Pin 4,6 bzw. 10,12) bleiben aber immer HIGH. Komischerweise ändern sich an den nicht benutzten Ausgängen Pin 5,7 bzw. 9,11 etwas. Hast du dazu noch eine Idee.
Für heute ist jetzt erst mal Schluß. Morgen ist auch noch ein Tag.
oberallgeier
11.11.2009, 09:07
Hallo alle,
ich muss sagen, dass ich die Aufbauzeit garnicht lang genug ausdehnen kann - so sehr macht mir die Präzision der Teile des schnuckeligen Bienchens Spass. Es ist einfach ein Genuss, daran zu arbeiten.
Wer wie ich über die unterschiedlichen Stückzahlen der gelben und grünen LEDs stolpert - es sind 3 (drei) grüne und zwei (2) gelbe LEDs. Im Punkt 4.2 auf Seite 46 der Bauanleitung, Version vom 12.10.2009, sind bei den Wertangaben (green / yellow) nur die Farben vertauscht.
m.a.r.v.i.n
11.11.2009, 21:16
Hallo,
meine NIBO Biene funktioniert jetzt. Der Grund waren 3 nicht gelötete Pins am Prozessor. ](*,)
Zum Löten möchte ich noch was anmerken. Ich habe zum ersten mal mit bleifreien Lötzinn gearbeitet. Trotz guter Lötstation und Einhalten der empfohlenen Löt Temperatur von 370°, gestaltet sich das Löten wesentlich schwieriger als mit Bleilot. War das bei euch auch so?
Nachdem die Motoren jetzt laufen, taucht ein neues Problem auf. Das linke Getriebe blockiert manchmal. Man hört es auch deutlich. Obwohl alle Achsen und Zahnräder gut geschmiert wurden (Teflon Fett). Was könnte das sein? An genau einer Stelle blockiert gelegentlich das Zahnrad auf dem das Rad sitzt.
In der Anleitung habe ich auch noch einen kleinen Fehler entdeckt. Auf dem Bestückungsplan S. 18 sind nicht alle Widerstände eingegraut.
Edit: Das hakende Getriebe funktioniert jetzt auch. Wahrscheinlcih bin ich Schussel mit dem heißen Lötkolben an das Zahnrad gekommen. 2 Zähne mußte ich mit der Feile nachbearbeiten. Nun kann ich mit mit dem Tutorial weitermachen. \:D/
oberallgeier
11.11.2009, 23:28
Meine Bee (hiess die Leitlinie der Entwickler vielleicht "bee or not bee"?) macht (auch) schon die elementaren Testfunktionen. Eine fehlenden Lötverbindung der frontseitigen Sensorik wurde durch den Weißblatttest diagnostizierbar, ein Lötfehler in einer Odometer-Aussenplatine durch den Odometrie-Einstelltest - der anfangs nicht korrekt lief. Jetzt funktioniert alles einwandfrei. Weißblatttest, Fühlertest mit und ohne Motor und Odometrietest. Die Empfindlichkeitseinstellung der Odometrie mit dem Poti 29 finde ich sagenhaft - mal sehen, was spätere Messreihen durch diese Korrekturmöglichkeit ergeben.
Getriebeprobleme hatte ich am rechten Motor. (Anmerkung: ich hatte eindeutig keinen Lötkolbenkontakt mit den Zahnrädern). Mehreren Prüfungen, und zwar auf Winkligkeit der Getriebeachsen, Achsabstand und Lärmentwicklung und die folgenden Nacharbeiten brachten schließlich einen praktisch problemlosen Motorbetrieb. Beide Motoren laufen etwa gleich schnell bei Steuerung mit den Fühlern. Dabei läuft der linke sehr ruhig, der rechte meist sehr ruhig, aber mit gelegentlichen Vibrationen. Während also links beim Motorbetrieb, auch beim Fahren, ein ungestörtes, bienengerechtes Summen ertönt, ist der rechte Motor wohl aus einer Grille - und auf Biene umgebaut - das zirpt hin und wieder. Sorry für OT.
Fehlerursache war einmal ein zu geringer Achsabstand und ein, meiner Meinung nach, verhältnismäßig geringer Winkelfehler. Der Winkelfehler war bald behoben, aber der Achsabstand forderte ein geringfügig „nach hinten“ eingebrachtes Langloch im innen liegenden Lager des Odometrierades. Hier liegt möglicherweise eine kleine, unschöne Problemstelle. Es sei denn, dass dieser Fehler auf meine ungenügende Präzision bei der Montage und Fixierung des Getriebegehäuses zurückzuführen wäre. Das kann ich ja nicht ausschließen.
Ziemlich benutzerfreundlich finde ich die Möglichkeit, dass erste, grundlegende Tests ohne Software gemacht werden können. Nur so sind ja auch erste Fehlerreparaturen möglich.
Lötprobleme hatte ich keine - ich habe noch etwa 200 g "alten" Lötdraht Ø 0,5 mm *ggg*.
Weitere Berichte, dann softwarebezogene, werde ich in einem separaten Thread schreiben.
oberallgeier
12.11.2009, 10:37
Ein kleiner Nachtrag zu einer Montagehilfe. Dieser kleine Montageständer ist praktisch. Ich habe dazu einen Yoghurtbecher genommen, dessen Boden zu etwa 2/3 der Höhe abgeschnitten wurde. In diese Schnittkante kommen Aussparungen. Oberteil umgedreht aufstellen. Bee wird mittig draufgestellt. Damit sind jetzt sowohl die beim Bestücken eingefädelten Widerstände ungestört, als auch z.B. Testfahrten im „Prüfstandsmodus“ möglich.
................https://dl.dropbox.com/s/rkq91ona3hxs318/NB_montagestaender_1816.jpg?dl=0
................Grösseres Bild verlinkt.
oberallgeier
13.11.2009, 10:55
Hallo Bienenfreunde und -tester,
eine Frage zu den Getrieben des NIBObee. Bin ich der einzige mit Getriebeproblemen? Das interessiert mich einfach deswegen, weil ich natürlich durch den Vergleich mit anderen die Qualität meiner Montagearbeiten beurteilen könnte.
Danke für offene Stellungnahmen.
radbruch
13.11.2009, 14:55
Hallo Nibobee-Fans :)
Obwohl ich eigentlich nicht zur Zielgruppe des Bienchens gehöre habe ich mich auch als "Tester" beworben:
http://radbruch.roboterbastler.de/nibobee/nibobee1_klein.jpg (http://radbruch.roboterbastler.de/nibobee/nibobee1.jpg)
Das ist mein Zwischenstand nach ca. 5 Stunden (2 Abende) bastelei und damit habe auch ich das Ende der Bauanleitung erreicht. Wie erwartet (ich bin nach wie vor begeistert) ist der Aufbau dank guter Anleitung (besonders erwähnen möchte ich dabei Blatt 18) und geringer Bauteiledichte (mit "liegenden" Bauteilen) völlig unproblematisch. Selbst das Auseinanderbrechen der Platinen ist unkritisch und kann sogar ohne Flachzange gemeistert werden;) Obwohl der schlichte Karton mit den Bauteiletütchen auf den ersten Blick chaotisch wirkt ist das Sortieren dank der abschnittweisen Verpackungen der Bauteile einfach und mit den Hinweisen in der Anleitung die Identifizierung aller Bauteile eindeutig.
Der Zusammenbau der Getriebe ist allerdings doch etwas fummelig. Nach dem Ausbrechen der Teile habe ich alle Kanten mit einer (Nagel-)Feile gebrochen. Beim Einfügen der nur schwach angefasten Achsen in die Zahnräder wurde jedesmal ein kleiner Kunststoffspan aus der Bohrung geschoben. Möglicherweise wird dadurch das Zentrum der Bohrungen verändert. Die kleine Achse im roten Zahnrad sollte am kleinen Ritzel weniger rausschauen sonst streift das Rad, aber nicht übertreiben sonst stößt die Achse gegen den Batteriehalter. Die 17mm der langen Achsen könnten auch 15 sein, ich habe das Rad zur Verringerung des Achsspiels bis fast zum weisen Zahnrad eingepresst. Als Montagehilfe beim Einbau der Motoren eignen sich die Räder genial: Ein Rad mittig unter die noch nicht verlöteten Motoren (Nabe passt genau dazwischen;) und das andere Rad unter die USB-Buchse legen. Trotz aller Mühe fluchten die Motoren allerdings nicht zueinander, jeweils in der Platinenmitte stehen sie minimal hoch.
Die Getriebe weisen bei mir keine seitenabhängigen Auffälligkeiten auf, sowohl der Drehwiderstand als auch die Geräuschentwicklung sind sehr ähnlich. (Links läuft subjektiv etwas leichter und minimal länger nach)
Nach dem Zusammenbau verunsicherte mich das fehlende Klicken der Taster wenn ich sie mit den Stummelfühlern betätige. Auch nachdem ich die Gegenplättchen der Fühlerachsen unter leichtem Gegendruck nahezu spielfrei nachgelötet hatte, klickte nur ein Taster. Bei der Betätigung mit einer Messerspitze ist das Klicken aber an allen Schaltern deutlich zu hören. (s.u.)
Die Lötfahnen vom Schalter S1 passen nicht in die Lötpads, dadurch "schwebt" der Schalter über der Platine und verbiegt sich beim Betätigen bedenklich. (Dies war beim meinem asuro die Ursache für einen Schalterdefekt)
Anstelle der stylischen kleinen Halbkugel habe ich einen TT-Ball angeklebt. Der passt genau zwischen die Platinenstummel (4+5) und sorgt dafür, dass die Biene im Wasser steht ;)
Den Abschluss des Aufbaus bildet der im Mega16 schon installierte Selbsttest. Für Ungedultige innovativ bedienbar bekommt man damit schnell eine Bestätigung für die Mühen:) Unerwarteter Weise funktioniert mein Bienchen auf Anhieb, das katapultiert mich wohl direkt auf Platz eins der Opa-Liga;)
Da ich AVR-GCC schon installiert habe und anstelle des AVR-Studios schon lange KamAVR (http://www.avrfreaks.net/index.php?module=FreaksTools&func=viewItem&item_id=632) nutze, werde ich nur die Libraries installieren und euch das Testen der Softwareinstallation überlassen.
Gruß
mic
radbruch
13.11.2009, 17:54
Nochmals hallo
Jetzt bin ich echt in einer Sackgasse gelandet. Eigentlich wollte ich ja nur die Lib, die Treiber und das Programmiertool installieren. Also habe ich mir die aktuelle Zip-Datei runtergeladen und entpackt. Darin befinden sich aber weder Treiber noch Programmiertool. Die Lib selbst erscheint mir auch seltsam, nur Objektdateien, keine Header und keine Quellcodes.
Widerwillig habe ich dann doch die msi-Datei gestartet. Keine Ahnung, was die mit meinem W2K-System alles anstellt. Leider (oder zum Glück?) will die nun aber auch noch Admin-Rechte. Die kann (und will) ich ihr aber nicht geben, also habe ich abgebrochen.
Gruß
mic
oberallgeier
13.11.2009, 18:10
... in einer Sackgasse gelandet ... Keine Ahnung, was die mit meinem W2K-System alles anstellt ...Da habe ich recht wenig Angst - eine aktuelle Firewall (na ja, mit der im Router sogar zwei), ein braver Virenscanner - damit bin ich seit Jahren bestens geschüzt.
... keine Header und keine Quellcodes ...Nach Ausführen der NIBObeeLib-20091108.msi habe ich das. Unpraktischer Weise auf meiner C - aber von dort habe ich es schon in (m)einen Arbeitsbereich für SWEntwicklung geholt.
m.a.r.v.i.n
13.11.2009, 19:17
Hallo,
auch im msi File befinden sich keine Quellen. Die gibt es nur direkt vom SVN Server (http://nibobeelib.svn.sourceforge.net/). Wer keinen SVN Client hat, kann sich auch ein Gnu Tarball (gezipptes Archiv) downloaden.
Im SVN befinden sich auch die notwendigen Treiber und das Programmer Tool für den USB Programmer (Leider nur für Windoof). Den Treiber kann man dann manuell installieren.
Meine ersten Flash Versuche waren erfolglos, trotz Fortschritts- und Erfolgsmeldung. Bis ich dann im Tutorial las. Man muss zuerst den NIBObee einschalten, dann den USB Stecker stecken und das Programm flashen.
Edit: Ich merke gerade im SVN befinden sich nur die Quellen für das Programmer Tool, kein Executable. Führt wohl doch kein Weg drum herum, das msi Fail zu installieren
radbruch
13.11.2009, 21:26
Hallo
Na das ist echt ärgerlich. Für Nibobee-Käufer ohne Adminrechte (ja, das gibt es auch;) wäre hier eindeutig Ende der Fahnenstange.
Ich hab's jetzt so gelöst: Aktuelle MSI-Datei (20091108) runterladen, die fluffigen 1,3MB auf USB-Stick kopieren, Stick zu einem Rechner mit Adminrechten tragen, dort installieren ;), den nibobee-Pfad zurück auf den Stick kopieren, den Stick zurück zum rechtelosen Rechner tragen und dort die Daten an den Ort meiner Wahl kopieren. (Danach alles neu zippen ergibt ein rechteloses 1,4MB-Archiv;) Warum allein die AVRDUDE-Oberfläche satte 3MB belegt ist mir völlig schleierhaft. Ich melde mich wieder...
Gruß
mic
[Edit]
Tja, das wird irgendwie nichts. Mein W2K mag den USB-Treiber nicht installieren ("Keine Hardwareinformationen") Blödblödblöd :(
[Edit2]
Flashen funzt:) Das banale Problem waren leere Akkus im nibobee. Beim Anstöpseln wurde das neue USB-Device erkannt, bis ich aber beim Installieren des Treibers angekommen war, wurde die Biene wegen Unterspannung nicht mehr erkannt, deshalb meldete mein W2k: "An diesem Ort keine Hardwareinformationen gefunden"
pinsel120866
14.11.2009, 15:25
Hallo ihr Imker ;-)
hiermit oute ich mich auch als einer der "Beschenkten" - danke an Nicai Systems.
Ich bin echt begeistert vom Bienchen - in ca. 5 Stunden ist der NIBO aufgebaut, sehr gute Anleitung (habe ich mir auf beiliegendem Hinweis heruntergeladen, wegen der aktuellen Version) - ein richtiger "Spassroboter".
Als gelernter Maschinenbauer habe ich gleich versucht das Getriebe zu verbessern. Ist bei euch auch das rote Zahnrad mit den Phototransitoren touchiert? Bei mir schon - da habe ich einfach zwischen dem Zahnrad und der Distanzhülse 5 Beilagscheiben dazwischengepackt - sh. Foto. Damit "schwimmt" auch das Zahnrad nicht mehr hin und her.
Die "Fühler" habe ich ebenfalls kürzer gemacht, damit passt der Nibo in die Originalschachtel, was die Aufbewahrung einfacher macht.
Optisch stört mich derzeit noch die Höhe der Halbspähre, mal sehen inwieweit die Liniensensoren dadurch gestört werden.
Die Inbetriebnahme hat soweit auch geklappt, nur kommt der Computerteil dran - melde mich wieder!
radbruch
14.11.2009, 16:43
Hallo
Gut, dass ich meine Fühler noch nicht motiert habe. Willkommen bei den Testern:)
Nun bin ich endlich auch in der Lage eigene Programme zu kompilieren und zu flashen. Etwas gewöhnungsbedürftig ist das direkte Durchstarten nach dem Flashen:
http://i3.ytimg.com/vi/ZfRjgjcQ1rY/default.jpg (http://www.youtube.com/watch?v=ZfRjgjcQ1rY)
http://www.youtube.com/watch?v=ZfRjgjcQ1rY
Mein erstes Testprogramm:
// Dieses Testprogramm läßt beim NIBObee alle LEDs blinken. 14.11.09 mic
#include <nibobee/iodefs.h> /* muss immer als erste Datei eingebunden werden */
#include <nibobee/led.h> /* Funktionen fuer die LEDs */
#include <nibobee/delay.h> /* stellt die delay Routine zur Verfügung */
#include <nibobee/sens.h> /* Funktion der Fühler einbinden */
int main(void) {
led_init(); // IO-Ports der LEDs als Ausgänge konfigurieren
sens_init(); // und Fühler aktivieren
led_set(LED_L_RD, 1); // Linke rote LED an
led_set(LED_R_RD, 1); // Rechte rote LED an
led_set(LED_R_YE, 1); // Linke gelbe LED an
led_set(LED_L_YE, 1); // Rechte rote LED an
while(!sens_getLeft() && !sens_getRight());
while(1==1) { // Endlosschleife (1==1 ist immer wahr!)
led_set(LED_L_RD, 1); // Linke rote LED an
delay(250); // Eine halbe Sekunde warten
led_set(LED_L_RD, 0); // Linke rote LED aus
delay(500); // Eine halbe Sekunde warten
led_set(LED_R_RD, 1); // Rechte rote LED an
delay(250); // Eine halbe Sekunde warten
led_set(LED_R_RD, 0); // Linke rote LED aus
delay(500); // Eine halbe Sekunde warten
led_set(LED_R_YE, 1); // Rechte gelbe LED an
delay(250); // Eine halbe Sekunde warten
led_set(LED_R_YE, 0); // Rechte gelbe LED aus
delay(500); // Eine halbe Sekunde warten
led_set(LED_L_YE, 1); // Linke gelbe LED an
delay(250); // Eine halbe Sekunde warten
led_set(LED_L_YE, 0); // Linke gelbe LED aus
delay(500); // Eine halbe Sekunde warten
}
return 0; // Diese Zeile ist eigentlich nicht
// notwendig, da das Programm sie wegen
// der Endlosschleife nie erreichen
// wird, der Compiler gibt jedoch
// ansonsten eine Warnung aus.
}
Das Installieren der Lib war etwas zäh, weil in den Dateien nicht durchgängig die Headerdateien mit <> bzw. """ includet sind. Deshalb mußte ich alle Dateien in den AVR-Pfad kopieren (den ich eigentlich nicht verändern wollte). Desweiteren habe ich in iodefs.h die Modellabfrage auskommentieren müssen. Das ist aber eher ein Problem vom KamAVR.
Hier vermisse ich etwas die All-Inklusive asuro-Lib. Beim Bienchen-Konzept mit mehreren Teildateien wird nur das eingebunden was auch benötigt wird. Aber ob das ein paar Bytes mehr oder weniger sind, fällt bei der Übertragungsgeschwindigkeit nicht auf.
So, jetzt kann ich endich richtig starten. Mal sehen was das Bienchen so drauf hat:)
Gruß
mic
pinsel120866
14.11.2009, 16:55
Hallo zusammen,
die Installation (bei mir unter Windows 7) mit den NEUESTEN Programmen hat bei mir tadellos funktioniert. Super finde ich die Kalibierfunktion, die Linien- und Odometriesensoren einstellen soll. Als Nachteil könnte sich das etwas kurze USB-Kabel herausstellen, für mich als Notebookuser ist das allerdings eher vorteilhaft.
Kompilieren und Flashen der im "Tutorial" angegebenen Testprogramme klappt ebenfalls.
Nun wollte ich das letzte Woche vorgestellte Linienverfolgungsprogramm testen um die Kalibrierung zu überprüfen:
#include <nibobee/iodefs.h>
#include <nibobee/motpwm.h>
#include <nibobee/analog.h>
#include <nibobee/line.h>
#include <nibobee/led.h>
#include <nibobee/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int main() {
activate_output_group(IO_LEDS); // LED bits als Output
motpwm_init();
motpwm_setLeft(0);
motpwm_setRight(0);
analog_init();
line_readPersistent();
set_output_group(IO_SENS); // Pull-ups aktivieren
activate_output_bit(IO_LINE_EN);
int16_t speed_flt_l=0;
int16_t speed_flt_r=0;
// Countdown: LEDs blinken lassen
for (uint8_t i=0; i<10; ++i) {
led_set(LED_L_RD, 1);
led_set(LED_R_RD, 1);
_delay_ms(10);
led_set(LED_L_RD, 0);
led_set(LED_R_RD, 0);
_delay_ms(990);
}
led_set(LED_L_YE, 1);
led_set(LED_R_YE, 1);
_delay_ms(1000);
led_set(LED_L_YE, 0);
led_set(LED_R_YE, 0);
// Hauptschleife:
while(1) {
sei();
_delay_ms(1);
int16_t speed_l=0;
int16_t speed_r=0;
int16_t lval = line_get(LINE_L);
int16_t cval = line_get(LINE_C);
int16_t rval = line_get(LINE_R);
if (lval+cval+rval < 20) {
led_set(LED_L_RD, 0);
led_set(LED_R_RD, 0);
speed_r=0, speed_l=0;
} else if ((lval<cval) && (lval<rval)) {
// lval is minimum
led_set(LED_L_RD, 1);
led_set(LED_R_RD, 0);
speed_r=550, speed_l=450-1*(cval-lval);
} else if ((rval<cval) && (rval<lval)) {
// rval is minimum
led_set(LED_L_RD, 0);
led_set(LED_R_RD, 1);
speed_r=450-1*(cval-rval), speed_l=550;
} else {
// cval is minimum
led_set(LED_L_RD, 1);
led_set(LED_R_RD, 1);
speed_r=750 + 1*(rval-cval), speed_l=750 + 1*(lval-cval);
}
speed_flt_l*=3; speed_flt_l+=speed_l; speed_flt_l/=4;
speed_flt_r*=3; speed_flt_r+=speed_r; speed_flt_r/=4;
motpwm_setLeft(speed_flt_l);
motpwm_setRight(speed_flt_r);
}
return 0;
}
Ich kriege aber leider Fehler:
Build started 14.11.2009 at 16:39:31
avr-gcc -I"C:\Users\HP\Documents\NibobeeTest\..\..\..\..\Prog ram Files\NIBObeeLib\include" -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=15000000UL -Os -fsigned-char -D_NIBOBEE_ -MD -MP -MT NibobeeTest.o -MF dep/NibobeeTest.o.d -c ../NibobeeTest.c
avr-gcc -mmcu=atmega16 NibobeeTest.o -L"C:\Program Files\NIBObeeLib\lib" -lnibobee_base -lnibobee_utils -lnibobee_line -o NibobeeTest.elf
C:\Program Files\NIBObeeLib\lib\libnibobee_line.a(line.o): In function `line_calibrateBlack':
line.c:(.text.line_calibrateBlack+0x4): undefined reference to `delay'
C:\Program Files\NIBObeeLib\lib\libnibobee_line.a(line.o): In function `line_calibrateWhite':
line.c:(.text.line_calibrateWhite+0x4): undefined reference to `delay'
make: *** [NibobeeTest.elf] Error 1
Build failed with 2 errors and 0 warnings...
Weiss jemand, warum?
radbruch
14.11.2009, 17:28
Hallo
Ich mußte in allen Funktionen ein "void" in die leeren Klammen schreiben. Und i vor der Schleife deklarieren. Vermutlich ist meine AVR-GCC-Version zu alt. Mir fehlt auch die Datei: #include <util/atomic.h> Muß ich mich mal schlau machen was die eigentlich bewirkt...
Gruß
mic
pinsel120866
14.11.2009, 18:03
Hmm,
ich vermute die Datei line.c aus der Bibliothek stimmt nicht. Ich kann nämlich den Quellcode aus Seite 38 auch nicht kompilieren.
Hallo NIBObee `s,
. dann z.B. Dioden, usw. Immer schön so, dass man bei den nächsten Teilen noch an die Lötpunkte kommt. Aber bei der hübschen Hauptplatine ist sowieso nicht wenig Platz.
Alter Trick, man fängt immer mit den niedrigsten Bauteilen an, hier
warscheinlich die Dioden. Zum Löten gegenherausfallen der Bazteile
sind Haarklipps gut zu gebrtauchen, es gibt ziemlich lange und zur
Not lötet man eine Verlängerung an. Wenn man gleich mehr Bauteile
Löten wil, einfach einne Schamstoffmunterlage auf die Platine legen
und beides zusammen umdrehen. Dann fällt nix mehr raus. :-)
Sag jetzt keiner der Schaumstoff schmilst..und wenn ist das togalegal.
Ich habe einen bstückungsrahmen für bis zu 2 Eurokarten der ähnlich
funktioniert und da verkokelt nix. :-)
Gruß Richard
radbruch
14.11.2009, 20:52
Hallo
Ich habe es nun doch übersetzt bekommen. Da ich ja noch meine alte AVR-GCC-Installation verwende (never chance a runing system;) kann ich nicht sagen, ob die Probleme representativ sind:
-In allen Funktionsprototypen ein void in die Klammern eingefügt, auch in main()
-Alle #include "" nach <> geändert
-Trotz anscheinend korrekt eingebundener atomic.h klappte das Kompillieren erst nachdem ich überall die atomic-Funktionen mit cli()--sei() ersetzt hatte. atomic.h verhindert u.a. Fehler bei gleichzeitigem Zugriff von Programm und ISR auf eine mehr als 8bit-Variable und rettet wichtige Register. Änderungsbeispiel in motpwm.c:
void motpwm_stop(void) {
//ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
{
cli();
motpwm_motor_l = 0;
motpwm_motor_r = 0;
PWM_TIMER_OCRA = 0;
PWM_TIMER_OCRB = 0;
sei();
}
}
Meine atomic.h:
/* Copyright (c) 2007 Dean Camera
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holders nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
/* $Id: atomic.h,v 1.3 2007/12/20 14:17:56 joerg_wunsch Exp $ */
#ifndef _UTIL_ATOMIC_H_
#define _UTIL_ATOMIC_H_ 1
#include <avr/io.h>
#include <avr/interrupt.h>
#if !defined(__DOXYGEN__)
/* Internal helper functions. */
static __inline__ uint8_t __iSeiRetVal(void)
{
sei();
return 1;
}
static __inline__ uint8_t __iCliRetVal(void)
{
cli();
return 1;
}
static __inline__ void __iSeiParam(const uint8_t *__s)
{
sei();
__asm__ volatile ("" ::: "memory");
(void)__s;
}
static __inline__ void __iCliParam(const uint8_t *__s)
{
cli();
__asm__ volatile ("" ::: "memory");
(void)__s;
}
static __inline__ void __iRestore(const uint8_t *__s)
{
SREG = *__s;
__asm__ volatile ("" ::: "memory");
}
#endif /* !__DOXYGEN__ */
#if defined(__DOXYGEN__)
#define ATOMIC_BLOCK(type)
#else
#define ATOMIC_BLOCK(type) for ( type, __ToDo = __iCliRetVal(); \
__ToDo ; __ToDo = 0 )
#endif /* __DOXYGEN__ */
/** \def NONATOMIC_BLOCK(type)
\ingroup util_atomic
Creates a block of code that is executed non-atomically. Upon
entering the block the Global Interrupt Status flag in SREG is
enabled, and disabled upon exiting the block from any exit
path. This is useful when nested inside ATOMIC_BLOCK sections,
allowing for non-atomic execution of small blocks of code while
maintaining the atomic access of the other sections of the parent
ATOMIC_BLOCK.
Two possible macro parameters are permitted,
NONATOMIC_RESTORESTATE and NONATOMIC_FORCEOFF.
*/
#if defined(__DOXYGEN__)
#define NONATOMIC_BLOCK(type)
#else
#define NONATOMIC_BLOCK(type) for ( type, __ToDo = __iSeiRetVal(); \
__ToDo ; __ToDo = 0 )
#endif /* __DOXYGEN__ */
/** \def ATOMIC_RESTORESTATE
\ingroup util_atomic
This is a possible parameter for ATOMIC_BLOCK. When used, it will
cause the ATOMIC_BLOCK to restore the previous state of the SREG
register, saved before the Global Interrupt Status flag bit was
disabled. The net effect of this is to make the ATOMIC_BLOCK's
contents guaranteed atomic, without changing the state of the
Global Interrupt Status flag when execution of the block
completes.
*/
#if defined(__DOXYGEN__)
#define ATOMIC_RESTORESTATE
#else
#define ATOMIC_RESTORESTATE uint8_t sreg_save \
__attribute__((__cleanup__(__iRestore))) = SREG
#endif /* __DOXYGEN__ */
/** \def ATOMIC_FORCEON
\ingroup util_atomic
This is a possible parameter for ATOMIC_BLOCK. When used, it will
cause the ATOMIC_BLOCK to force the state of the SREG register on
exit, enabling the Global Interrupt Status flag bit. This saves on
flash space as the previous value of the SREG register does not
need to be saved at the start of the block.
Care should be taken that ATOMIC_FORCEON is only used when it is
known that interrupts are enabled before the block's execution or
when the side effects of enabling global interrupts at the block's
completion are known and understood.
*/
#if defined(__DOXYGEN__)
#define ATOMIC_FORCEON
#else
#define ATOMIC_FORCEON uint8_t sreg_save \
__attribute__((__cleanup__(__iSeiParam))) = 0
#endif /* __DOXYGEN__ */
/** \def NONATOMIC_RESTORESTATE
\ingroup util_atomic
This is a possible parameter for NONATOMIC_BLOCK. When used, it
will cause the NONATOMIC_BLOCK to restore the previous state of
the SREG register, saved before the Global Interrupt Status flag
bit was enabled. The net effect of this is to make the
NONATOMIC_BLOCK's contents guaranteed non-atomic, without changing
the state of the Global Interrupt Status flag when execution of
the block completes.
*/
#if defined(__DOXYGEN__)
#define NONATOMIC_RESTORESTATE
#else
#define NONATOMIC_RESTORESTATE uint8_t sreg_save \
__attribute__((__cleanup__(__iRestore))) = SREG
#endif /* __DOXYGEN__ */
/** \def NONATOMIC_FORCEOFF
\ingroup util_atomic
This is a possible parameter for NONATOMIC_BLOCK. When used, it
will cause the NONATOMIC_BLOCK to force the state of the SREG
register on exit, disabling the Global Interrupt Status flag
bit. This saves on flash space as the previous value of the SREG
register does not need to be saved at the start of the block.
Care should be taken that NONATOMIC_FORCEOFF is only used when it
is known that interrupts are disabled before the block's execution
or when the side effects of disabling global interrupts at the
block's completion are known and understood.
*/
#if defined(__DOXYGEN__)
#define NONATOMIC_FORCEOFF
#else
#define NONATOMIC_FORCEOFF uint8_t sreg_save \
__attribute__((__cleanup__(__iCliParam))) = 0
#endif /* __DOXYGEN__ */
#endif
-In der For-Schleife will mein Kompiller keine Variablendeklaration akzepieren
-Die Variable uint16_t nibobee_initialization von Hand erzeugt. Ich weiß noch nicht, wo die normalerweise herkommen sollte.
Meine mit 2386 Bytes übersetzte Version des Liniendemos sieht nun so aus:
// kleines Linienfolgedemo (nachbearbeitet) 14.10.09 mic
// https://www.roboternetz.de/phpBB2/viewtopic.php?p=470433#470433
// https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=468642#468642
#include <nibobee/iodefs.h>
#include <nibobee/motpwm.h>
#include <nibobee/analog.h>
#include <nibobee/line.h>
#include <nibobee/led.h>
#include <nibobee/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
uint8_t i;
uint16_t nibobee_initialization;
int main(void) {
activate_output_group(IO_LEDS); // LED bits als Output
motpwm_init();
motpwm_setLeft(0);
motpwm_setRight(0);
analog_init();
line_readPersistent();
set_output_group(IO_SENS); // Pull-ups aktivieren
activate_output_bit(IO_LINE_EN);
int16_t speed_flt_l=0;
int16_t speed_flt_r=0;
// Countdown: LEDs blinken lassen
for (i=0; i<10; ++i) {
led_set(LED_L_RD, 1);
led_set(LED_R_RD, 1);
_delay_ms(10);
led_set(LED_L_RD, 0);
led_set(LED_R_RD, 0);
_delay_ms(990);
}
led_set(LED_L_YE, 1);
led_set(LED_R_YE, 1);
_delay_ms(1000);
led_set(LED_L_YE, 0);
led_set(LED_R_YE, 0);
// Hauptschleife:
while(1) {
sei();
_delay_ms(1);
int16_t speed_l=0;
int16_t speed_r=0;
int16_t lval = line_get(LINE_L);
int16_t cval = line_get(LINE_C);
int16_t rval = line_get(LINE_R);
if (lval+cval+rval < 20) {
led_set(LED_L_RD, 0);
led_set(LED_R_RD, 0);
speed_r=0, speed_l=0;
} else if ((lval<cval) && (lval<rval)) {
// lval is minimum
led_set(LED_L_RD, 1);
led_set(LED_R_RD, 0);
speed_r=550, speed_l=450-1*(cval-lval);
} else if ((rval<cval) && (rval<lval)) {
// rval is minimum
led_set(LED_L_RD, 0);
led_set(LED_R_RD, 1);
speed_r=450-1*(cval-rval), speed_l=550;
} else {
// cval is minimum
led_set(LED_L_RD, 1);
led_set(LED_R_RD, 1);
speed_r=750 + 1*(rval-cval), speed_l=750 + 1*(lval-cval);
}
speed_flt_l*=3; speed_flt_l+=speed_l; speed_flt_l/=4;
speed_flt_r*=3; speed_flt_r+=speed_r; speed_flt_r/=4;
motpwm_setLeft(speed_flt_l);
motpwm_setRight(speed_flt_r);
}
return 0;
}
Und kann das:
http://i4.ytimg.com/vi/WaxGDNcvVpo/3.jpg (http://www.youtube.com/watch?v=WaxGDNcvVpo)
http://www.youtube.com/watch?v=WaxGDNcvVpo
Der Löthilfeschaumstoff hat mich locker eine halbe Stunde Zeit gekostet, weil die beiden Odo-IR-LEDs unter ihm versteckt (festgeklammert!) waren ;)
Gruß
mic
[Edit]
Achtung! Nach dem Übertragen des Programms schwirrt die Biene sofort los!
pinsel120866
14.11.2009, 21:54
Komisch... müssten bei deinem Code nicht zuerst die LEDs blinken bevor die Bee losfährt?
Ich kann den Code jedenfalls auch nicht fehlerfrei übersetzen:
Build started 14.11.2009 at 21:50:34
avr-gcc -I"C:\Users\HP\Documents\NibobeeTest\..\..\..\..\Prog ram Files\NIBObeeLib\include" -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -D_NIBOBEE_ -DF_CPU=15000000UL -Os -fsigned-char -MD -MP -MT NibobeeTest.o -MF dep/NibobeeTest.o.d -c ../NibobeeTest
.c
avr-gcc -mmcu=atmega16 NibobeeTest.o -L"C:\Program Files\NIBObeeLib\lib" -lnibobee_base -lnibobee_utils -lnibobee_line -o NibobeeTest.elf
C:\Program Files\NIBObeeLib\lib\libnibobee_line.a(line.o): In function `line_calibrateBlack':
line.c:(.text.line_calibrateBlack+0x4): undefined reference to `delay'
C:\Program Files\NIBObeeLib\lib\libnibobee_line.a(line.o): In function `line_calibrateWhite':
line.c:(.text.line_calibrateWhite+0x4): undefined reference to `delay'
make: *** [NibobeeTest.elf] Error 1
Build failed with 2 errors and 0 warnings...
radbruch
14.11.2009, 22:21
Komisch... müssten bei deinem Code nicht zuerst die LEDs blinken bevor die Bee losfährt?Jepp, müssten sie. Sie tun es auch, allerdings ziemlich schnell. Das Blinken sollte (10+990)*10 Millisekunden (=10 Sekunden;) dauern, in meiner Version dauert das Ganze keine Sekunde. Muss ich mal genauer anschauen...
Warum deine Orginalinstallation nicht funktioniert kann ich im Moment echt nicht sagen. Wir werden wohl abwarten müssen bis sich workwind wieder meldet :(
Gruß
mic
m.a.r.v.i.n
14.11.2009, 23:23
Hallo,
@pinsel. Der 'delay' Fehler ist in der aktuellen Lib Version beseitigt.
http://sourceforge.net/projects/nibobeelib/
Ich habe mich auch dazu entschlossen, die Liniensensoren tiefer zu legen. Mit der Plexiglas Halbkugel funktioniert das irgendwie nicht.
oberallgeier
14.11.2009, 23:33
Zur Liniensensorik
Sie hat eine nicht unbekannte Eigenschaft: die LEDs schielen zu den Phototransistoren und beeinflussen deren Messungen durch einen Offset auf den Messwert des reflektierten Lichtes. Da die Photoempfänger keine AGC haben, ist es meiner Meinung nach empfehlenswert, die LEDs mit Schrumpfschlauchblenden von den Phototransistoren abzuschotten. Ein erster Versuch mit dünnen, nicht aufgeschrumpften Schrumpfschläuchen die bündig zur LED-Kalotte stehen, ergab eine drastische Veränderung der Messcharakteristik. Diese wurde vorerst nur qualitativ festgestellt mit dem Programm, das je nach Signalausgang der Phototransistoren die rtLED und/oder die geLED schaltet. Während ohne Schirm meine Schreibtischoberfläche bis etwa 20 cm Abstand als Reflektor erkannt wurde, sank die Empfindlichkeit mit Schirm auf etwa 5 bis 10 cm. Da die elektronische Empfindlichkeit nicht verändert wurde, wird ziemlich sicher im ersten, ungeschirmten Fall das Streulicht einen kräftigen Offset erzeugen. Es ist fraglich, ob so ein Offset für die meisten Fälle gut, weniger gut oder schlecht ist. Ich meine, dass ich für Liniensuche die Schirme benützen werde – das entspricht auch meinen Erfahrungen zu ähnlich aufgebauten irDME´s:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=38009&sid=8bbfd1d957891cdc9bed874a0b24ad8
oder vielmehr dieses Posting hier:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=351464&sid=782f4696c2667191bafe0f55bc6525d0#351464
kbuchegg
15.11.2009, 00:43
Zum Problem mit dem nicht gefundenen delay
Du musst in der Library Konfiguration im AVR-Studio die nibobee_base ganz ans Ende der Libraryauflistung verschieben (Button: Move Down). Dies deshalb, damit zuerst die nibobee_line.a eingebunden wird. Von dort werden Funktionen verwendet (delay), die sonst nicht in deinem Programm vorkommen. Würde man die nibobee_base zuerst einbinden, dann wird die Funktion delay nicht ins EXE übernommen, weil der Linker noch nicht weiß, das er sie brauchen wird.
Auch hatte ich das Problem, dass die Taster an den Fühlern zwar geschaltet haben aber nur dann, wenn man den Fühler um fast 100° nach hinten biegt. Von 4 Tastern schaltete nur einer mit dem tastertypischen Knacksen.
Ich habe das Problem so gelöst, dass ich die Fühler noch einmal ausgelötet habe und jeweils das hintere der beiden Löcher für den Silberdraht mit einem 1.5mm Bohrer aufgebohrt habe. Das andere 1mm Loch fungiert als Lager für den Silberdraht und das aufgebohrte Loch verschafft dem Draht die nötige Luft um sich um dieses Lager drehen zu können. Nach dem Zusammenbau ergaben sich 4 einwandfrei rastende Taster, die beim Bewegen des Fühlerendes um ca. 2cm einwandfrei hörbar rastend schalten.
oberallgeier
15.11.2009, 09:35
... gewöhnungsbedürftig ist das direkte Durchstarten nach dem Flashen ...Mic, Du hast es sicher selber schon längst gemerkt: vor dem Flashen den Jumper 7 ziehen (vgl. Bauanleitung S 6, Mitte und S 7, 1.2.2 - letzter Satz).
... Problem, dass die Taster ... geschaltet haben aber nur dann, wenn man den Fühler um fast 100° nach hinten biegt ...Ich habe (vgl. Bauanleitung S 36, 2.5.4 - oben) den Silberdraht in den länglichen Hilfsplatinen für die Fühler nicht festgelötet und die beiden kleinen Hilfsplatinen (vgl. Bauanleitung S 36, 2.5.4 - unten) mit einem Papierstreifen als Abstandshalter festgelötet; Papier danach entfernt. Der Schaltklick kommt sauber und trocken. Auslösekraft, gemessen 100 mm von der Fühlerachse - mit vorschriftsmässigen Fühlern, tangential zum Fühler: rechts +/- 60 mN / 100 mN (sprich: 6 g beim Zurückbiegen, 10 g beim Vorbiegen), links +/- 60 mN / 80 mN. (Meine Freie Pistole=Olympiapistole kann ich bei meinem allerbesten Trainingszustand nicht mit weniger als ca. 3..5 g schiessen - sonst geht die sozusagen von alleine los.)
pinsel120866
15.11.2009, 09:55
Hallo,
danke für eure Hinweise. Mit der Umstellung der Reihenfolge der Verarbeitung der Bibliotheken konnte ich den Code kompilieren.
Eine deutliche Verbesserung der Linienerkennung brachte das Anbringen eines Schrupfschlauches auf alle fünf Dioden, zusätzlich habe ich eine Manschette über die Baugruppe gestülpt. Das bringt das beste Ergebnis, siehe Fotos bzw. Video. Als Abstandhalter dient bei mir der gute, alte Tischtennisball, die Orginalkuppel ist meiner Ansicht nach zu hoch.
Nun kann mein Bienchen unter Vollgas die Linie abfahren, siehe dazu:
http://www.youtube.com/watch?v=Au-YrTreRK4
oberallgeier
15.11.2009, 10:28
Hi pinsel120866
sieht ein bisschen nach Schneeräumer aus ? ? ? ?
Ok, Spott beiseite - das hast Du, wie immer, Klasse gemacht. (Ich habe inzwischen bei mir einen kleinen Abstecher zu einem Kurzprojektchen gemacht - aber nur so etwa übers Wochenende.)
Das mit dem Schrumpfschlauch hatte ich ja oben schon erwähnt. Eine komplette Bestückung werde ich ausprobieren, wenn ich mir ein Programm mit Messreihen für verschiedene Auslenkungen zur Linie geschrieben habe. Weil das Ganze ja auf eine analoge Linienerkennung hinauslaufen könnte, wäre mir die erzielbare Kennlinie wichtig.
pinsel120866
15.11.2009, 18:47
Apropos Schneeräumer - das Getriebe verschmutzt extrem schnell von unten, eher wie ein Staubsauger... Ein geschlossener "Radkasten" wäre nicht schlecht.
Noch was - Gibt es eigentlich einen Weg die Sensorwerte auf dem PC auszugeben?
m.a.r.v.i.n
15.11.2009, 19:38
Noch was - Gibt es eigentlich einen Weg die Sensorwerte auf dem PC auszugeben?
Ja, das geht. An Port X5 sind RX und TX vom Prozessor aufgelegt. Allerdings ohne Pegelwandler, nur TTL Pegel. Mit einem USB-UART Wandler kann man so den NIBObee mit dem PC verbinden. Ich habe das mal ausprobiert, funktioniert tadellos. Man könnte auch ein Bluetooth oder XBEE Modem oder EasyRadio verwenden. Dann hat man eine drahtlose Verbindung.
http://farm3.static.flickr.com/2671/4105013297_cab7a4a466.jpg
oberallgeier
15.11.2009, 19:42
Ich habe schon verschiedene Bodenplatten fürs Getriebe ausprobiert - aber die sollten schon stabil sein. Aufgefallen war mir schon, dass das Getriebe oben eher zu und unten eher offen ist. Leider.
Zum Datenaustausch siehe hier (Datum: 29.10.2009 11:45) :
http://www.mikrocontroller.net/topic/155179#1463789
aber dabei gilt natürlich diese Entgegnung (Datum: 29.10.2009 12:18 ) :
http://www.mikrocontroller.net/topic/155179#1463834
ABER : schau Dir mal den Schaltplan an, Rev. 1.07, Sheet 1/3. Stecker x5. *ggggggg*.
Noch was - Gibt es eigentlich einen Weg die Sensorwerte auf dem PC auszugeben?
Hallo Zusammen,
witzig, das passt ziemlich. Habe gerad ein kleines Debug-Programm für den NiboBee geschrieben, bei dem die Sensorwerte zum PC übertragen werden.
Der Gag ist: für ASURO Besitzer geht es ganz ohne Zusatzhardware =P~
NiboBeeSender (http://www.hobby-roboter.de/forum/viewtopic.php?f=4&t=88)
Bester Gruß,
robo
pinsel120866
15.11.2009, 20:25
Hallo,
ich habe mir noch einen "Getriebekasten" aus einer kleinen Cremedose gebastelt, dichtet nach unten ausreichend ab.
@m.a.r.v.i.n: Wo kriege ich den von dir gezeigten Wandler her?
radbruch
15.11.2009, 20:59
Hallo
Die fehlende Kommunikation nervt mich auch. Ich bin auch dran mit dem asuro-IR-Transceiver zu experimentieren, aber es klappt noch nicht wirklich:
// Nibobee IR-Kommunikation mit den LineLEDs. 15.11.09 mic
// Die #defines in der iodefs_nibobee.h sind mir zu umständlich ;)
#define LineLEDs_on PORTB &=~(1<<PB4)
#define LineLEDs_off PORTB |= (1<<PB4)
#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>
#include <nibobee/sens.h>
void IRwriteChar(uint8_t zeichen)
{
uint8_t i, temp=0;
// oje :(
for(i=0; i<8; i++) if(zeichen & (1<<(7-i))) temp&=~(1<<i); else temp|=(1<<i);
UCSRB |= (1<<TXEN);
UCSRA=1<<TXC; // TXC-Flag löschen falls gesetzt
UDR = temp; // Zeichen ins Senderegister des UARTs
while (!(UCSRA & (1<<TXC))) // Solange das Schieberegister nicht leer ist,
{
}
UCSRA=1<<TXC; // TXC-Flag setzen bedeutet löschen!!!
UCSRB &= ~(1<<TXEN);
}
int main(void) {
uint8_t c;
led_init(); // IO-Ports der LEDs als Ausgänge konfigurieren
sens_init(); // und Fühler aktivieren
#define BAUD_2400 2400 //IR speed - 2400 Baud
//#define UBRR_BAUD_2400 (((15000000/16)/BAUD_2400)-1)
#define UBRR_BAUD_2400 390
UBRRH = UBRR_BAUD_2400 >> 8; // Baudrate auf 2400 setzen
UBRRL = (uint8_t) UBRR_BAUD_2400;
UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0); // 8, none, 1
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
OCR2 = 208; // 36kHz @15MHz
TIMSK |= (1 << OCIE2);
DDRB |= (1<<PB4); // LineLED ist ein Ausgang
LineLEDs_on; // LineLED schaltet gegen GND!
DDRD |= 2; // TXD Ausgang und low
PORTD &= ~2;
sei();
led_set(LED_L_YE, 1);
while(!sens_getLeft() && !sens_getRight());
led_set(LED_L_YE, 0);
while(1)
{
c=65;
IRwriteChar(c); // Zeichen in Sendepuffer schreiben
delay(200);
}
return 0;
}
// Die ISR erzeugt die 36kHz-Trägerfrequenz und "lauscht" gleichzeitig am TXD-Pin
// um die seriellen Daten auf die Trägerfrequenz zu mischen. Die IR-Leds sind immer
// an wenn nicht gesendet wird.
ISR (TIMER2_COMP_vect)
{
static uint8_t status=0;
if(status)
{
if(PIND & 2) led_set(LED_R_YE, 1); else led_set(LED_R_YE, 0);
if(PIND & 2) LineLEDs_off; else LineLEDs_on;
status=0;
}
else
{
led_set(LED_R_YE, 0);
LineLEDs_on;
status=1;
}
}
Das delay-Problem habe ich auch gefixt: Die Funktion heißt delay(), im Linienprogramm wir _delay_ms() verwendet.
Frohes Weitertesten
mic
Bei meinem Programm klappt es. Du kannst es ja herunterladen und ausprobieren.
Ich habe mal die Odometriewerte vom NiboBee über die Linien IR-LEs zum Asuro Tansceiver senden lassen. Erst dreht sich der Roboter 1Sec lang rechts rum, dann 1 Secunde lang links rum.
Dabei ergibt sich ein etwas seltsames Verhalten der Odometrie:
Der Motor, der sich rückwärts dreht zeigt ca. 50 Ticks. Der Motor der sich vorwärts dreht, zeigt ca. 70 Ticks. Da sich der Roboter auf der Stelle dreht, sollten beide Werte gleich sein. Wie verhalten sich eure NiboBees in der Hinsicht?
Gruß,
robo
oberallgeier
15.11.2009, 22:27
... Wo kriege ich den von dir gezeigten Wandler her?Von denen. (http://www.watterott.com/FTDI-Basic-Breakout-5V)
m.a.r.v.i.n
15.11.2009, 22:32
@m.a.r.v.i.n: Wo kriege ich den von dir gezeigten Wandler her?
z.B bei watterott (http://watterott.com/FTDI-Basic-Breakout-5V)
Die Idee von robo ist aber auch nicht schlecht, Respekt. =D>
radbruch
16.11.2009, 10:57
Hallo
Nun funktioniert meine IR-Kommunikation auch:
// Nibobee IR-Kommunikation mit den LineLEDs. 16.11.09 mic
// Das Programm verwendet einen netten Effekt des USART: Bei aktivierten Transmitter
// und aktiven Senden kann man im Hintergrund den Pegel des TX-Pins einlesen ;)
// Diesen Effekt verwende ich hier um in der ISR des Timer2 die 36kHz-Impulse zu
// erzeugen und an den Linien-IR-Leds auszugeben. Terminaleinstellung: 2400,8,none,1
// Das funktioniert im Hintergrund mit allen Ausgaben die mit dem USART gesendet
// werden. Ich habe zum Testen drei kleine Funktionen angehängt:
// writeChar(char) sendet ein einzelnes Zeichen
// writeString(string) sendet einen String
// writeInteger(wert, basis) sendet Integerwerte in bin, hex und dec
// Das sollte auch mit der Nibobee USART-Lib funktionieren und hätte dann sogar
// einen Sendebuffer. Ich weiß nur noch nicht wie man die anwendet :)
// Die #defines in der iodefs_nibobee.h sind mir zu umständlich ;)
#define LineLEDs_on PORTB &=~(1<<PB4)
#define LineLEDs_off PORTB |= (1<<PB4)
#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>
#include <nibobee/sens.h>
#include <stdlib.h> // C standard functions (e.g. itoa...)
void writeChar(uint8_t data );
void writeString(char *string);
void writeInteger(int16_t number, uint8_t base);
int main(void) {
uint8_t c;
led_init(); // IO-Ports der LEDs als Ausgänge konfigurieren
sens_init(); // und Fühler aktivieren
#define UBRR_BAUD_2400 390 // Baudrate auf 2400 setzen
UBRRH = UBRR_BAUD_2400 >> 8;
UBRRL = (uint8_t) UBRR_BAUD_2400;
UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0); // 8, none, 1
UCSRB |= (1<<TXEN); // Senden enablen
TCCR2 = (1 << WGM21) | (1 << CS20); // CTC-Mode, no prescaling, no OC2-PIN!
OCR2 = 208; // 36kHz @15MHz
TIMSK |= (1 << OCIE2);
DDRB |= (1<<PB4); // LineLED ist ein Ausgang
LineLEDs_on; // LineLED schaltet gegen GND!
DDRD |= 2; // TXD Ausgang und low
PORTD &= ~2;
sei();
led_set(LED_L_YE, 1);
while(!sens_getLeft() && !sens_getRight()); // warten auf Taste
led_set(LED_L_YE, 0);
writeString("\n\rIR-Kommunikation mit nibobee\n\r");
writeString("Empfang über asuro/Yeti-IR-Transceiver\n\r");
writeString("16.11.09 mic\n\n\r");
while(1)
{
for(c='A'; c<='Z'; c++) writeChar(c);
writeChar(10);
writeChar(13);
for(c='a'; c<='z'; c++) writeChar(c);
writeChar(10);
writeChar(13);
for(c=0; c<16; c++)
{
writeInteger(c, 10);
writeChar('-');
writeInteger(c, 16);
writeChar('-');
writeInteger(c, 2);
writeString("\n\r");
}
writeChar(10);
delay(500);
}
return 0;
}
// Die ISR erzeugt die 36kHz-Trägerfrequenz und "lauscht" gleichzeitig am TXD-Pin
// um die seriellen Daten auf die Trägerfrequenz zu mischen.
ISR (TIMER2_COMP_vect)
{
static uint8_t status=0;
if(PIND & 2) // Der TSOP invertiert die empfangenen Daten!
{
led_set(LED_R_YE, 0); // Kontrollanzeige
LineLEDs_off;
}
else
{
if(status)
{
led_set(LED_R_YE, 1);
LineLEDs_on;
status=0;
}
else
{
led_set(LED_R_YE, 0);
LineLEDs_off;
status=1;
}
}
}
void writeChar(uint8_t data ) // Code aus ATMega16-Datenblatt
{
while ( !( UCSRA & (1<<UDRE)) );
UDR = data;
}
void writeString(char *string)
{
while(*string)
writeChar(*string++);
}
void writeInteger(int16_t number, uint8_t base)
{
char buffer[17];
itoa(number, &buffer[0], base);
writeString(&buffer[0]);
}
Jetzt muss ich nur noch lernen wie man die USART-Funktionen der nibobee-Lib nutzt ;)
Gruß
mic
[Edit]
Timer-Setup ohne OC2-Pin eingefügt
pinsel120866
16.11.2009, 11:16
Hallo,
vielen Dank für die Hinweise.
Ich habe mir jetzt einen "FTDI Basic Breakout 5V" Wandler bestellt und werde ihn an X5 anhängen.
Ich finde ich es schade daß im Tutorial nicht auf die Kommunikation eingangen wird. In der Wiki http://www.nibo-roboter.de/wiki/Programmierung_%28NIBObee%29 steht nur:
"... beinhaltet auch komfortable Routinen für die Textausgabe auf dem optionalen Grafik-Display"
workwind
17.11.2009, 12:07
@pinsel120866:
Das Grafikdisplay im Wiki ist nicht korrekt, ich habs direkt korrigiert. Die Routinen sind in der Bibliothek für den NIBO2 enthalten!
pinsel120866
17.11.2009, 14:04
Hi workwind,
cool wäre eine Anleitung im Wiki, die das Anbringen eines Displays an die Bee beschreibt. Ist so etwas angedacht?
radbruch
19.11.2009, 00:52
Hallo
Dabei ergibt sich ein etwas seltsames Verhalten der Odometrie:
Der Motor, der sich rückwärts dreht zeigt ca. 50 Ticks. Der Motor der sich vorwärts dreht, zeigt ca. 70 Ticks. Da sich der Roboter auf der Stelle dreht, sollten beide Werte gleich sein. Wie verhalten sich eure NiboBees in der Hinsicht?Meine Biene spinnt auch beim Drehen: Rechtsrum sind beide Zähler fast gleich, linksrum großer Unterschied. (natürlich vorzeichenlos betrachet;)
Weil ich das eher wissenschaftlicher angehen wollte, habe ich mir die Motoransteuerung mal genauer angeschaut. Sehr clever gelöst mit dem Demultiplexer :) Einzuordnen ist das wohl zwischen der voll steuerbaren H-Brücke des asuro (mit 6 Leitungen, Gas-Bremse-Freilauf) und der peinlichen Sparschaltung des Probots (mit 3 Leitungen, Gas).
Mein aktueller Sofwarestand sendet Daten per Usart und IR, steuert ein Servo an X3 und zählt die Odo-Impulse beim Schieben. Die grundsätzliche Motorsteuerung ohne PWM kennt nur Vollgas und berücksichtigt die scheinbar am Würfeltisch entworfene Richtungsansteuerung (PD6/7;):
// Nibobee Motor- und Odometrytest 18.11.09 mic
#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/odometry.h>
#include <nibobee/led.h>
#include <nibobee/sens.h>
#include <stdlib.h> // C standard functions (e.g. itoa...)
#define LineLEDs_on PORTB &=~(1<<PB4)
#define LineLEDs_off PORTB |= (1<<PB4)
#define DIR_R 7
#define DIR_L 6
#define PWM_L 5
#define PWM_R 4
void ir_init(void);
void writeChar(uint8_t data );
void writeString(char *string);
void writeInteger(int16_t number, uint8_t base);
void motorDir(uint8_t dir_left, uint8_t dir_right);
void motorSpeed(uint8_t speed_left, uint8_t speed_right);
uint8_t p=0, servo=72;
int main(void) {
led_init();
sens_init();
odometry_init();
odometry_reset();
ir_init();
PORTD |=(1<<PWM_L)|(1<<PWM_R); // Pullups einschalten damit der Pegel high bleibt
DDRD |=(1<<DIR_L)|(1<<DIR_R)|(1<<PWM_L)|(1<<PWM_R);
writeString("\n\n\r");
writeString("Test der Motoransteuerung\n\r");
writeString("und der Odometry\n\r");
writeString("18.11.09 mic\n\n\r");
delay(1000);
while(1)
{
writeInteger(odometry_getLeft(0), 10);
writeString("-");
writeInteger(odometry_getRight(0), 10);
writeString("\n\r");
delay(200);
if(sens_getLeft()) odometry_getLeft(1);
if(sens_getRight()) odometry_getRight(1);
if(sens_getLeft() & sens_getRight())
{
odometry_getLeft(1);
odometry_getRight(1);
motorDir(1,1);
motorSpeed(1,1);
delay(500);
motorSpeed(0,0);
delay(50);
motorDir(0,0);
motorSpeed(1,1);
delay(500);
motorSpeed(0,0);
delay(50);
motorDir(1,0);
motorSpeed(1,1);
delay(500);
motorSpeed(0,0);
delay(50);
motorDir(0,1);
motorSpeed(1,1);
delay(500);
motorSpeed(0,0);
delay(50);
}
}
return 0;
}
// Die ISR erzeugt die 36kHz-Trägerfrequenz und "lauscht" gleichzeitig am TXD-Pin
// um die seriellen Daten auf die Trägerfrequenz zu mischen.
ISR (TIMER2_COMP_vect)
{
static uint8_t status=0;
if(PIND & 2) // Der TSOP invertiert die empfangenen Daten!
{
LineLEDs_off;
}
else
{
if(status)
{
LineLEDs_on; status=0;
}
else
{
LineLEDs_off; status=1;
}
}
static uint16_t count=1;
if(count>servo) PORTC &= ~(1<<PC3); else PORTC |= (1<<PC3);
if(count<1440) count++; else {count=1; if(p) p--;};
}
void ir_init(void)
{
#define UBRR_BAUD_2400 390 // Baudrate auf 2400 setzen
UBRRH = UBRR_BAUD_2400 >> 8;
UBRRL = (uint8_t) UBRR_BAUD_2400;
UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0); // 8, none, 1
UCSRB |= (1<<TXEN); // Senden enablen
TCCR2 = (1 << WGM21) | (1 << CS20); // CTC-Mode, no prescaling, no OC2-PIN!
OCR2 = 208; // 36kHz @15MHz
TIMSK |= (1 << OCIE2);
DDRB |= (1<<PB4); // LineLED ist ein Ausgang
LineLEDs_on; // LineLED schaltet gegen GND!
DDRD |= 2; // TXD Ausgang und low
PORTD &= ~2;
sei();
}
void writeChar(uint8_t data ) // Code aus ATMega16-Datenblatt
{
while ( !( UCSRA & (1<<UDRE)) );
UDR = data;
}
void writeString(char *string)
{
while(*string)
writeChar(*string++);
}
void writeInteger(int16_t number, uint8_t base)
{
char buffer[17];
itoa(number, &buffer[0], base);
writeString(&buffer[0]);
}
void motorDir(uint8_t dir_left, uint8_t dir_right)
{
if(dir_left) PORTD |= (1<<DIR_L); else PORTD &= ~(1<<DIR_L);
if(dir_right) PORTD &= ~(1<<DIR_R); else PORTD |= (1<<DIR_R);
}
void motorSpeed(uint8_t speed_left, uint8_t speed_right)
{
if(speed_left) PORTD &= ~(1<<PWM_L); else PORTD |= (1<<PWM_L);
if(speed_right) PORTD &= ~(1<<PWM_R); else PORTD |= (1<<PWM_R);
}
Obwohl ich inzwischen je eines der Löcher für die Fühlerlagerung auf 1,4mm aufgebohrt habe, klicken die Taster immer noch nicht richtig satt. Dafür reicht jetzt aber die Rückstellkraft von SW3 nicht mehr aus um den Fühler zurückzudrücken.
Gruß
mic
oberallgeier
23.11.2009, 09:48
Hi, mic, hallo alle,
... Obwohl ... Löcher für die Fühlerlagerung ... aufgebohrt ... klicken die Taster immer noch nicht ...Meine Montage habe ich ja schon beschrieben : (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=470518&sid=839eb5653f999a6081c623393df5e132#470518) Silberdraht NICHT festgelötet und einen halben (halbe Dicke) Papierstreifen Luft. Kabelbinder und Schrumpfschlauch stossen mit ihren Enden nicht an der benachbarten Struktur an. Das läuft sehr leichtgängig. Durch dieses Vorgehen sind die Toleranzen der Aufhängung voll auszuschöpfen. Die geringe Auslösekraft ist im Link genannt.
................https://dl.dropbox.com/s/pcriy4t9tjietsi/fuehler-lager-x1.jpg?dl=0 (https://dl.dropbox.com/s/fs4mk1cfs68ur4c/fuehler-lager-x2.jpg?dl=0)
................Detail in höherer Auflösung ist im Bild verlinkt. Der Papierstreifen
................ist nur für die Aufnahme eingelegt um zu zeigen, dass der Spalt
................DÜNNER ist als ein 80g-Papier (=ca. 0,15mm) , etwa halb so dünn.
................Alufolie ist üblicherweise 0,05 mm.
Meine Bee ist übrigens eine "sie" - das ist an den weißen, kurzen Fühlern zu erkennen. Mit meinen Softwareerkenntnissen hechel ich ein bisschen hinter euch her *schnief*.
Zu den Achsen: Meine Reibungsprobleme speziell bei einer Getriebeseite habe ich mit großer Sicherheit auf die Paarung: Bohrung und Achsenende zurückgeführt. Die Bohrungen sind lasergeschnitten - da stehen (bei 200facher Vergrößerung) die Glasfaserabschnitte leider gelegentlich heraus und die Oberfläche ist leicht bröselig von Harzpartikeln. Die Achsenenden meiner Bee sind sauber abgerundet ABER leider ist zwischen Abrundung und Achsenschaft eine s..scharfe Kante an allen Achsenenden. Mit dieser Kante kann - (vermutlich wird - ) egal wie vorsichtig die Achsen in die Lagerbohrungen geschoben werden - Material von der Lagerwand abgeschabt werden. Diese Partikel führen zu Problemen. Abhilfe habe ich erzielt durch Abrunden der Achsenden (Kante schleifen mit 240er ! Korn) sowie Abrunden und Glattschleifen der Lagerbohrungen: einen 1cm-breiten Streifen Schmirgelpapier Korn 1000 rollen und in die Bohrung stecken, drehen und ein bisschen durchziehen. Ich habe KEIN Schmiermittel verwendet. Ich fürchte, dass durch Schmiermittel zusammen mit den Restpartikeln an den Schnittkanten eine Schleifpaste erzeugt wird, die Probleme machen könnte.
pinsel120866
23.11.2009, 14:46
Meine Bee ist übrigens eine "sie" - das ist an den weißen, kurzen Fühlern zu erkennen.
Dann könnten wir unsere Bees (meine hat schwarze Fühler = Männchen?) zusammenbringen und einen Bienenvolk gründen.
:^o =P~
Hallo,
ich möchte mir so einen Einsteiger Bausatz kaufen, schwanke aber noch zwischen dem Asuro und der NIBObee.
Welchen würdet ihr empfehlen?
Löten und so kann ich sehr gut mir mangelts eher an den sprachkenntnissen
Lg Sebastian
radbruch
23.11.2009, 22:44
Hallo Sebastian,
willkommen im RN-Forum.
Die zusätzlichen Beinchen des 40-Pinners sind meiner Meinung nach der ausschlaggebende Faktor. Deshalb empfehle ich Nibobee.
Gruß
mic
oberallgeier
23.11.2009, 23:54
Hi Sebastian,
herzlich willkommen.
... mir mangelts eher an den sprachkenntnissen ...Dafür gibt es zum NIBObee gleich einen hübschen Download - und wer es garnicht erwarten kann, findet gleich eine Handvoll fertig übersetzter Programme, mit denen das Bienchen gleich loslegt. Ich war vom Bienchen schon begeistert, als ich die Beschreibung gelesen hatte - und bin es immer noch.
pinsel120866
24.11.2009, 07:19
Hallo,
für mich ganz klar: NIBOBee
Warum?
Gerade herausgekommen, Größerer Prozessor, mehr Platz für Erweiterungen, sehr gute Beschreibung für Aufbau und Programmierung, Preis, und, und, und...
Hi,
danke für die Antworten.
Ich werde mir nun in nächster Zeit auch die NIBObee zulegen,Sie war soeieso mein Favorit da sie irgendwie vom Endergebnis besser aussieht (nicht ganz so provisorisch wie der Asuro).
Wird aber noch 2-3 wochen dauern bis ich dazu komme sie zu kaufen.
Könnt ihr mir in der Zwischenzeit ein Programmm empfehlen in dem man eine art virtuellen roboter programmieren kann (zum üben)?
So in der Art wie Robot Karol (http://www.schule.bayern.de/karol/index.htm) nur halt für C und ein wenig komplexer.
Lg Sebastian
oberallgeier
24.11.2009, 09:14
... Könnt ihr mir in der Zwischenzeit ein Programmm empfehlen ... virtuellen roboter programmieren kann (zum üben)? ...Jaaaa - das ist eine hübsche Frage! Kommt so alle Weile wieder vor. Ich warte schon, dass jemand so etwas anfängt, statt sich einen realen Roboter zusammenzulöten . . . .
In unserem Umfeld kenne ich jedenfalls nichts in dieser Art. ABER: die Biene wird in C programmiert. Zum Programmieren in C für At mel-Controller verwenden etliche hier (die Win fahren) das AVRStudio mit Win Avr, einem angepassten G CC. (http://www.rn-wissen.de/index.php/Avr-gcc) Und DER hat einen Simulator. Bevor Du also LEDs anknippst oder Taster abfragst, könntest Du das in diesem Simulator üben. Warnung: das ist ziemlich trockenes Zeugs. Mir sind reale Fehlfunktionen lieber als zappelnde Bildschirmgimmicks.
pinsel120866
24.11.2009, 10:27
Hallo,
da fällt mir spontan eigentlich nur c't-Sim ein: http://www.heise.de/ct/projekte/c-t-Bot-und-c-t-Sim-284119.html
Probiert habe ich es aber noch nie. :-k
hmm ja, werd ich mir mal angucken. Danke erstmal!
@oberallgeier: Klar Simulationen sind trocken. Drum kauf ich mir ja den Roboter. Die sind mir nämlich auch viel lieber. Ansonsten würd ich billiger fahren handyapps oder ähnliches zu schreiben :)
Lg Sebastian
wisda.noobie
29.11.2009, 20:37
ausserdem bleibt man immer in bewegung und staubt nicht am schreibtisch ein. (z.B. wenn der/die kleine sich die treppe runter gestürzt hat)
mfg wisdanoobie
bin zwar neu hier, habe aber seit gestern meine NiboBee und sie fährt schon wunderbar ihre Kreise
dann bin ich auf Euren Erfahrungsaustausch gestoßen und möchte meine Ergebnisse berichten:
- das Teil ist superklasse konzipiert
- meinen Asuro kann ich gleich entsorgen
- bei sorgfältigem Aufbau hat alles sofort funktioniert
(ich hab ca. 50 Jahre Erfahrung mit Löten etc.)
- die Software habe ich wie beschrieben unter Windows7 installiert
- den Programmer muss ich 'als Administrator' starten, sonst 'spinnt' er manchmal
- dann habe ich im AVR Studio unter Projekt -> Configuration Options -> Include Directories den Pfad C:\Program Files\NIBObeeLib\include\ eingegeben, da der Compiler eine Header-Datei nicht fand
- unter Tools -> Customize kann man den Programmer angeben und ihn dann direkt unter Tools aufrufen
- ich hab an meinem Bienen-Programmierplatz einen schwarzen Schaum unterlegt, der über die Front-Sensoren die Motoren ausschaltet, so dass beim Programmieren nicht dauernd die Motoren laufen
- ansonsten bin ich gespannt, was sich da noch alles entwickelt
MHeU
oberallgeier
03.12.2009, 22:58
Hallo mheu,
willkommen im Forum, willkommen bei den nibotikern to bee or not to bee.
... an meinem Biene ... schwarzen Schaum unterlegt ... dass beim Programmieren nicht dauernd die Motoren laufen ...Das kannst Du einfacher haben. Wie ? Vor dem Flashen den Jumper 7 ziehen (vgl. NIBObee Bauanleitung (http://download.nicai-systems.com/nibo/Doku_NIBObee_20091012.pdf) S 6, Mitte und S 7, 1.2.2 - letzter Satz). Siehe dazu auch dieses Posting. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=470518&sid=90dcefa2ccd4769dc7648cc6bbeb5cc2#470518)
radbruch
04.12.2009, 00:28
Hallo
Glückwunsch und willkommen im Club :)
@oberallgeier:
Geh mir doch weg mit dem fummligen Jumper! Ich finde die Idee mit dem Untergrund gut, ich verwende bisher eine Startverzögerung in der ich das Flashen starten kann. Meistens reicht mir das.
Gruß
mic
guten Morgen
nachdem jetzt alles Bienen-mäßig klappt, hab ich einen 644p in den Sockel gesteckt, der ja Pin-kompatibel zum 16er ist, aber viel mehr Speicher+Funktionalität bietet
leider funktioniert die NiboBee-Library dafür nicht
mit
DDRB = 0x0F;
PORTB = 0x0F;
leuchten die LEDs - schon mal was!
weiß jemand, wie ich die NiboBee-Library für den 644p erzeugen kann?
danke
zum Frühstück 2 kleine hilfreiche Funktionen:
void usart_putstring(char * cString) // send string via USART
{
while(*(cString++) )
{
while(usart_txfull() ); // wait until Tx-buffer free
usart_putchar(*cString);
}
}
void led_setfor(uint8_t led, uint8_t ms) // switch 'led' on for 'ms'
{
led_set(led, 1);
delay(ms);
led_set(led, 0);
}
MHeU
m.a.r.v.i.n
04.12.2009, 09:57
Hallo nheu,
guck mal im Thread NIBObee Erweiterungen (https://www.roboternetz.de/phpBB2/viewtopic.php?t=51216). Dort habe ich die geänderten Files gepostet. Allerdings habe ich es noch nicht mit dem 644p getestet, nur mit dem 644.
Zuerst müssen die Fuses korrekt eingestellt werden. Das habe ich mit dem myAVR ProgTool (http://shop.myavr.de/index.php?sp=download.sp.php) gemacht, direkt im NIBObee mit dem integrierten Programmer. Geht bestimmt auch mit AVR Studio.
Zudem müssen die Libs neu erzeugt werden, anschließend die Programme:
make clean
make DEVICE=atmega644p
Oder von AVRStudio aus neue Projekte anlegen.
Ich bin mir jetzt nur nicht sicher ob der 644p eine eigene Kennung hat.
Das NIBObee Flasher Tool funktioniert mit dem 644 bisher auch ohne Probleme, allerdings habe ich noch keine größeren Programme (>16k) geflashed.
Edit: Der 644p hat doch eine eigene Kennung. Ich hab das Archiv nochmal aktualisiert. Jetzt sollte es auch für den ATmega644p klappen.
hallo Marvin
ich kann Deine 644p-Files nicht finden!?
inzwischen hab ich den USART an USB adaptiert mit ´nem Adapter TTL232R von FTDI
Fotos anbei
MHeU
m.a.r.v.i.n
10.12.2009, 11:07
Hallo mheu,
sieht etwas filigran aus, deine Konstruktion. Hoffentlich hält das.
hier ist der Link:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=472810#472810
Man muss eingelogged sein, um Attachments zu sehen :wink:
danke Marvin
den USART-USB benötige ich nur für Testzwecke
wie mach ich make DEVICE=atmega644 ??
da ich im AVR Studio4 arbeite
oder Du postest noch die *.a oder *.o Files
MHeU
m.a.r.v.i.n
10.12.2009, 20:36
Hallo mheu,
übersetzen musst du die Libs schon selber, das ist aber gar nicht so schwer. Im Src Verzeichnis der NIBObee Lib gibt es die Datei 'make-lib.bat'. Die kannst du mit einem Text Editor anpassen für den mega644p und dann einfach ausführen.
Bei deinen eigenen Projekten sollte es dann ausreichen den richtigen Controller auszuwählen
Hallo,
wie verbindet ihr euch über den internen Programmer mit dem Controller?
Zuerst müssen die Fuses korrekt eingestellt werden. Das habe ich mit dem myAVR ProgTool (http://shop.myavr.de/index.php?sp=download.sp.php) gemacht, direkt im NIBObee mit dem integrierten Programmer. Geht bestimmt auch mit AVR Studio.
Ich habe es sowohl mit dem Tool von myAVR als auch mit dem AVR-Studio versucht und konnte mich nicht mit dem Controller (noch der Mega16) verbinden. Könnte mir bitte jemand die korrekten Einstellung posten, denn ich würde gerne den Controller austauschen und muss dazu natürlich zuerst die Fuses neu setzen.
Vielen Dank
Heiko
radbruch
07.01.2010, 23:45
Hallo Nibobee-Fans
Leider viel zu spät habe ich jetzt Georg's Probleme in einen eigenen Thread verschoben:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=51999
Dadurch wurden auch ein paar Beiträge mitverschoben die mit seinem Problem nicht direkt zusammenhingen, aber das Zerbröseln war mir zu umständlich. Ich hoffe, ihr habt Verständniss dafür.
Gruß
mic
Also der Roboter ist ja an sich nicht schlecht... gut zu bauen und so leicht, dass ein Anfänger das schaffen sollte... der Schrumpfschlauch brauchte ca. 5 Min pro Seite mit nem alten Billiglötkolben... aber das ich nicht so schlimm...
aber hey, ich bin schon ein wenig weiter als ein Anfänger und der ganze Motorbereich ist echt für den Eimer...
1. der Abstandhalter ist nicht groß genug, das rote Zahnrad kann sich trotzdem noch an der Diode verkanten...
2. das kleine Zahnrad am großen weißen sollte schmaler sein, weil man sonst die Außenseite fast schwebend montieren muss, damit genügend Platz ist und nichts an der Außenseite schleift.
3. Zahnräder gesteckt, alles zusammengesetzt, auseinandergenommen, Abstände kontrolliert und berichtigt, zusammengesetzt, getestet und am Punkt wo der geringeste Widerstand auf die Achsen war zusammengelötet
--> Motor paar Mal getestet, war 3 von 4 Malen so festgefahren, dass er sich gar nicht oder nur kurz bewegt hat...
alles wieder auseinandergenommen (fast den ganzen Aufbau vom Radkasten abgelötet), die Löcher für die Achsen ein wenig angefeilt, damit der Motor nicht immer blockiert wird und stoppt, wieder zusammengesetzt getestet, lief schon gar nicht schlecht, angelötet
Roboter hingesetzt, gestartet, gar nicht erst gestartet, Blockade gelöst, fuhr paar Zentimeter, dreht sich, blockierte dabei auf einer Seite, wieder gelöst und an der nächsten Wand war dann wieder Ende, beide Motoren im Rückwärtsgang blockiert...
wieder auf den Prüfstand, wollte wieder die Löcher für die Achsen glätten bevor ich was zum Schmieren besorge...
dabei durfte ich feststellen, dass die Hauptplatine am Kontakt zu Platine 3 schon richtig schön aussah - noch zweimal Platine 3 abmachen und ich krieg die wahrscheinlich nur noch mit Kleber fest...
aber das ist auch egal... viel schlimmer war, dass ich mir ein Zahnrad mit dem Lötkolben verschönert hab...
Fazit:
+der Nibobee ist von der Elektronik her superleicht zu bauen
+Preis gut für all die Hardware, die man erhält
+gut erweiterbar
+nimmt auch schlechte Akkus hin (Abweichung von 0,6V insgesamt, dadurch nicht die 5,5V überschritten...)
-aber von der Mechanik her ist der Asuro deutlich besser geeignet für Anfänger (fand ich irgendwie deutlich einfacher in der Schulzeit damals, nicht solche großen Korrekturen nötig)
-Radsystem ist "gleich beim ersten Mal oder vergiss es"
mit dem Kauf sollte man noch warten bis man nen guten Lötkolben, Erfahrung, viel Zeit (hab jetzt schon 3 Stunden für Korrekturen an der Mechanik gebraucht und trotzdem fährt er nicht perfekt), Zusatzwerkzeug (schmale Feile, Schmiermittel, ...) hat oder die Mängel behoben sind...
PS: Zahnrad bisschen freigemacht... weiß wer wo ich Ersatz bestellen kann? ;(
oberallgeier
02.04.2011, 11:13
... die Löcher für die Achsen glätten bevor ...Dieses Problem ist ja nicht neu, ich hatte das (November 2009) bei meinem Testexemplar festgestellt, an nicai gemeldet und hier dokumentiert (https://www.roboternetz.de/community/showthread.php?45237-NIBObee-Erfahrungsberichte&p=435341&viewfull=1#post435341) (siehe "Zu den Achsen:" unter dem Bild). Scheint aber nicht viel besser geworden zu sein. Gibts direkt bei nicai keine Ersatzteile?
Anfrage ist gestellt, mal sehen was die meinen...
also diese Unterlegscheiben für's rote Zahnrad (je linke und rechte Seite) ist dumm...
1. ist eh zu klein, die linke Seite (die, die noch funktioniert) bleibt mal ganz gerne hängen unter anderem auch an der Diode - ist halt noch genug Platz zu...
2. gerade deswegen konnte ich das Zahnrad nicht auf die Diode schieben als ich den Turm ablöten wollte und bin dagegen gekommen - wobei das Zahnrad schon auf ~1mm Entfernung anfing zu schmelzen... macht die Türme nicht zu fest (auch wenn es mal funktioniert) und nehmt nen guten Lötkolben... hatte da nur nen 10€ Lötkolben und der heizt einfach nur über ein gefülltes Eisenrohr ne Lötspitze von innen auf bis "nichts mehr geht" --> mal sehr heiß, dann nicht heiß genug...
egal... hab jetzt schon mal nen Bohrer, was zum Feilen und Nachbearbeiten... fehlt noch was zum Schmieren... erstmal gucken, dass ich das Loch nochmal minimal erweitern kann, weil Achsenradius >= Lochradius ist immer schlecht, da muss ein minimaler Unterschied rein, wenn die Motoren "so schwach" sind
eigentlich wollte ich mir ne Fernsteuerung für's Smartphone bauen
Messdaten sammeln und verschicken (z.B. ob sich irgendwo etwas verändert hat; Hindernis verschoben/weg)
Daten auf SD-Karte schreiben können
Daten darstellen können (Laufzeit, Position in der Wohnung, Sensorenstatus, ...)
alles über µC-Netzwerkserver mit Funk und SD-Karte
aber das muss erstmal wieder warten, dank nächster Prüfung und der Tatsache, dass die Kiste nicht so recht will
vielleicht auch besser, kann ich erstmal die Erweiterungsplatine in aller Ruhe planen und Funk einrichten... sowas will ja auch gesichert werden, nicht dass man von Fremdfunk zufällig gestört wird oder einer mit Absicht in die Verbindung einsteigt...
€dit:
Es gibt zwei Möglichkeiten sich Ersatz zuschicken zu lassen:
1. man mailt Frau Bach, die schickt einem ne Referenznummer für eine Überweisung zu und von Nicai kommt gegen 4,50€ nen "Zahnradsatz" (Versandkosten, Aufwand und Material)...
was im "Zahnradsatz" drin ist, werd ich wahrscheinlich nie erfahren, weil...
2. wenn man eh was bestellt, kann man wohl auch da einzelne Zahnräder mitliefern lassen (wieviel das dann mehr kostet war nicht gesagt) [bei mir wird das wohl das Upgradepaket für mich und ein weiterer Nibobee für meine Schwester sein, weil die ihren Asuro damals in der Schule stehen ließ]
Aber ich setz mich erstmal wieder frustriert (weil mein Bienchen eingemottet ist) ans Lernen für Prüfungen...
carlosfritz
26.04.2011, 13:22
So,
ich werde auch mal kurz meine wenigen Erfahrungen mitteilen.
Zu meiner Person:
Absoluter Beginner. Ich habe vorher noch nie gelötet und noch nie etwas programmiert. (na gut ein wenig HTML damals)
Zusammenbau:
Bei mir fehlte ein Widerstand - oder ich habe ihn verloren, was ich aber nicht glaube. Aber nach Hilfe aus diesem Forum, habe ich mir dann einen für 5 ct beim Elektronik-Geschäft gekauft.
Anleitung ist super detailliert geschrieben, für Unwissende geeignet!
Ich musste nochmal fast alles nachlöten, weil ich wohl recht viele "kalte Lötstellen" produziert habe. Aber das war ja mein Fehler. Das Nachlöten ging auch ganz gut.
Blöderweise läuft meine linkes Getriebe nicht richtig rund. Da muss ich nochmal etwas nachbessern - bloß wie, ohne alles wieder auseinander zu nehmen?
Programmieren:
Das C-Tutorial genügt um einen kleinen Einblick in die Geschichte zu bekommen. Ist aber deutlich zu detailarm erklärt, wenn man keine Ahnung hat.
Das ist natürlich eine schmaler Weg zwischen Kommentar zum Code und nem ganz C-Autodidaktik-Buch. Aber als Einsteiger hätte ich mir irgendwie ein wenig mehr erwünscht.
Leider bin ich nur auf Umwegen zu der Dokumentation der Bibliothek gekommen.
(Ist da kein Hinweis im Tutorial gegeben?)
Fazit: Ich bin zufrieden, aber um gelenkt in das Robotergeschehen einzutauchen fehlen weitere Hinweise zum programmieren - oder mindestens Verweise irgendwohin.
PsYCoDeLiC
31.03.2012, 19:46
hallo zusammen,
ich habe den NIBObee geschenkt bekommen und vorher noch nie mit dieser Materie zu tun gehabt.
Muss aber sagen es hat echt Spaß gemacht. Dennoch habe ich jetzt ein Problem nach dem Zusammenbau.
Alle tests funktionieren bei mir bis auf den Punkt:
3.4 Testen der Motoren
Zunächst muss nun der Jumper JP7 gesteckt werden.
Vorsicht, der NIBObee kann sich ab jetzt bewegen!
Bei Betätigung des linken Fühlers nach vorne sollte sich das linke Rad
vorwärts, bei Betätigung nach hinten sollte es sich rückwärts drehen.
Entsprechendes probiert man auf der rechten Seite.
Wenn ich links teste geht es nach hinten und nicht nach vorne.
Wenn ich rechts teste geht es nach vorne aber nicht nach hinten.
Woran kann das liegen?
Hoffe ihr könnt mir helfen. Bin wie gesagt noch Anfänger in der Sache :-\
Gruß
Chris
sourcecode
01.04.2012, 20:13
Hallo.
Auch wenn Du es wahrscheinlich schon zig mal getan hast, aber die Lötstellen vielleicht alle nochmals nachprüfen
und eventuell nochmals nach löten. Zumindest die an den Tastern. Ist vielleicht jetzt nicht unbedingt eine Hilfe,
hat bei mir aber schon so manches Mal meine Probleme gelöst ;-)
Gruß
sourcecode
Hallo zusammen
Ich habe jetzt den Nibo bee fertig
gebaut und überlege ein funk modul auf die Bienen zu bauen möchte aber nicht auf das distanz kit verzichten. Kann ich das Modul an x5 anschließen?
Einen guten rutsch
Jsw
oberallgeier
04.02.2023, 10:38
Guten Tag Leute,
vor Jahren bekam ich einen der ersten NIBObees (https://www.roboternetz.de/community/threads/45237-NIBObee-Erfahrungsberichte?p=433473&viewfull=1#post433473) als Tester. Das Stück wurde aufgebaut und steht aktuell als Schaustück im Regal. Nun habe ich mich sattgesehen und andere Aktivitäten. Ich versteigere das Ding bei ebay, Stichwort
NIBObee, autonomer, kleiner Fahrroboter mit Sensorik, zwei Motoren + Rädern
Vielleicht findet jemand von Euch Gefallen dran?
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.