- 3D-Druck Einstieg und Tipps         
Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 42

Thema: NIBO2 bei Reichelt gekauft, zusammengebaut und nu?

  1. #21
    Neuer Benutzer Öfters hier
    Registriert seit
    10.05.2010
    Beiträge
    7
    Anzeige

    Powerstation Test
    Guten Abend,

    1. Odometrie kann ich noch nicht auslesen - ich bin C-Anfänger - wenn mir einer dabei Hilfestellung geben könnte ....
    copro_setTargetAbs-oder Rel-(x,y,speed) funzt zwar, aber gerade damit habe ich das Problem entdeckt.

    2. Teil 1. und 2. des Nibo Magazins sind mir mal zufällig auf den Bildschirm geraten. Eine Suche danach bringt aber keinen Erfolg. Wo findet man das Magazin denn?

    3. Mein größtes Problem im Augenblick:
    Nachdem das linke Rad etwas "hakte" hab' ich ein Tröpfchen Öl an die Achs-Lager links und rechts gegeben. Seitdem kennt der linke Motor nur noch zwei Zustände: Stillstand oder Vollgas, egal welche speed man einstellt (copro_setSpeed(speed, speed). Keine Reaktion erfolgt auf
    copro_setTargetAbs-oderRel-(x,y,speed) - Stillstand.

    Was kann die Ursache sein??

    Gruß
    Uli

  2. #22
    Neuer Benutzer Öfters hier
    Registriert seit
    10.05.2010
    Beiträge
    7
    Ist Teil 3 der, den man in Deinem letzten Beitrag runterladen kann??

    Gruß
    Uli

  3. #23
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.08.2009
    Ort
    Berlin
    Alter
    69
    Beiträge
    348
    Hallo Uli
    bis jetzt gibt es 3 Teile. Alle stehen im Roboternetz zum runterladen. An weiteren Teilen arbeite ich bereits. Würde sagen, es sind recht interessante Ansichten und Berichte darunter. Hoffe für jeden etwas zu finden. Es könnte auch für andere Nutzer passen. Das Magazin lebt auch mit seinen Lesern. Gern sehe ich eine Diskussion über das eine oder andere. Jeder sieht es anders. Gern greife ich auch Vorschläge und Fragen auf, die bei dem Hobby mit Nibo 2 entstehen. Stelle nochmal den 3 Teil ins Netz. Du kannst auch alle 3 Teile direkt von mir bekommen. Kurze mail an die Adresse reicht.
    h.j.seeger@web.de
    Achim
    Angehängte Dateien Angehängte Dateien

  4. #24
    Erfahrener Benutzer Fleißiges Mitglied Avatar von elektrolutz
    Registriert seit
    20.04.2010
    Ort
    Werl
    Alter
    66
    Beiträge
    139
    Hallo Uli_s,

    du solltest auf der Motorseite, an der nur "schnell" oder "aus" funktioniert prüfen, ob du den IR-Sensor verbogen hast, oder aber den Sensor bzw. die Empfänger mit Öl benetzt hast, oder gar Öl über die Leiterbahnen der Platinen gezogen ist.
    Die interne Steuerung des Nibo2 bewirkt, dass bei zu langsamen Odometrie-Signalen, der Motor mehr Leistung verordnet bekommt, um die zu geringe Geschwindigkeit aufzuholen. Extremster Fall von zu langsamen Signalen ist das komplette aussetzen der Signale durch Radblockage oder ausgefallener Sensorik, hier gibt der Antrieb dann Dauer-Vollgas.

    Siehe auch: https://www.roboternetz.de/phpBB2/viewtopic.php?t=54055
    Gruß aus Werl
    elektrolutz

    Theorie ist, wenn man weiß, wie alles funktioniert. Praxis ist, wenn alles klappt und keiner weiß warum!

  5. #25
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.08.2009
    Ort
    Berlin
    Alter
    69
    Beiträge
    348
    Hallo Uli
    damit du nicht lange suchst gleich noch mal die anderen Teil
    Achim
    Angehängte Dateien Angehängte Dateien

  6. #26
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.08.2009
    Ort
    Berlin
    Alter
    69
    Beiträge
    348
    irgemdwie will die Technik heute nicht so wie ich will. also noch mal

  7. #27
    Neuer Benutzer Öfters hier
    Registriert seit
    10.05.2010
    Beiträge
    7
    Hallo,

    hab' vergangene Nacht noch den Antrieb auseinandergebaut und gereinigt. Danach schien mir eine Verbesserung eingetreten zu sein - Motor drehte nicht mehr Vollgas, ließ sich aber noch nicht regeln.

    Nach Deinem obigen Hinweis nochmals zerlegt und mit Terpentin Lichtschranke und Leiterplatte abgetupft und getrocknet. Das wars, läuft wieder links und rechts gleich schnell.

    Vielen Dank!!

    Noch 'ne (oder 2) Frage(n).

    Wie lese ich Odometriewerte aus und zeige sie am Display an?
    Wie hoch ist die max. speedl? Mein Nibo steigt ab 82 aus, bzw läuft gar nicht erst an.

    Gruß
    Uli

  8. #28
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2010
    Beiträge
    5
    hallo gemeinde,

    ich habe seit kurzen einen nibo2 und wollte das beispiel program aus probieren aber beim kompalieren kommt immer diese fehler meldung.


    Code:
    #include <stdlib.h>
    #include <avr/interrupt.h>
    
    #include "nibo/niboconfig.h"
    #include "nibo/iodefs.h"
    
    #include "nibo/delay.h"
    #include "nibo/adc.h"
    #include "nibo/pwm.h"
    #include "nibo/i2cmaster.h"
    #include "nibo/display.h"
    
    #include "nibo/bot.h"
    #include "nibo/leds.h"
    #include "nibo/gfx.h"
    #include "nibo/irco.h"
    #include "nibo/motco.h"
    #include "nibo/floor.h"
    
    #define LINKS        0
    #define VORNE_LINKS  1
    #define VORNE        2
    #define VORNE_RECHTS 3
    #define RECHTS       4
    
    #define SPEEDFACTOR 30
    
    // Zustände
    #define BLOCKIERT        1
    #define AUSWEICHEN       2
    #define FREI             0
    #define HINDERNISLINKS   3
    #define HINDERNISRECHTS  4
    #define GERADEAUS        5
    
    
    // Deklarationen von Hilfsfunktionen
    void Init();
    void float2string(float value, int decimal, char* valuestring);
    void leds_set_status_all(uint8_t col0, uint8_t col1, uint8_t col2, uint8_t col3, uint8_t col4, uint8_t col5);
    float SupplyVoltage(void);
    void textout(int x, int y, char* str, int ft);
    
    
    int main()
    {
       Init();
    
       // Kollisionsvermeidung vorbereiten
        uint16_t Vektor[5][2]; // Einheitsvektoren (*10) [0] ist x- und [1] ist y-Wert
        Vektor[0][0] = -10; // LINKS x
        Vektor[0][1] =   0; // LINKS y
        Vektor[1][0] =  -7; // VORNE_LINKS x
        Vektor[1][1] =   7; // VORNE_LINKS y
        Vektor[2][0] =   0; // VORNE x
        Vektor[2][1] =  10; // VORNE y
        Vektor[3][0] =   7; // VORNE_RECHTS x
        Vektor[3][1] =   7; // VORNE_RECHTS y
        Vektor[4][0] =  10; // RECHTS x
        Vektor[4][1] =   0; // RECHTS y
    
       uint8_t weightfactor[5]; // Gewichtungsfaktor
       weightfactor[LINKS]        = 1;
       weightfactor[VORNE_LINKS]  = 2;
       weightfactor[VORNE]        = 3;
       weightfactor[VORNE_RECHTS] = 2;
       weightfactor[RECHTS]       = 1;
    
        uint16_t VektorMalSensor[5][2];   // Sensorwert * Einheitsvektor (*10)
        uint16_t VektorMalSensorSumme[2]; // Sensorschwerpunkt (x,y) für Auswertung
    
       // Vorbereitungen
       leds_set_displaylight(1000);
       leds_set_headlights(256);
       floor_enable_ir();
       motco_setPWM(512,512);
       motco_setSpeed(3,3);
    
       // fixe Display-Anzeigen
       textout(35,0,"Volt",      0);
       textout(0, 8,"distance:", 0);
       textout(0,24,"floor:",    0);
       textout(0,40,"line:",     0);   
    
       // Hauptschleife
       while(1)
       {
           // Akkuspannung anzeigen
           float Ubatt = SupplyVoltage();
           char text[6];
           float2string(Ubatt,2,text);     
           textout(0,0,"     ",0); // 5 Zeichen löschen
           textout(0,0,text,   0);
    
           // Abstandsmessung Raumgefühl
           irco_startMeasure();
           irco_update();
          
           // Floor
           uint16_t floor_distance[2];
           uint16_t line_distance[2];
    
           // Abstandsmessung Floor      
           floor_update();
           floor_distance[0] = floor_l;
           floor_distance[1] = floor_r;
           line_distance[0]  = line_l;
           line_distance[1]  = line_r;
    
           //Strings für Display
           char irco_string[5][5];
           char floor_string[2][5];
           char line_string[2][5];
           
           // Laufvariablen
           int i,j;
       
           /*
             IR-Abstandssensoren
           */
          
          for(i=0; i<5; ++i)
               textout(i*21,16,"      ",0); //löschen
    
          for(i=0; i<5; ++i) // z.Z. noch rechts 0 und links 4 !!!!!!!!!!!!!
           {
               itoa(irco_distance[i],irco_string[i],10);         
               textout(i*21,16,irco_string[i],0);
           }
    
           /*
             IR-Floorsensoren (Abgrunderkennung)
           */
          
          for(i=0; i<2; ++i)
               textout(i*28,32,"       ",0); //löschen
    
          for(i=0; i<2; ++i)
           {
               itoa(floor_distance[i],floor_string[i],10);         
               textout(i*28,32,floor_string[i],0);
           }
    
          /*
             IR-Liniensensoren
          */
    
          for(i=0; i<2; ++i)
               textout(i*28,48,"       ",0); //löschen
    
          for(i=0; i<2; ++i)
           {
               itoa(line_distance[i],line_string[i],10);         
               textout(i*28,48,line_string[i],0);
           }
          
          /*
             MOTCO
             
             Mathematische Methode "x/y-Schwerpunkt der Sensorvektoren bilden":
             (Einheitsvektoren * 10) * Sensorwert (0-255) * weightfactor, davon Summe bilden
    
             VektorMalSensorSumme[...] 0 ist x-Wert und 1 ist y-Wert
             Blockade: y kann maximal 14790 groß werden (vl, v, vr 255)
             Richtung: x kann maximal -6120 (Hindernis links) bzw. +6120 (H. rechts) werden (l, vl 255 bzw. r, vr 255)
          */
          
            // Ermittlung von VektorMalSensorSumme[...] (gewichteter x- und y-Wert)
          VektorMalSensorSumme[0] = 0; // x-Wert
            VektorMalSensorSumme[1] = 0; // y-Wert
    
          // i entspricht links, vornelinks, vorne, vornerechts, rechts
          // j entspricht x und y
          
          for (i=0; i<5; ++i)
          {
               for (j=0; j<2; ++j)
               {
                   VektorMalSensor[i][j] = Vektor[i][j] * irco_distance[i] * weightfactor[i]; // 4-i wegen IRCo?????
                   VektorMalSensorSumme[j] += VektorMalSensor[i][j];
               }
          }
    
          // Reaktion auf VektorMalSensorSumme[...] (x- und y-Wert)       
          
          // GrenzenY
          uint16_t GrenzeY1 = 12000; // Zustandsgrenze: BLOCKIERT  / AUSWEICHEN
          uint16_t GrenzeY2 =  6000; // Zustandsgrenze: AUSWEICHEN / FREI
          
          // GrenzenX
          uint16_t GrenzeXlinks  = -2000; // Zustandsgrenze: LINKS  / GERADEAUS
          uint16_t GrenzeXrechts =  2000; // Zustandsgrenze: RECHTS / GERADEAUS
    
          // Zustandsvariable
          uint8_t zustand     = 0;
          uint8_t zustand_old = 0;      
    
          // Zustand ermitteln
          {  // y-Wert
             if( VektorMalSensorSumme[1] >=GrenzeY1)            zustand = BLOCKIERT;
             if((VektorMalSensorSumme[1] < GrenzeY1) &&
                (VektorMalSensorSumme[1] >=GrenzeY2))
             {
                // x-Werte
                if( VektorMalSensorSumme[0] < GrenzeXlinks  )   zustand = HINDERNISLINKS;  
                if( VektorMalSensorSumme[0] > GrenzeXrechts )   zustand = HINDERNISRECHTS;
                if((VektorMalSensorSumme[0] >=GrenzeXlinks) &&
                   (VektorMalSensorSumme[0] <=GrenzeXrechts))   zustand = GERADEAUS;       
             }
             if (VektorMalSensorSumme[1] < GrenzeY2)            zustand = FREI;
          }
    
          // Auf Zustand reagieren
          if(zustand == zustand_old)
          {
             // kein MOTCo-Befehl notwendig
          }
          else //Veränderung eingetreten
          {
              // Sondermaßnahmen
             // gegen Schwingung links/rechts: einmal GERADEAUS erzwingen
             if((zustand_old == HINDERNISLINKS) || (zustand_old == HINDERNISRECHTS))
             {
                 zustand = GERADEAUS;
             }
             // gegen Schwingung vor/zurück: zweimal zurück
             if((zustand_old == BLOCKIERT) && (zustand == GERADEAUS))
             {
                zustand = BLOCKIERT;
             }
             // direkt vorne frei?
             if(irco_distance[2]<150)
             {
                zustand = zustand_old;      
             }
             
             //Allgemeine Maßnahmen            
             switch(zustand)
             {
                case FREI:
                //entry
                    leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_GREEN, LEDS_GREEN, LEDS_OFF, LEDS_OFF);
                //do
                    motco_setSpeed( 3*SPEEDFACTOR, 3*SPEEDFACTOR );  // rasch vorwärts
                    delay(10);
                //exit
                break;
                case HINDERNISRECHTS:
                //entry
                    leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_OFF, LEDS_OFF, LEDS_ORANGE, LEDS_ORANGE);
                //do
                    motco_setSpeed(  -SPEEDFACTOR,   SPEEDFACTOR );  // nach links drehen
                    delay(10);
                //exit
                break;
                case GERADEAUS:
                //entry
                    leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_ORANGE, LEDS_ORANGE, LEDS_OFF, LEDS_OFF);
                //do
                    motco_setSpeed( 2*SPEEDFACTOR, 2*SPEEDFACTOR );  // gemäßigt vorwärts   
                    delay(10);
                //exit
                break;
                case HINDERNISLINKS:
                //entry
                    leds_set_status_all(LEDS_ORANGE, LEDS_ORANGE, LEDS_OFF, LEDS_OFF, LEDS_OFF, LEDS_OFF);
                //do
                    motco_setSpeed(   SPEEDFACTOR,  -SPEEDFACTOR );  // nach rechts drehen
                    delay(10);
                //exit
                break;
                case BLOCKIERT:
                //entry
                    leds_set_status_all(LEDS_OFF, LEDS_OFF, LEDS_RED, LEDS_RED, LEDS_OFF, LEDS_OFF);    
                //do
                    motco_setSpeed(-2*SPEEDFACTOR,-2*SPEEDFACTOR );  // rückwärts fahren
                    delay(10);
                //exit
                break;
             }
             zustand_old = zustand;
             motco_update();
          }
       }//Ende while-Hauptschleife
    
       while(1);
        return 0;
    }
    
    
    // Hilfsfunktionen
    
    void Init()
    {
        sei(); // enable interrupts
    
        i2c_init();
        pwm_init();
        display_init();
       
        bot_init();
        leds_init();
        floor_init();
        gfx_init();
    }
    
    void leds_set_status_all(uint8_t col0, uint8_t col1, uint8_t col2, uint8_t col3, uint8_t col4, uint8_t col5)
    {
        leds_set_status(col0,0);    
        leds_set_status(col1,1);
        leds_set_status(col2,2);
        leds_set_status(col3,3);
        leds_set_status(col4,4);
        leds_set_status(col5,5);
    }
    
    float SupplyVoltage(void)
    {
       bot_update();      
       return(0.0166 * bot_supply - 1.19);
    }
    
    void textout(int x, int y, char* str, int ft)
    {
       gfx_move(x,y);
       gfx_print_text(str,ft);
    }
    
    void float2string(float value, int decimal, char* valuestring)
    {
        int neg = 0;    char tempstr[20];
       int i = 0;   int j = 0;   int c;    long int val1, val2;
       char* tempstring;
       tempstring = valuestring;
       if (value < 0){   neg = 1; value = -value; }
         for (j=0; j < decimal; j++)   {value = value * 10;}
        val1 = (value * 2);
        val2 = (val1 / 2) + (val1 % 2);
        while (val2 !=0){
           if ((decimal > 0) && (i == decimal)){
              tempstr[i] = (char)(0x2E);
              i++;
           }
           else{
              c = (val2 % 10);
              tempstr[i] = (char) (c + 0x30);
              val2 = val2 / 10;
              i++;
           }
        }
        if (neg){
           *tempstring = '-';
           tempstring++;
        }
        i--;
        for (;i > -1;i--){
           *tempstring = tempstr[i];
           tempstring++;
        }
        *tempstring = '\0';
    }
    
    
    Fehlermelungen:
    
    ../beginn1.c: In function 'main':
    ../beginn1.c:76: warning: implicit declaration of function 'motco_setPWM'
    ../beginn1.c:77: warning: implicit declaration of function 'motco_setSpeed'
    ../beginn1.c:96: warning: implicit declaration of function 'irco_startMeasure'
    ../beginn1.c:97: warning: implicit declaration of function 'irco_update'
    ../beginn1.c:127: error: 'irco_distance' undeclared (first use in this function)
    ../beginn1.c:127: error: (Each undeclared identifier is reported only once
    ../beginn1.c:127: error: for each function it appears in.)
    ../beginn1.c:282: warning: implicit declaration of function 'motco_update'
    ../beginn1.c: In function 'textout':
    ../beginn1.c:326: error: too many arguments to function 'gfx_print_text'
    make: *** [beginn1.o] Error 1
    Build failed with 4 errors and 5 warnings...
    kann mir bitte sagen was ich falsch mache...

    gruß

  9. #29
    Erfahrener Benutzer Fleißiges Mitglied Avatar von elektrolutz
    Registriert seit
    20.04.2010
    Ort
    Werl
    Alter
    66
    Beiträge
    139
    Hallo leilahasi,

    die "motco"/"irco"-Anweisungen sind für den Roboter "Nibo/Nibo1", da du den "Nibo2" hast, solltest du die "copro"-Anweisungen benutzen.

    In der Lib-Dokumentation werden die Anweisungen für beide Nibo-Versionen aufgelistet, wo Unterschiede sind, ist ein Vermerk in Klammern gesetzt.
    Gruß aus Werl
    elektrolutz

    Theorie ist, wenn man weiß, wie alles funktioniert. Praxis ist, wenn alles klappt und keiner weiß warum!

  10. #30
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.08.2009
    Ort
    Berlin
    Alter
    69
    Beiträge
    348

    Nibo 2

    Hallo
    So wie icg das sehe, hast du ein Prg von Henke genommen. Diese stammt wahrscheinlich aus den Jahren 2007/2008. Es verwendet einige Befehle die so nicht laufen. Man müsste jede Zeile durchsuchen und die neuen Befehle eintragen. Das ist sehr mühsam. Zu Anfang habe ich das auch getestet, aber ohne Erfolg und mit vielen Fehlermeldungen. Dann habe ich die Sachen genau betrachtet und teilweise grosse unterschiede festgestellt. Im Moment lohnt es sich nicht das zu machen. Probiere mal die Prg aus die in dem Heft stehen. Wenn die laufen, kannst du auch noch andere haben.
    Achim

Seite 3 von 5 ErsteErste 12345 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress