- Modernes Energiemessgeraet    Werbung      
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 255

Thema: IR-bake

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    78
    Beiträge
    2.180
    hi Dirk,

    wieder ein paar tests gemacht:

    die vorwiderstände auf 10 ohm verringert, die blinkfrequenz der bake auf ca. 1/sec eingestellt und bei der abfrage im RP6 es so eingerichtet, dass er keine pausen beim messen macht, die reichweite ist nun bei 2m! Ansonsten die erfahrungen im text:

    Zitat Zitat von Dirk Beitrag anzeigen
    Die direkte Abfrage von PB2 beißt sich auf jeden Fall mit dem ACS. Das sollte also nicht parallel genutzt werden.
    klar, läuft auch nicht mit...

    Zitat Zitat von Dirk Beitrag anzeigen
    1. Der IR-Empfänger müßte in einer Röhre sitzen wegen der nötigen Richtwirkung.
    die 5 IR-dioden sind ja in einer art kranz, bzw. halbkreis mit lücken angeordnet. Bereits bei einer entfernung von 2 metern reicht eine sehr kleine verdrehung des RP6 (1 - 2 °) um das IR signal der empfangenen diode zu verlieren...

    Zitat Zitat von Dirk Beitrag anzeigen
    2. Es muss einen erkennbaren Zusammenhang zwischen der gemittelten Bakenposition und der "Drehposition" des RP6 geben, damit er in die richtige Richtung fahren kann. Wenn man nicht rein nach Versuch und Irrtum vorgehen will, braucht man evtl. einen Kompasssensor oder Gyro.
    bei zwischenmessungen auf dem weg zu der bake verringert sich ja die entfernung, das signal wird besser, aber evtl. hast du recht...


    Zitat Zitat von Dirk Beitrag anzeigen
    3. Es macht wenig Sinn, einen sehr breiten IR-Licht-Fächer im Raum zu haben (so dass er fast den ganzen Raum füllt), sondern ein schmaleres IR-Licht-Feld wäre wohl besser.
    der fächer ist ja in vertikaler richtung ziemlich flach, und es ist in horizontaler richtung kein geschlossener kreis/halbkreis, die lücken zwischen den einzelnen IR-kegeln werden ja mit der entfernung zwischen sender und empfänger immer größer...

    Ich habe noch verschiedene temperaturen gemessen:

    die 10 ohm vorwiderstände - 55°
    die IR-dioden selbst - 36°
    der Q2 - 89°, mit kühlkörper (siehe foto) immer noch 60°
    Bild  

    ich habe beobachtet, dass, wenn die bake länger blinkt die leistung nachlässt, das signal wird offensichtlich mit wärmer werden des 2N222 immer schlechter. Durch welchen transistor könnte ich den ersetzen?
    gruß inka

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    78
    Beiträge
    2.180
    Hi,

    mit den änderungen

    Code:
    case 2://
        setLEDs(0b0010);
        writeString_P("\n\n messung feldvariable\n");
    
        initRP6Control();
        initLCD();
    
        while(true)
        {
    //    rotate (20, RIGHT, 3, false);
    
    //    read_IR_value();
            uint8_t i = 0;
        for(i = 0; i < 499; i++)
            {
            temp_IR[i] = read_IR_value();
            feld_IR[i] = temp_IR[i];
    //        feld_IR[i] = read_IR_value();
            writeIntegerLength(temp_IR[i],DEC,4);
            if(i % 7 == 0)
                writeChar('\n');
            else
                writeString_P(" | ");
            mSleep(100);
    //        move(50, FWD, DIST_MM(100), false);
            }
    
        clearLCD();
    
        setCursorPosLCD(0, 0);
        writeStringLCD_P("bin: ");
        setCursorPosLCD(0, 8);
        writeIntegerLengthLCD(temp_IR[0], BIN, 8);
        mSleep(300);
        setMultiIOLED3(0);
    
        readAllRegisters();
        mSleep(100);
    
    
            /**************************/
            uint8_t key_1 = getMultiIOPressedButtonNumber();
            key_1 = getMultiIOPressedButtonNumber();
            if(key_1 != 0) break;
    
            /**************************/
        }
    
        break;
    konnte ich nun herausfinden, wie oft, bzw. mit welchem muster meine IR-bake sendet - und empfangen wird. Hier ein teilinhalt der feldvariablen "uint8_t feld_IR[500]" :
    Bild  
    es ist folgendes muster, welches empfangen wird:

    4x nichts / treffer / 3x nichts / treffer / 4x nichts / treffer usw, usw...

    ich nehme an, dass der IR empfänger nicht dauernd empfängt, sondern in einem bestimmten rhythmus. Das würde evtl. erklären warum die optische anzeige (LED)

    Code:
      case 1://
        setLEDs(0b0001);
        writeString_P("\n\n messung einzelsignal\n");
    
        initRP6Control();
        initLCD();
    
        // ---------------------------------------
        WDT_setRequestHandler(watchDogRequest);
    
    /*************************************************************/
    
        while(true)
        {
    //    rotate (20, RIGHT, 3, false);
    
            temp = read_IR_value();
    
            mSleep(100);
    
        if (temp == 0)
            {
            setMultiIOLED3(1);
            mSleep(100);
            setMultiIOLED3(0);
    //        move(50, FWD, DIST_MM(100), false);
            }
    
        clearLCD();
    
        setCursorPosLCD(0, 0);
        writeStringLCD_P("dec: ");
        setCursorPosLCD(0, 8);
        writeIntegerLengthLCD(temp, DEC, 1);
        mSleep(300);
    //    setMultiIOLED3(0);
    
        readAllRegisters();
        mSleep(100);
    
    
            /**************************/
            uint8_t key_1 = getMultiIOPressedButtonNumber();
            key_1 = getMultiIOPressedButtonNumber();
            if(key_1 != 0) break;
    
            /**************************/
        }
    break;
    zwar funktioniert (reaktion auf einzelne empfangene IR-signale), aber in wesentlich unregelmäßigen abständen als dieses 3 - 1 - 4 - 1 - 3 - 1 - 4 - 1 -...
    Diesen rhythmuss möchte ich beibehalten, er scheint mir insofern günstig, weil man mit diesem rhythmus die IR-bake identifizieren könnte...

    es beschäftigen mich nun folgende fragen:

    - wie finde ich den IR-empfangsrhythmus des RP6 raus?
    - Ist er irgendwo angegeben, muss ich ihn irgendwie berechnen/messen (stopwatches?)?
    - wie passe ich die beiden frequenzen aneinander an?

    für ideen und tipps bin ich wie immer dankbar...
    gruß inka

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,
    da bist du ja schon etwas weiter gekommen!
    Diesen rhythmuss möchte ich beibehalten, er scheint mir insofern günstig, weil man mit diesem rhythmus die IR-bake identifizieren könnte...
    Tatsächlich könnte man Baken mit unterschiedlicher Modulationsfrequenz so erkennen.
    Dein Ausdruck der Werte scheint zu sagen, dass die Bake in regelmäßigen Abständen erkannt wird, wobei die AN-Phase nur kurz (1-3 Werte) erscheint und die AUS-Phase wohl etwa 4x so lang ist. Halt mal das Oszilloskop an den Treiber der Bake, um zu sehen, ob das so etwa auch gesendet wird (AN-AUS = 1-4).
    Der "Leserhythmus" des IR-Signals wird im Wesentlichen bestimmt durch die zeitliche Länge der for(i = 0; i < 499; i++) - Schleife. Darin gibt es einerseits die feste Pause von 100ms (mSleep(100); ), dann die Zeit, die die UART-Ausgabe der Werte (writeIntegerLength(...) u.a.) braucht und die Zeit für die I2C-Kommunikation in der IR-Lesefunktion (read_IR_value(); ).
    Messen kann man die Zyklusdauer der Schleife z.B. mit den Stopwatches:
    1. Starten am Programmanfang mit: startStopwatch1();
    2. Variable definieren: uint16_t zeitdauer;
    3. Zurücksetzen auf 0 am Anfang der for(i = 0; i < 499; i++) - Schleife: if (i==498 ) setStopwatch1(0);
    4. Lesen des Stopwatch Werts mit: if (i==498 ) zeitdauer = getStopwatch1(); am Ende der Schleife
    5. Nach der Schleife den Wert von zeitdauer ausgeben.
    Damit wird im letzten Schleifendurchlauf die Dauer in Millisekunden gemessen. Man kann das dann in die Frequenz umrechnen.
    Gruß
    Dirk

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    78
    Beiträge
    2.180
    hi Dirk,
    den "rest" dann in aller ruhe, zunächst zu der interpretation der IR-logdatei:
    Zitat Zitat von Dirk Beitrag anzeigen
    Dein Ausdruck der Werte scheint zu sagen, dass die Bake in regelmäßigen Abständen erkannt wird, wobei die AN-Phase nur kurz (1-3 Werte) erscheint und die AUS-Phase wohl etwa 4x so lang ist. Halt mal das Oszilloskop an den Treiber der Bake, um zu sehen, ob das so etwa auch gesendet wird (AN-AUS = 1-4).
    das mit derm oszi funktioniert nicht, ich sehe bei allen möglichen einstellungen nur einen waagerechten strich, der seine lage im blinkinterwall der bake rauf und runter ändert, bekomme also keine darstellung der abwechselnden phasen in waagerechetn richtung aneinander gereiht, keine ahnung warum...

    nun zu der logdatei:

    ich würde die AN/AUS phasen anders interpretieren:

    0004 bedeute kein signal
    0000 bedeutet signal empfangen

    in der reienfolge aus dem bild ist es dann doch so:

    aus aus aus aus an aus aus aus an aus aus aus aus an aus aus aus an .............

    also hätte die AN-phase jeweils nur ein wert und die AUS-phase abwechselnd 3 oder 4 werte. oder sehe ich da was falsch?
    gruß inka

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    78
    Beiträge
    2.180
    hi Dirk,
    Zitat Zitat von Dirk Beitrag anzeigen

    Die 4 in Register 30 ist ok:
    Wenn kein IR-Signal anliegt, hat der Empfänger High-Pegel, daher ist deine Variable pb2_value binär = 0b00000100 (dezimal 4), das heißt, dass PINB2 (also Bit 2) gesetzt ist.
    Wenn ein IR-Signal anliegt, ist das Bit nicht gesetzt, also Register 30 = 0.
    frage zu diesem PINB2:

    bleibt der nach dem empfang des IR-signals low und wird beim nächsten empfang wieder auf high gesetzt, oder bleibt er low nur solange IR-signal empfangen wird?
    gruß inka

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi,
    ... oder bleibt er low nur solange IR-signal empfangen wird?
    Genau so.
    Gruß
    Dirk

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    78
    Beiträge
    2.180
    hi,

    nun habe ich mir das leben etwas einfacher gemacht, mit diesem
    Code:
    while(true)
        {
    for(j = 0; j < 120; j+=10)
    {
            writeChar('\n');
            writeInteger(j, DEC);
            writeChar('\n');
            uint8_t i = 0; 
        for(i = 0; i < 199; i++) 
            {
            temp_IR[i] = read_IR_value();
            feld_IR[i] = temp_IR[i];
            writeIntegerLength(temp_IR[i],DEC,4);
            if(i % 12 == 0) 
                writeChar('\n'); 
            else 
                writeString_P(" | ");
            mSleep(20+j);
            }
    
    }
            /**************************/
            uint8_t key_1 = getMultiIOPressedButtonNumber();
            key_1 = getMultiIOPressedButtonNumber();
            if(key_1 != 0) break;
    
            /**************************/
        }

    gewann ich "auf einen rutsch" diese ausgabe:

    Bild   Bild   Bild  

    es hätte sicher mehrere auswahlmöglichkeiten für die größe des "mSleep" gegeben, ich habe mich für die variante 50 entschieden - die gefiel mir in ihrer regelmäßigkeit am besten - jetzt blinkt die kontroll-LED auf der bake mit diesem
    Code:
        while(true)
        {
            temp = read_IR_value();
    
            mSleep(50);
    
        if (temp == 0)
            {
            setMultiIOLED3(1);
            setMultiIOLED3(0);
            }
            /**************************/
            uint8_t key_1 = getMultiIOPressedButtonNumber();
            key_1 = getMultiIOPressedButtonNumber();
            if(key_1 != 0) break;
    
            /**************************/
        }
    deckungsgleich - ca. 4x pro sekunde - zusammen mit der roten LED an der multiIO auf eine entfernung von 4m... Bild  
    gruß inka

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    78
    Beiträge
    2.180
    hi,

    erkenntnisse aus zahllosen tests:

    die IR bake verursacht nach wie vor reflektionen die den empfänger irritieren. Sie sind schwächer als der direkter strahl und der empfang der reflektionen am RP6 ist unregelmässig. Dies habe ich in folgenden änderungen versucht zu berücksichtigen.

    hardware:
    strahlbegrenzung an der bake Bild  

    hat eigentlich nichts gebracht...

    abschirmung des IR-empfängers am RP6 Bild  

    entstand sukzessive, zuerst der hintere reflektor am IR-empfänger, dann das dickere rohr (ist innen schwarz ausgekleidet), dann der zweiter reflektor mit der kleineren öffnung zum sender hin, dann das kleinere röhrchen, um die eintrittsöffnung noch ein bischen zu verkleinern. Wahrscheinlich funktioniert die hindernissmessung nun nicht mehr, aber darum kümmere ich mich später.
    Der IR-empfang ist bei direkter ausrichtung auf die sendende bake noch gut, die empfansfrequenz unverändert, abfrage per software erfolgt immer noch im 50ms rhythmus. Bei einer ausrichtung weg von der bake ist kein empfang, wenn der Rp schräg zu bake steht kommt immer noch ab und zu mal was durch.

    software:

    Code:
    case 3://
                    setLEDs(0b0100);
    
                    writeString_P("\n\n Suche der bake\n\n");
                    writeChar('\n');
                    initRP6Control();
                    initLCD();
                    startStopwatch3();
    
                    while(true)
                    {
    
    
                        while(true)
                        {
    
                            if(getStopwatch3() > 50)
                            {
                                temp = read_IR_value();
                                /********************/
    
                                uint8_t i = 0;
                                for(i = 0; i < 199; i++)
                                {
    //                            writeIntegerLength(temp,DEC,4);
                                writeInteger(getStopwatch3(), DEC);
                                if(i % 12 == 0)
                                {
                                    writeChar('\n');
                                    setStopwatch2(0);
                                }
                                else
                                {
                                    writeString_P(" | ");
                                    setStopwatch2(0);
                                }
                                }
    
                                /*******************/
    
                                if (temp == 0)
                                {
                                    setMultiIOLED3(1);
                                    setMultiIOLED3(0);
                                    if (t<10)
                                    {
                                    t++;
                                    setStopwatch3(0);
                                    if (t == 10)
                                    {
                                    move(100, FWD, DIST_MM(100), false);
                                    setStopwatch3(0);
                                    t=0;
                                    }
                                    }
                                }
    /*
                                else
                                {
                                    setMultiIOLED1(1);
                                    setMultiIOLED1(0);
                                    rotate(80, RIGHT, 1, false);
                                    setStopwatch3(0);
                                }
    */
                            }
                        }
                            /**************************/
                            uint8_t key_1;
                            key_1 = getMultiIOPressedButtonNumber();
                            if(key_1 != 0) break;
                            /**************************/
                    }
    
    
    
                        break;
    der code - so wie er ist (also mit auskommentierter else-zeilen mit dem rotate befehl) - bewirkt, dass der RP6 nach jeweils 10 empfangenen signalen 100mm fährt, die abfrage der 10 empfangegen signale möchte ich noch zeitabhängig prüfen (t soll <10*51ms sein), ich müsste also die stopwatches vor der schleife und nach der schleife in zwei variablen speichern, diese dann voneinander abziehen und die weiterfahrt davon abhängig machen ob die 10 signale innerhalb der ca. 520ms empfangen wurden. Da bastle ich noch dran Bild  

    könnte die abfrage so aussehen -- if ((t==10) && (tg<520)) --? Ich werde sicher auch noch die passenden stellen für das speichern (und rücksetzen) der zwei variablen t1 und t2 finden, bisher klappte das nicht so ganz Bild  

    was mir mehr sorgen bereitet ist das zusammenspiel mit dem rotate befehl...

    Wenn ich die else zeilen wieder einschalte, leuchtet nur noch die LED1 auf der multiIO und der RP6 dreht sich im kreis. Nur ganz sporadisch komt ein- zwei- mal ein auifleuchten der LED3, mehr aber nicht. Hängt das wieder mit den stopwatches zusammen?

    ich habe mir folgendes im terminal ausgeben lassen, werde daraus aber nicht schlau:
    Code:
    Suche der bake (ohne rotate)
    
    51
    51 | 53 | 54 | 55 | 57 | 58 | 59 | 61 | 62 | 63 | 64 | 66
    67 | 68 | 69 | 70 | 72 | 73 | 74 | 76 | 77 | 78 | 80 | 81
    82 | 83 | 84 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 95 | 96
    97 | 98 | 99 | 101 | 102 | 104 | 105 | 107 | 108 | 110 | 112 | 113
    114 | 116 | 117 | 119 | 120 | 122 | 124 | 125 | 127 | 128 | 130 | 131
    132 | 134 | 135 | 137 | 139 | 140 | 142 | 143 | 145 | 146 | 148 | 150
    151 | 152 | 154 | 155 | 157 | 158 | 160 | 161 | 163 | 165 | 166 | 168
    169 | 170 | 172 | 173 | 175 | 177 | 178 | 180 | 181 | 183 | 184 | 186
    187 | 189 | 190 | 192 | 193 | 195 | 196 | 198 | 199 | 201 | 203 | 204
    205 | 207 | 208 | 210 | 211 | 213 | 215 | 216 | 218 | 219 | 221 | 222
    223 | 225 | 226 | 228 | 230 | 231 | 233 | 234 | 236 | 237 | 239 | 241
    242 | 243 | 245 | 246 | 248 | 249 | 251 | 252 | 254 | 256 | 257 | 259
    260 | 261 | 263 | 264 | 266 | 268 | 269 | 271 | 272 | 274 | 275 | 277
    278 | 280 | 281 | 283 | 284 | 286 | 287 | 289 | 290 | 292 | 294 | 295
    296 | 298 | 299 | 301 | 302 | 304 | 306 | 307 | 309 | 310 | 312 | 313
    314 | 316 | 317 | 319 | 321 | 322 | 324 | 325 | 327 | 328 | 330 | 332
    333 | 334 | 336 | 337 | 339 | 340 | 343
    343 | 345 | 346 | 348 | 349 | 351 | 353 | 354 | 356 | 357 | 359 | 360
    361 | 363 | 364 | 366 | 368 | 369 | 371 | 372 | 374 | 375 | 377 | 379
    380 | 381 | 383 | 384 | 386 | 387 | 389 | 390 | 392 | 394 | 395 | 397
    398 | 399 | 401 | 402 | 404 | 406 | 407 | 409 | 410 | 412 | 413 | 415
    416 | 418 | 419 | 421 | 422 | 424 | 425 | 427 | 428 | 430 | 432 | 433
    434 | 436 | 437 | 439 | 440 | 442 | 444 | 445 | 447 | 448 | 450 | 451
    452 | 454 | 455 | 457 | 459 | 460 | 462 | 463 | 465 | 466 | 468 | 470
    471 | 472 | 474 | 475 | 477 | 478 | 480 | 481 | 483 | 485 | 486 | 488
    489 | 490 | 492 | 493 | 495 | 497 | 498 | 500 | 501 | 503 | 504 | 506
    507 | 509 | 510 | 512 | 513 | 515 | 516 | 518 | 519 | 521 | 523 | 524
    525 | 527 | 528 | 530 | 531 | 533 | 535 | 536 | 538 | 539 | 541 | 542
    543 | 545 | 546 | 548 | 550 | 551 | 553 | 554 | 556 | 557 | 559 | 561
    562 | 563 | 565 | 566 | 568 | 569 | 571 | 572 | 574 | 576 | 577 | 579
    580 | 581 | 583 | 584 | 586 | 588 | 589 | 591 | 592 | 594 | 595 | 597
    598 | 600 | 601 | 603 | 604 | 606 | 607 | 609 | 610 | 612 | 614 | 615
    616 | 618 | 619 | 621 | 622 | 624 | 626 | 627 | 629 | 630 | 632 | 633
    634 | 636 | 637 | 639 | 641 | 642 | 644
    645 | 647 | 648 | 650 | 651 | 653 | 654 | 656 | 657 | 659 | 661 | 662
    663 | 665 | 666 | 668 | 669 | 671 | 673 | 674 | 676 | 677 | 679 | 680
    681 | 683 | 685 | 686 | 688 | 689 | 691 | 692 | 694 | 695 | 697 | 699
    700 | 701 | 703 | 704 | 706 | 707 | 709 | 711 | 712 | 714 | 715 | 717
    718 | 719 | 721 | 722 | 724 | 726 | 727 | 729 | 730 | 732 | 733 | 735
    736 | 738 | 739 | 741 | 742 | 744 | 745 | 747 | 748 | 750 | 752 | 753
    754 | 756 | 757 | 759 | 760 | 762 | 764 | 765 | 767 | 768 | 770 | 771
    772 | 774 | 776 | 777 | 779 | 780 | 782 | 783 | 785 | 786 | 788 | 790
    791 | 792 | 794 | 795 | 797 | 798 | 800 | 802 | 
    
    Suche der bake (mit rotate)
    
    51
    52 | 53 | 54 | 55 | 57 | 58 | 59 | 61 | 62 | 63 | 65 | 66
    67 | 68 | 69 | 70 | 72 | 73 | 74 | 76 | 77 | 78 | 80 | 81
    82 | 83 | 84 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 95 | 96
    97 | 98 | 99 | 101 | 102 | 104 | 105 | 107 | 108 | 110 | 112 | 113
    114 | 116 | 117 | 119 | 120 | 122 | 124 | 125 | 127 | 128 | 130 | 131
    132 | 134 | 135 | 137 | 139 | 140 | 142 | 143 | 145 | 146 | 148 | 150
    151 | 152 | 154 | 155 | 157 | 158 | 160 | 161 | 163 | 165 | 166 | 168
    169 | 170 | 172 | 173 | 175 | 177 | 178 | 180 | 181 | 183 | 184 | 186
    187 | 189 | 190 | 192 | 193 | 195 | 196 | 198 | 199 | 201 | 203 | 204
    205 | 207 | 208 | 210 | 211 | 213 | 215 | 216 | 218 | 219 | 221 | 222
    223 | 225 | 226 | 228 | 230 | 231 | 233 | 234 | 236 | 237 | 239 | 241
    242 | 243 | 245 | 246 | 248 | 249 | 251 | 252 | 254 | 256 | 257 | 259
    260 | 261 | 263 | 264 | 266 | 268 | 269 | 271 | 272 | 274 | 275 | 277
    278 | 280 | 281 | 283 | 284 | 286 | 287 | 289 | 290 | 292 | 294 | 295
    296 | 298 | 299 | 301 | 302 | 304 | 306 | 307 | 309 | 310 | 312 | 313
    314 | 316 | 317 | 319 | 321 | 322 | 324 | 325 | 327 | 328 | 330 | 332
    333 | 334 | 336 | 337 | 339 | 340 | 51
    51 | 53 | 54 | 55 | 57 | 58 | 59 | 61 | 62 | 63 | 64 | 66
    67 | 68 | 69 | 70 | 72 | 73 | 74 | 76 | 77 | 78 | 80 | 81
    82 | 83 | 84 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 95 | 96
    97 | 98 | 99 | 101 | 102 | 104 | 105 | 107 | 108 | 110 | 112 | 113
    114 | 116 | 117 | 119 | 120 | 122 | 124 | 125 | 127 | 128 | 130 | 131
    132 | 134 | 135 | 137 | 139 | 140 | 142 | 143 | 145 | 146 | 148 | 150
    151 | 152 | 154 | 155 | 157 | 158 | 160 | 161 | 163 | 165 | 166 | 168
    169 | 170 | 172 | 173 | 175 | 177 | 178 | 180 | 181 | 183 | 184 | 186
    187 | 189 | 190 | 192 | 193 | 195 | 196 | 198 | 199 | 201 | 203 | 204
    205 | 207 | 208 | 210 | 211 | 213 | 215 | 216 | 218 | 219 | 221 | 222
    223 | 225 | 226 | 228 | 230 | 231 | 233 | 234 | 236 | 237 | 239 | 241
    242 | 243 | 245 | 246 | 248 | 249 | 251 | 252 | 254 | 256 | 257 | 259
    260 | 261 | 263 | 264 | 266 | 268 | 269 | 271 | 272 | 274 | 275 | 277
    278 | 280 | 281 | 283 | 284 | 286 | 287 | 289 | 290 | 292 | 294 | 295
    296 | 298 | 299 | 301 | 302 | 304 | 306 | 307 | 309 | 310 | 312 | 313
    314 | 316 | 317 | 319 | 321 | 322 | 324 | 325 | 327 | 328 | 330 | 332
    333 | 334 | 336 | 337 | 339 | 340 | 51
    51 | 53 | 54 | 55 | 57 | 58 | 59 | 61 | 62 | 63 | 64 | 66
    67 | 68 | 69 | 70 | 72 | 73 | 74 | 76 | 77 | 78 | 80 | 81
    82 | 83 | 84 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 95 | 96
    97 | 98 | 99 | 101 | 102 | 104 | 105 | 107 | 108 | 110 | 112 | 113
    114 | 116 | 117 | 119 | 120 | 122 | 124 | 125 | 127 | 128 | 130 | 131
    132 | 134 | 135 | 137 | 139 | 140 | 142 | 143 | 145 | 146 | 148 | 150
    151 | 152 | 154 | 155 | 157 | 158 | 160 | 161 | 163 | 165 | 166 | 168
    169 | 170 | 172 | 173 | 175 | 177 | 178 | 180 | 181 | 183 | 184 | 186
    187 | 189 | 190 | 192 | 193 | 195 | 196 | 198 | 199 | 201 | 203 | 204
    205 | 207 | 208 | 210 | 211 | 213 | 215 | 216 | 218 | 219 | 221 | 222
    223 | 225 | 226 | 228 | 230 | 231 | 233 | 234 | 236 | 237 | 239 | 241
    242 | 243 | 245 | 246 | 248 | 249 | 251 | 252 | 254 | 256 | 257 | 259
    260 | 261 | 263 | 264 | 266 | 268 | 269 | 271 | 272 | 274 | 275 | 277
    278 | 280 | 281 | 283 | 284 | 286 | 287 | 289 | 290 | 292 | 294 | 295
    296 | 298 | 299 | 301 | 302 | 304 | 306 | 307 | 309 | 310 | 312 | 313
    314 | 316 | 317 | 319 | 321 | 322 | 324 | 325 | 327 | 328 | 330 | 332
    333 | 334 | 336 | 337 | 339 | 340 | 51
    gruß inka

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,
    ...könnte die abfrage so aussehen -- if ((t==10) && (tg<520)) --? Ich werde sicher auch noch die passenden stellen für das speichern (und rücksetzen) der zwei variablen t1 und t2 finden, bisher klappte das nicht so ganz
    Ich verstehe leider nicht so ganz, was du im Detail machen willst.

    Ein Ablaufschema zum Finden der Bake könnte ja so aussehen:
    1. Geht mein Akku zur Neige oder habe ich nichts mehr zu tun?
    2. Nein: Meine Aufgabe erledigen oder herumstehen, weiter bei 1.
    3. Ja: Zur Ladestation fahren:
    4. Auf der Stelle so lange drehen, bis die Bake maximal zu empfangen ist.
    5. Geradeaus fahren.
    6. Bake erreicht?
    7. Ja: Weiter bei 13.
    8. Hindernis erkannt?
    9. Ja: Ausweichen, dann weiter bei 4.
    10. Signal weiter gut zu empfangen?
    11. Ja: Weiter bei 5.
    12. Nein: Weiter bei 4.
    -------------------------------------------
    13. Ladestation erreicht, Akku laden!
    14. Akku voll geladen?
    15. Ja: Losfahren und weiter bei 1.
    16. Weiter bei 14.
    -------------------------------------------

    Mit weniger als das wird es nicht gehen...

    ich habe mir folgendes im terminal ausgeben lassen, werde daraus aber nicht schlau:
    In der Hauptschleife (Suchen der Ladestation) würde ich das machen:
    1. task_IR-Empfang -> Einlesen der IR-Empfängerwerte z.B. alle 50ms per Stopwatch. Die Task gibt in einer Variablen z.B. eine 1 aus, wenn die Bake (z.B. mehr als 3x hintereinander) empfangen wird und 0, wenn nicht. In dieser Task keine Ausgaben ans Terminal oder sonstwo, keine Pausen. Die Task ist z.B. eine eigene Funktion, die in der Hauptschleife aufgerufen wird.
    2. task_FahreZurLadestation -> Sucht nach der IR-Quelle und steuert dahin. Braucht intern Regeln, die sich nach o.g. Schema richten, und natürlich die permanenten Infos: IR sichtbar oder nicht (aus der task_IR-Empfang), Hindernis erkannt (ACS o.ä.), Ladestation erreicht, Akkustand.
    3. task_Ladung -> Akku wird geladen, Ende erkannt. Braucht permanente Info: Akkustand.
    Alle Tasks arbeiten autonom (jede z.B. mit eigener/eigenen Stopwatch(es) und teils abhängig von Infos der anderen 2 Tasks:
    - task_IR-Empfang läuft immer
    - task_FahreZurLadestation läuft nur, wenn task_Ladung gerade nicht läuft und umgekehrt
    - Weitere Tasks können gebraucht werden für das hier:
    -- Anzeige von Daten (z.B. zum Debuggen). Immer auch mit Stopwatch (0,5 oder 1s, schneller kann man eh nicht lesen)
    -- Eigentliche Aufgabe des autonomen Roboters (wenn er nicht gerade zur Ladung muss oder lädt)
    -- ...
    Gruß
    Dirk

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    78
    Beiträge
    2.180
    hi Dirk,
    danke für Deine ausführliche antwort...

    ich habe wahrscheinlich, nein, sogar ziemlich sicher eine andere herangehensweise an die aufgabe, die ich mir hier gestellt habe, als ein erfahrener programmierer oder elektroniker - beides bin ich auch nicht, auch wenn ich schon einiges gelernt habe... leider geht das viel zu langsam...

    Zitat Zitat von Dirk Beitrag anzeigen
    Ich verstehe leider nicht so ganz, was du im Detail machen willst.
    meine induktive ladestation besteht aus drei komplexen:

    - ladestation - funktioniert soweit...

    - ir-bake - an sich funktioniert sie auch...

    - das zusammenspiel beim finden der ladestation mit hilfe des IR-empfängers am RP6 - fdunktioniert nicht...

    ich kann jetzt einen ablaufplan erstellen wie Du es in Deinem post fantastisch gemacht hast - danke - so in groben zügen hatte ich es mir auch schon skizziert...
    Nach Deiner erklärung weis ich (nein, ich ahne es nur) was ein Task ist - ich würde mich aber hier lächerlich machen, wenn ich ernsthaft über "Tasks" und ähnliches reden würde...
    Es hilft mir nicht weiter mich mit dem großen plan (den ich ja im prinzip hab!) zu beschäftigen, wenn mir das handwerkszeug fehlt um eine funktionierende verschachtelte if-abfragen-schleife zu erstellen. Beispielsweise move- und rotate- funktion, in abhängigkeit von IR-empfang und abgelaufener zeit, ohne acs, accustand, hindernisse und ähnliches, in der skizzenhaft klar wird, ob meine ir-bake so bleiben kann, oder eben nicht. Zu diese erkenntnis muss ich ab zu mal auch ein paar sachen auf dem terminal ausgeben - das sind alles nur versuche die dinge "im kleinen" zu verstehen. Mit den worten eines feinwerktechnikers - ich kann kein flugzeug bauen, wenn ich von aerodynamik keine ahnung habe...

    Und wenn ich ansatzweise weiss, dass die drei komponenten, die ich oben genannt habe auch funktionieren und zusammenspielen, können wir uns gerne über Tasks unterhalten Bild  
    gruß inka

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. IR-Bake
    Von tornado im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 05.07.2007, 17:37
  2. IR-Bake
    Von Bernd-das-Brot im Forum Sensoren / Sensorik
    Antworten: 38
    Letzter Beitrag: 13.12.2005, 16:14
  3. ir-bake
    Von pebisoft im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 8
    Letzter Beitrag: 17.01.2005, 13:41
  4. ir-bake
    Von pebisoft im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 17.01.2005, 07:01
  5. Bake
    Von techboy im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 02.11.2004, 10:17

Berechtigungen

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

    Werbung      Solar Speicher und Akkus Tests