- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 115

Thema: RP6-Projekt induktive Ladestation

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,
    habs versucht ...
    Ich auch ...

    1. Die Funktion:
    Code:
    uint8_t read_IR_value(void)
    {
    //    uint8_t temp = 0;
        I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30
        I2CTWI_readBytes(I2C_RP6_BASE_ADR, temp_IR, 1);
        return temp;
    }
    ... tut nicht das, was sie soll.
    Wenn du sie im Programm mit temp = read_IR_value(); aufrufst, wird von der Funktion nicht der IR-Sensor-Wert zurückgegeben, sondern der Wert der (globalen) Variablen temp.
    Allerdings wird der IR-Sensor-Wert in der (ebenfalls globalen) Variablen temp_IR gespeichert, die im Programm als Array definiert ist.
    temp_IR[0] wird von dir aber nicht weiter benutzt.
    Die Funktion müßte so aussehen:
    Code:
    uint8_t read_IR_value(void)
    {
        uint8_t tmp = 0;
        I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30
        I2CTWI_readBytes(I2C_RP6_BASE_ADR, tmp, 1);
        return tmp;
    }
    Dann kriegst du mit temp = read_IR_value(); den IR-Sensor-Wert in temp.

    2. Nochmal zur Hauptschleife:
    Code:
        while(true)
        {
    
            do
            {
    
                // Alles weitere ...
    
    
                task_checkINT0();
                task_I2CTWI();
            }
            while(!bumper_left && !bumper_right);
            stop();
    
        }
    ... und dem Problem, dass sie m.E. nicht funktioniert. Warum soll diese Schleife auf die Bumper reagieren? Teste das mal! Wird der Stop-Befehl erreicht, wenn du einen Bumper drückst?

    3.
    reflektionen, ansonsten siehe kommentare
    Ich kann nicht verstehen, warum durch eine Abfrage des IR-Empfängers rasch hintereinander im 50ms-Teil Reflektionen "erkannt" bzw. ausgeblendet werden können. In einem Raum können Lichtreflektionen durch ein einfaches GCC-Programm nicht berechnet/erkannt werden. Sie unterscheiden sich in der Laufzeit in einem Zimmer nur im Nanosekundenbereich.

    4. ... (so viel erstmal ...)
    Gruß
    Dirk

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Hi Dirk,
    Zitat Zitat von Dirk Beitrag anzeigen
    1. Die Funktion:
    Code:
    uint8_t read_IR_value(void)
    {
    //    uint8_t temp = 0;
        I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30
        I2CTWI_readBytes(I2C_RP6_BASE_ADR, temp_IR, 1);
        return temp;
    }
    ... tut nicht das, was sie soll.
    Wenn du sie im Programm mit temp = read_IR_value(); aufrufst, wird von der Funktion nicht der IR-Sensor-Wert zurückgegeben, sondern der Wert der (globalen) Variablen temp.
    Allerdings wird der IR-Sensor-Wert in der (ebenfalls globalen) Variablen temp_IR gespeichert, die im Programm als Array definiert ist.
    temp_IR[0] wird von dir aber nicht weiter benutzt.
    Die Funktion müßte so aussehen:
    Code:
    uint8_t read_IR_value(void)
    {
        uint8_t tmp = 0;
        I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30
        I2CTWI_readBytes(I2C_RP6_BASE_ADR, tmp, 1);
        return tmp;
    }
    Dann kriegst du mit temp = read_IR_value(); den IR-Sensor-Wert in temp.
    meinst Du hier evtl "tmp"? Verstehe ich das richtig: in der ursprünglichen version wurde nicht der aktuelle sensor-wert in "temp" geschrieben, sondern ein wert aus dem IR-array? Ich werde die geändert version testen...

    Zitat Zitat von Dirk Beitrag anzeigen
    2. Nochmal zur Hauptschleife:
    Code:
        while(true)
        {
    
            do
            {
    
                // Alles weitere ...
    
    
                task_checkINT0();
                task_I2CTWI();
            }
            while(!bumper_left && !bumper_right);
            stop();
    
        }
    ... und dem Problem, dass sie m.E. nicht funktioniert. Warum soll diese Schleife auf die Bumper reagieren? Teste das mal! Wird der Stop-Befehl erreicht, wenn du einen Bumper drückst?
    der stop-befehl wird erreicht, mit diesem, unverändertem

    Code:
    #include "RP6ControlLib.h"
    #include "RP6I2CmasterTWI.h"
    #include "RP6Control_MultiIOLib.h"
    #include "RP6Control_I2CMasterLib.h"
    #include "RP6Control_LFSBumperLib.h"
    #include "RP6ControlServoLib.h"
    #include "standard.h"
    
    #define I2C_RP6_BASE_ADR 10
    
    /******************variablen***************************/
    
    //uint8_t transmit_buffer[10];
    uint8_t RP6data[32];
    
    uint8_t i, j, t;
    int16_t x, y, z;
    uint8_t temp;
    
    
    //uint8_t ir_value[0];
    uint8_t temp_IR[0];
    //uint8_t feld_IR[200];
    
    
    /*******************************************************************************/
    void readAllRegisters(void)
    {
        I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 0); // Start with register 0...
        I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 31); // and read all 30 registers up to
        // register Number 29 !
    
        // Now we output the Data we have just read on the serial interface:
        writeString_P("\nREADING ALL RP6 REGISTERS:");
        uint8_t i = 0;
        for(i = 0; i < 31; i++)
        {
            if(i % 8 == 0)           // add some newline chars otherwise everything
                writeChar('\n');  // is printed on ONE single line...
            else
                writeString_P(" | ");
            writeChar('#');
            writeIntegerLength(i,DEC,2);
            writeChar(':');
            writeIntegerLength(RP6data[i],DEC,3);
        }
        writeChar('\n');
    }
    
    /***************************************************************************/
    
    uint8_t read_IR_value(void)
    {
    //    uint8_t temp = 0;
        I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30
        I2CTWI_readBytes(I2C_RP6_BASE_ADR, temp_IR, 1);
        return temp;
    }
    
    /******************************************************************/
    
    void I2C_requestedDataReady(uint8_t dataRequestID)
    {
        checkRP6Status(dataRequestID);
    }
    
    
    /********************hauptprogramm*****************************/
    
    int main(void)
    {
        initRP6Control();
        multiio_init();
        initLCD();
    //orientation_init();
    
        setLEDs(0b1111);
        mSleep(500);
        setLEDs(0b0000);
    
        I2CTWI_initMaster(100);
        I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
        I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
        showScreenLCD(" RP6Control M32", " bake_suche_1", "", "");
        mSleep(1500);
        clearLCD();
        accuspannung();
        mSleep(1500);
        clearLCD();
    
        while(true)
        {
    
    
            setLEDs(0b0100);
    
    
            startStopwatch3();
            t=0;
    
            do
            {
    //            readAllRegisters();
    
                if(getStopwatch3() > 50)
                {
                    temp = read_IR_value();
    
                    if (temp !=0)
                    {
                        setMultiIOLED1(1);
                        setMultiIOLED1(0);
                        rotate(80, RIGHT, 5, false);
                        temp = read_IR_value();
                        if (temp == 0) stop(); //break;
                        if(bumper_left && bumper_right) //stop();//break;
                        {
                            stop();
    
    
                        }
    
                    }
                    temp = read_IR_value();
    
                    if (temp == 0)
                    {
                        x = getStopwatch3();
                        setMultiIOLED3(1);
                        setMultiIOLED3(0);
                        if (t<10)
                        {
                            t++;
    
                            if (t == 10)
                            {
                                y = getStopwatch3();
                                z = y-x;
    /*
                                writeInteger(x, DEC);
                                writeChar('\n');
                                writeInteger(y, DEC);
                                writeChar('\n');
                                writeInteger(z, DEC);
                                writeChar('\n');
    */
                                t=0;
                                setStopwatch3(0);
                                if (z< 600)
                                {
                                    move(100, FWD, DIST_MM(100), false);
                                    setStopwatch3(0);
                                    t=0;
                                    mSleep(400);
                                    task_checkINT0();
                                    task_I2CTWI();
                                    if(bumper_left && bumper_right)
                                    {
                                        stop();
    
                                    }
    
                                }
    
                            }
    
                        }
    
    
                    }
                }
    
                task_checkINT0();
                task_I2CTWI();
            }
            while(!bumper_left && !bumper_right);
            stop();
    
        }
    
    
        return 0;
    }
    Zitat Zitat von Dirk Beitrag anzeigen
    3. Ich kann nicht verstehen, warum durch eine Abfrage des IR-Empfängers rasch hintereinander im 50ms-Teil Reflektionen "erkannt" bzw. ausgeblendet werden können. In einem Raum können Lichtreflektionen durch ein einfaches GCC-Programm nicht berechnet/erkannt werden. Sie unterscheiden sich in der Laufzeit in einem Zimmer nur im Nanosekundenbereich.
    das ist aber das ergebnis meiner versuche. Bei einer abfrage fur der RP ganz woanders gegen die wand, weil er dort die bake gesehen hat, bei 10x nacheinader hat er die richtige richtung gefunden. Nicht nur in einem raum, sondern an verschiedene stellen, sogar draussen...
    gruß inka

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,
    ich werde mich jetzt erstmal hier ein wenig ausklinken, obwohl ich dein Projekt weiterhin interessant finde.

    Davor aber noch kurz abschließend:
    Verstehe ich das richtig: in der ursprünglichen version wurde nicht der aktuelle sensor-wert in "temp" geschrieben, sondern ein wert aus dem IR-array?
    Nein, so nicht richtig (siehe mein letzter Post!).

    der stop-befehl wird erreicht, mit diesem, unverändertem (Code)
    Ich denke: Nein. Testen!!!

    das ist aber das ergebnis meiner versuche.
    Ich würde dir empfehlen, die Einzelfunktionen (IR-Abfrage, Bumper-Abfrage, Drehen bis IR erkannt, Geradeausfahrt...) getrennt voneinander zu schreiben und zu testen. Damit vermeidest du, dass du ein Gesamtsystem als erfolgreich testest, was im Detail noch ggf. Macken hat.
    Besonders die IR-Abfrage würde ich als eigenständige Task (Aufgabe) für die Hauptschleife schreiben: Diese Task gibt nur eine Variable für IR AN oder IR AUS aus und tut sonst nichts. Dabei ist es deine Festlegung, ob IR AN erst nach 10 identischen Abfragen im 50ms Abstand ausgegeben wird oder irgendwie anders.
    Gruß
    Dirk

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    habe jetzt noch eine tabelle für den Bauteilebedarf hinzugefügt, gibt es sonst noch verbesserungsvorschläge, wünsche?
    gruß inka

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hi Inka,
    danke dir für die Anleitung. Eine Frage habe ich noch: deine Sekundärspule hast du unterm RP6 befestigt... das gefällt mir leider gar nicht, habe Angst dass er irgendwo (am teppich etc) mal hängen bleibt. Hast du mal versucht/getestet, ob du den Ladestrom auch schaffst, wenn sie INNEN im RP6 liegt? Dafür sind natürlich weitere Umbauten nötig, ich weiß, aber "unsichtbar" fände ich halt schon nett

    Grüße

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

    habe gerade meinen roboter nach einem encoder & getriebewechsel wieder zugeschraubt - übrigens - die neuen encoder sind wirklich super, mann darf sich durchaus fragen wozu die potis zum einstellen überhaupt noch da sind? So haben die alten encoderscheiben ausgesehen
    Klicke auf die Grafik für eine größere Ansicht

