- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 55

Thema: Anfänger braucht Hilfe

  1. #31
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Morgen allerseits,

    @021aet04: Danke für die Antwort! Ich habe diesen Rechner hier gefunden: http://www.led-store.ch/vorwiderstand-rechner.php Wenn ich z.B. 3 Weiße LED´s (Standard) an meinen RP6 anschließen möchte, wie gehe ich da am besten vor? Der Rechner benötigt noch ein paar Angaben, über z.B. Stromaufnahme und Betriebsspannung.... Wie viel beträgt denn die Betriebsspannung beim RP6? (6x1,2V Akkus habe ich drinnen, ist dass dann auch die Betriebsspannung?) Wo schließe ich Sie dann an, dass ich sie auch so ansprechen kann wie z.B. die Standard LED´s (die die schon verbaut sind)? Könnte man diese an eine Platine anschließen, und diese dann an den RP6 bauen (z.B. die Experimentierplatine oder auch eine andere, habe hier noch ein paar )

    @danimath: Ja, dieses Video hatte ich glaube ich auch gesehen... Ich möchte jetzt einfach mal was an der Hardware "ändern" basteln...
    Ja, diese Erweiterungsplatine finde ich echt cool, da sind doch recht viele Anschlüsse... Das LCD-Display ist halt schon krass auf dem Ding dann
    Wenn Du auch soweit bist, kannst ja auch gerne ein Video machen und hochladen..

    Beste Grüße

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  2. #32
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Damit du die Led betreiben und den Widerstand richtig berechnen kannst brauchst du verschiedene Angaben. Du hast bei einer Led einen bestimmten Maximalstrom. Bei Standard und superhelle Leds sind diese meist zwischen 20 und 40mA. Das ist der Maximalwert, diesen darfst du nicht bzw sehr kurz (z.B. zum Multiplexen) überschreiten. Den tatsächlichen Wert darfst du (natürlich nur bis zum Maximalwert) selbst festlegen. Ein weiterer Wert den du brauchst ist die Flussspannung. Diese hängt von der Led ab die du verwendest. Die Flussspannung hängt auch vom Strom ab den du verwendest (es gibt eigene Kennlinien), diese sind bei Standard/ superhelle Leds nicht so notwendig. Ein weiterer Wert der den Strom beeinflusst ist die Temparatur. Diese ist bei Standard/superhelle Leds ebenfalls zu vernachlässigen. Diese Dinge sind eher bei Hochleistungsleds (über 1W) zu beachten, da diese selbst Wärme erzeugen und je höher die Temparatur desto niedriger wird der Widerstand der Led.

    Hast du schon Grundlagen durchgelesen. Du solltest nicht den Rechner verwenden wenn du die Grundlagen noch nicht kennst (meine Meinung). Wie du es berechnest findest du im Internet. Z.B. hier http://de.wikipedia.org/wiki/Leuchtdiode

    Zur Flussspannung z.B. hier http://www.led-treiber.de/html/vorwi...#Flussspannung

    MfG Hannes
    Geändert von 021aet04 (09.08.2011 um 10:48 Uhr)

  3. #33
    Danke für die viele Information. Ich werde mir das heute noch genauer zu gemüte führen. Also ich habe vor "nur" die Standard LED´s zu verwenden. Wo (an welchem Eingang) schließe ich sie an. Ich weiß nicht genau, ob Du es jetzt schon beantwortet hast, aber wie hoch ist denn die (Standard) - Betriebsspannung? *Sorry*

    Danke auch für die Links

    Beste Grüße

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  4. #34
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Die Betriebsspannung eines µCs ist normalerweise von ca. 1,8V-5V. Beim RP5/RP6, Asuro,... wird 5V verwendet. Welchen Pin du verwenden kannst weiß ich nicht, da ich keinen RP6 habe. Das findest du in der Anleitung. Wie du die jeweiligen Pins ansteuerst findest du auch dort.

    Wenn du zu wenige Pins hast kannst du auf Erweiterungen mit entweder Schieberegister oder andere Buserweiterungen (z.B. via I2C) umssteigen. Diese Pins sollten am µC natürlich frei sein oder du verwendest einen Software Bus (z.B. SoftI2C oder SoftSPI). Dannn kannst du jeden beliebigen Pin verwenden.

    MfG Hannes

  5. #35
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2011
    Ort
    Hannover
    Beiträge
    164
    Vielen Dank auch vom danimath!

    viele Grüße
    Andreas

  6. #36
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Die Akkuspannung UB beim RP6 beträgt bis zu 8,4V. Mit dem 5V-Spannungsregler wird dann die Bordspannung VDD erzeugt. Die Belegung der Erweiterungssteckplätze kann man sich im Schaltplan anschauen.

    Eine Übersicht der Pinbelegung hat Dirk zusammengestellt:
    https://www.roboternetz.de/community...s-des-ATMega32

    Eine Auflistung der Anschlussmöglichkeiten und einen Belegungsvorschlag für den USRBus gibts natürlich auch von mir:
    https://www.roboternetz.de/community...l=1#post453061

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #37
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    35
    Beiträge
    116
    Ganz viele Infos zum RP6 findest du auch im RN-Wissen.
    Wenn du die Led's am Sensorpanel Befestigen willst, findest du die Schemas auf der Arexx-RP6 Webseite
    Schau einfach mal genau auf dein Mainboard. Überall wo VDD steht, kannst du geregelte 5V "abzapfen".
    Wenn du aber die Leds gerne ein/und ausschalten willst (davon gehe ich ja mal aus), leg sie direkt an einen I/O. Wo die sind, siehst du auch hier!
    Wenn du im Schema des Mainboards (Seite 2/4) in den Feldern E2-4 nachsiehst, wirst du die I/O's auch sehen.
    Du kannst aber auch den ADC0 / 1 Port verwenden. Die ansteuerung ist aber etwas weniger simpel. (Kann dir auch nicht zu 100% sagen, wie das geht, aber es geht! (vergleiche Servos)
    MfG
    Filou

  8. #38
    Vielen Dank für die viele Information. Ihr seit echt SPITZE!! Ich werde das mir jetzt erstmal alles durchlesen, und dann sehe ich weiter. Evtl. schildere ich Euch dann noch wie ich es vor habe zu bewerkstelligen.

    Ich habe heute mal probiert, mein Programm zum Ausweichen von Hindernissen zu optimieren. (Das Video, welches ich weiter oben gepostet habe, war schon gut, jedoch war da einprogrammiert, dass er sich um 45° drehen soll usw.) Jetzt versuche ich es so zu basteln, dass er solange z.B. nach links fährt/rotiert, bis der Gegenstand nicht mehr im Wege ist. Das habe ich auch schon zum Teil recht gut gemacht, wie ich meine. Das Problem ist, dass wenn er in einer Ecke ist, bekommt er Probleme.. Er weiß einfach nicht wie er da raus kommen soll & ich weiß nicht, wie ich es ihm am besten beibringen kann.... Die Beispielcodes verstehe ich nicht ganz, somit hänge ich da gerade.

    Wenn Ihr Euch den Code evtl. mal anschauen wollt(?) Bei der Gelegenheit hätte ich noch eine Frage: Warum leuchten die LED´s (die Roten Standard) nicht auf, wenn er ein Hinderniss erkennt? - Habe ich doch ins Programm geschrieben... (Anders machen sie es ja auch nicht in den Beispielen)

    Hier der Code:

    Code:
    #include "RP6RobotBaseLib.h"
    void acsStateChanged(void) //ACS
    {
    	// Hindernis links
    	if(obstacle_left){
    	rotate(50, RIGHT, (obstacle_left = false), true); // dreht sich so lange bis der linke Sensor kein Hinderniss mehr hat
    	}
        // Hindernis rechts    
    	if(obstacle_right){
    	rotate(50, LEFT, (obstacle_right = false), true); // dreht sich so lange bis der rechte Sensor kein Hinderniss mehr hat
    	}
        // Mitte?
    	if(obstacle_left && obstacle_right ){
    	move(60, BWD, DIST_CM(10), true); //10 cm Rückwärts
        rotate(50, LEFT, 180, true); // um 180° nach links drehen
    	}
    	
    	//if(getDirection() == LEFT && getDirection() == RIGHT){
    	//startStopwatch1(); // Stopwatch1 starten
    	//}
    }
    //Bumpers
    void bumpersStateChanged(void) {
    	//if(bumper_left || bumper_right){        //Wenn ein Bumper berührt wurde, dann mal das machen, egal welcher.
    	//moveAtSpeed(0,0);                       //Nicht unbedingt nötig, aber ich würde die beiden Zeilen zur Sicherheit schreiben.
    	//mSleep(500);
    	//move(60, BWD, DIST_CM(25), true); //25 cm Rückwärts
    	//}
        if(bumper_left && bumper_right){
    		mSleep(500);
    		move(60, BWD, DIST_CM(10), true); //10 cm Rückwärts
            rotate(50, LEFT, 188, true); // um 180° nach links drehen  
    	}
        else if(bumper_left){
    		mSleep(500);
    		move(60, BWD, DIST_CM(5), true); //5 cm Rückwärts
            rotate(50, RIGHT, 49, true); // um 45° nach rechts drehen
    	}
        else if(bumper_right){
    		mSleep(500);
    		move(60, BWD, DIST_CM(5), true); //5 cm Rückwärts
            rotate(50, LEFT, 45, true); // um 45° nach links drehen
    	}
    }
    
    void fahrenFunction(void){
    	// Geschwindigkeit einstellen !!Richtung nicht vergessen!!
    	changeDirection(FWD);
    	moveAtSpeed(90,90);
    	if(getStopwatch1() > 3500) // Sind 3500ms (= 3,5s) vergangen?
    		{
    		// Bewegungsrichtung ändern:
    		if(getDirection() == FWD) // Fahren wir vorwärts...
    		changeDirection(BWD); // dann Rückwärts einstellen!
    		else if(getDirection() == BWD) //... oder Rückwärts?
    		changeDirection(FWD); // dann Vorwärts einstellen!
    		setStopwatch1(0); // Stopwatch1 auf 0 zurücksetzen
    	}
    }
    
    int main(void) {
    
        initRobotBase(); 
        setLEDs(0b111111);
        mSleep(2500);
        setLEDs(0b001001); 
    
        // ACS Event Handler registrieren:
        ACS_setStateChangedHandler(acsStateChanged);
        // Set Bumpers state changed event handler:
        BUMPERS_setStateChangedHandler(bumpersStateChanged);
        // ACS Empfänger einschalten (und Encoder etc.)
        powerON();
        // ACS auf mittlere Sendeleistung stellen.
        setACSPwrMed();
    
    
    	// Main loop
    	while(true){
            // Aus der Hauptschleife ständig die motionControl Funktion
            // aufrufen – sie regelt die Motorgeschwindigkeiten!
            task_motionControl();
            // ADC Wird wegen den Motorstromsensoren aufgerufen!
            task_ADC(); 
            // Bumper automatisch alle 50ms auswerten
            task_Bumpers();
            // ständig die task_ACS Funktion aufrufen!
    		// task_ACS();
            task_RP6System();
    		//Fahren
    		fahrenFunction();
    		/////////////////////////Bumper//////////////////////////
    		statusLEDs.LED6 = bumper_left; // Bumper links gedrückt
    		statusLEDs.LED4 = !bumper_left; // links nicht gedrückt
    		statusLEDs.LED3 = bumper_right; // Bumper rechts gedrückt
    		statusLEDs.LED1 = !bumper_right; // rechts nicht gedrückt
    		// Beide Bumper gedrückt:
    		statusLEDs.LED2 = (bumper_left && bumper_right);
    		statusLEDs.LED5 = statusLEDs.LED2;
    		updateStatusLEDs(); // LEDs aktualisieren...	
    		/////////////////////////Obstacle////////////////////////////
    		statusLEDs.LED6 = obstacle_left && obstacle_right; // Mitte?
    		statusLEDs.LED3 = statusLEDs.LED6;
    		statusLEDs.LED5 = obstacle_left; // Hindernis links
    		statusLEDs.LED4 = (!obstacle_left); // LED5 invertiert!
    		statusLEDs.LED2 = obstacle_right; // Hindernis rechts
    		statusLEDs.LED1 = (!obstacle_right); // LED2 invertiert!
    		updateStatusLEDs();
    	}
        return 0;
    }
    Ist der Code so einigermaßen in Ordnung? Ich hoffe, dass Ihr mir helfen könnt. Könnte mir jemand nochmal auf die Sprünge helfen, wie das mit den prioritäten war? Obwohl ich diese hier nicht beachtet habe, reagiert er trotzdem auf die "Bumper" & die "Obstacles"

    Beste Grüße

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  9. #39
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    35
    Beiträge
    116
    Hallo Crystal Eye,
    Ich schaue gerade deinen Code an und möchte dir dazu ein Paar Worte sagen. Starten wir bei main():

    mit task_RP6System(); rufst du alle anderen Tasks auch auf. Du machst das also 2 mal.. (langsam)

    fahrenFunktion();
    if (GetStop...>3500) wirst du garnie haben, da sie nirgends im Programm gestartet wurde. (Hast du sicher aus der Anleitung kopiert

    setzen der statusLeds: Wenn du das Programm so laufen lässt, werden die Leds nur die Obstacle-Meldungen anzeigen, da die Bumper-meldungen gerade wieder überschrieben werden.
    Da müstest du ev eine art wechselblinker machen,der immer 1sec Bumper- und 1sec Obstacle-meldungen anzeigt.

    bumpersStateChanged(void) scheint gut.

    acsStateChanged(void)
    Auszug aus RP6RobotBaseLib.c
    Code:
    void rotate(uint8_t desired_speed, uint8_t dir, uint16_t angle, uint8_t blocking)
    {
        motion_status.move_L = true;
        motion_status.move_R = true;
        uint16_t distance = (uint16_t) (((uint32_t)(ROTATION_FACTOR) * (uint16_t)angle)/100);
        preDecelerate_L = distance - 100;
        preDecelerate_R = distance - 100;
        preStop_L = distance;
        preStop_R = distance;
        if(distance < 40) {
            distance = 40; 
            preStop_L = 20;
            preStop_R = 20;
            preDecelerate_L = 10;
            preDecelerate_R = 10;
        }
        moveAtSpeed(desired_speed,desired_speed);
        changeDirection(dir);
        
        mleft_dist = 0; 
        mright_dist = 0;
        distanceToMove_L = distance;
        distanceToMove_R = distance;
        
        motion_status_tmp = motion_status.byte;
        MOTIONCONTROL_stateChangedHandler();
        if(blocking)
            while(!isMovementComplete())
                task_RP6System();
    }
    Du siehst, das 3. Argument (uint16_t angle) ist eine Ganze Zahl,Integer.
    Deshalb kannst du nicht schreiben ....,(obstacle_left=false),.... (wäre ja sowieso eine Zuweisung, kein Vergleich)
    Da hast du wohl nur eine Lösung:
    Du willst solange Rotieren, bis das ACD freie Bahn meldet.
    Was heisst denn rotieren? Das hat garnichts mit dem Winkel zu tun, in unserem Fall.

    Wann rotiert der RP? Wenn eine Raupe Vorwärts und die andere rückwärts dreht.
    Das machst du mit:
    setMotorDir(uint8_t left_dir, uint8_t right_dir); --> überzeige dich selbst, steht in der RP6RobotBaseLib.c, sogar wie anwenden.
    [Edit]Oder changeDirection(LEFT/RIGHT); [/EDIT]

    Wenn du jetzt also die Richtungen unterschiedlich eingestellt hast, machst du nur noch:
    moveAtSpeed(uint8_t desired_speed_left, uint8_t desired_speed_right) bis die bahn frei ist, oder solange du noch ein Hindernis erkennst.

  10. #40
    Hallo Filou89,

    danke für die Hinweise!
    1.
    mit task_RP6System(); rufst du alle anderen Tasks auch auf. Du machst das also 2 mal.. (langsam)
    Das ist mir jetzt wirklich peinlich, das hatte ich schonmal richtig, das habe ich jetzt auch sofort verbessert/ausgebessert.

    2.
    fahrenFunktion();
    if (GetStop...>3500) wirst du garnie haben, da sie nirgends im Programm gestartet wurde. (Hast du sicher aus der Anleitung kopiert
    Stimmt Aber auch hier ist es nicht mehr aktuell. Ich hatte die zeit auf 500 gestellt, besser?
    3.
    setzen der statusLeds: Wenn du das Programm so laufen lässt, werden die Leds nur die Obstacle-Meldungen anzeigen, da die Bumper-meldungen gerade wieder überschrieben werden.
    Das Problem ist aber genau andersrum. Die LED´s blinken nicht auf wenn ein Hinderniss erkannt wird, nur wenn die Bumper aktiviert werden (ist glaube ich doch so "fest" einprogrammiert, oder?

    So, nun zu dem Teil, den ich noch immer nicht ganz kapiert habe.:

    Du siehst, das 3. Argument (uint16_t angle) ist eine Ganze Zahl,Integer.
    Deshalb kannst du nicht schreiben ....,(obstacle_left=false),.... (wäre ja sowieso eine Zuweisung, kein Vergleich)
    Ok, das leuchtet mir jetzt ein, thx!

    Das machst du mit:
    setMotorDir(uint8_t left_dir, uint8_t right_dir);
    Wann bzw. wo muss ich das einbauen? Hier:
    Code:
    // Hindernis links
    	if(obstacle_left){
    	setMotorDir(30,60);
    	//rotate(50, RIGHT, (obstacle_left = false), true); // dreht sich so lange bis der linke Sensor kein Hinderniss mehr hat
    	}
    Also, ich verstehe (eigentlich) ganz gut was du meinst, aber ich weiß noch nicht, wie bzw. wo ich die "setMotorDir(uint8_t left_dir, uint8_t right_dir);" Funktion und "moveAtSpeed(uint8_t desired_speed_left, uint8_t desired_speed_right)" einsetzten soll.
    Sorry, bin doch noch sehr im Anfangsstadium

    Beste Grüße

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte

Ähnliche Themen

  1. Anfänger braucht Hilfe
    Von Tonyy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 14.12.2010, 08:16
  2. hilfe Anfänger braucht hilfe beim start
    Von thomas3 im Forum Robby RP6
    Antworten: 26
    Letzter Beitrag: 20.09.2010, 22:07
  3. Anfänger braucht Hilfe
    Von vitja09 im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 8
    Letzter Beitrag: 07.10.2006, 14:31
  4. Anfänger braucht hilfe!!!!
    Von mathisdedial im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 22.12.2004, 14:02
  5. Anfänger braucht hilfe
    Von khazad im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 11
    Letzter Beitrag: 25.10.2004, 12:27

Berechtigungen

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

12V Akku bauen