Name:	2014_05_16_encoderscheiben nach 4 jahren.jpg
Hits:	10
Größe:	25,6 KB
ID:	28211


    - ich habe zum erstenmal das getrieb überhaupt aufgemacht!

    habe jetzt also nur ein foto des innenraums in der wanne:

    Klicke auf die Grafik für eine größere Ansicht

Name:	gehäuse geöffnet.jpg
Hits:	14
Größe:	55,5 KB
ID:	28210

    die wandstärke der wanne ist 2mm. Die einbau situation im galaxy note3 ist so, dass die rückwand - hinter der die empfängerspule sitz - hauchdünn ist. Und das telefon liegt ohne spalt, direkt auf der ladestation...

    Meiner erfahrung mit dem ladegerät sagt mir, dass der abstand der spulen beim einbau der empfängerspule innen zu groß sein wird. Es ist jetzt schon an der grenze...

    Und, wenn Du Dir das foto anschaust - wo willst Du die spule dort unterbringen? Welche streben und wände sollen raus? Beim aufkleben an der außenwand unten trägt die spule maximal 1.2mm, Du könntest auch z.b. rundherum um die spule richtigen wulst aus UHU-plus anbringen als schutz gegen hängenbleiben...

    Oder die wanne außen um 1.5mm ausfräsen und die spule dort versenken...
    gruß inka

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Ja, ich gebe zu, das wäre etwas eng und auch der abstand wäre wohl schwierig. Aber ich behalte mal die idee

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

    hat zwar nur am rande mit der induktiven ladestation zu tun, ist auch keine solar notstromversorgung, aber es ist mir damit gelungen meinen RP6 weitgehends vom 220V netz unabhängig zu machen...

    eigentlich war es nur ein defektes DVD-laufwerk...

    1) mit deckel


    2) demo betrieb
    gruß inka

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hallo allerseits.

    Zitat Zitat von fabqu Beitrag anzeigen
    deine Sekundärspule hast du unterm RP6 befestigt... das gefällt mir leider gar nicht, habe Angst dass er irgendwo (am teppich etc) mal hängen bleibt.
    die ladestation funktioniert immer noch, auch für ein fahrgestell für arduino, eine verbesserung habe ich dort angebracht - die sekundärspulen sind dort in einer hülle für scheckkarten untergebracht...
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_8853-1.jpg
Hits:	26
Größe:	42,8 KB
ID:	31139Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_8854-1.jpg
Hits:	28
Größe:	33,4 KB
ID:	31140

    passt hervorragend
    gruß inka

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hallo,

    der RN-Wissen artikel über / zu der induktiven ladestation ist online...

    das war richtig aufregend
    gruß inka

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. RP6 - Projekt Notstromversorgung
    Von Dirk im Forum Robby RP6
    Antworten: 33
    Letzter Beitrag: 19.02.2015, 19:51
  2. Ladestation für RP6?
    Von TobeFFM im Forum Robby RP6
    Antworten: 26
    Letzter Beitrag: 26.11.2013, 16:38
  3. [Projekt]RP6 per Bluetooth flashen
    Von Fabian E. im Forum Robby RP6
    Antworten: 0
    Letzter Beitrag: 15.07.2011, 18:31
  4. RP6 remote controled Projekt
    Von mr.stroh im Forum Robby RP6
    Antworten: 4
    Letzter Beitrag: 17.11.2010, 08:06
  5. Antworten: 65
    Letzter Beitrag: 01.12.2007, 12:45

Berechtigungen

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

LiFePO4 Speicher Test