- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 13

Thema: SFR05 an RP6Base

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Hi!

    Um den Ultraschallsensor nach links, rechts, oben und unten bewegen zu können, habe ich eine Servohalterung montiert. Nun wollte ich das Nick-Servo auch verwenden. Zum schonen der RP6-Akkus habe ich einen Empfängerakku aus dem RC-Bereich durch ein Y-Kabel mit den beiden Servos verbunden. Nun ist es aber so, dass sich nur dass Nick-Servo bewegt und das Gier-Servo gar nichts macht. Wenn ich nur dass Gier-Servo mit dem Roboterakkus verbinde und das Nick-Servo mit dem Empfängerakku, dann funktioniert das Gier-Servo und das Nick-Servo geht auf Anschlag und macht nicht was es soll. Andersrum macht nur das Nick-Servo etwas und das Gier-Servo macht gar nichts.

    Weiß jemand, was ich da machen kann?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @BeWe:
    ... habe ich einen Empfängerakku aus dem RC-Bereich durch ein Y-Kabel mit den beiden Servos verbunden.
    Du hast aber schon Masse (GND, Minuspol) des RC-Empfängerakkus auch mit GND des RP6 verbunden?

    Wenn ja: Wie steuerst du die Servos denn an?
    Gruß
    Dirk

  3. #3
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Mit GND habe ich den Empfängerakku nicht verbunden. Wenn ich das mache, leuchtet SL2 und die Servos machen nix. Außerdem hätten die Servos dann ja keinen Massenanschluss.
    Angesteuert werden diese momentan über einen IO-Ports und extInt mit einem Programm, was ich hier im Forum gefunden habe.

    EDIT: Klappt nun doch, ich hatte nicht beachtet, dass die Servos ja auch an GND angeschlossen sein müssen. Ich dachte, der Minus-Pol des Akkus würde auch gehen
    So, dann kann ich meinen Robby das Kopfnicken beibringen
    Geändert von BeWe (16.03.2011 um 19:46 Uhr)

  4. #4
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Hmmm...
    So ganz einfach scheint es dann doch nicht zu gehen
    Ich hab jetzt GND von Servos und seperaten Akku mit GND des Robbys verbunden. Wenn ich das Programm ausführe, bricht es dann irgendwann ab und der Roboter fährt so weiter, wie er es gerade getan hat.

    Kann es sein, dass der Roboter durch den zusätzlichen Akku irgendwie überlastet wird??
    Geändert von BeWe (17.03.2011 um 16:24 Uhr)

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Und was will der Künstler uns damit sagen?
    Dann wird da wohl ein Fehler im Programm sein.... *rolleyes
    LG Rolf
    Sind Sie auch ambivalent?

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Kann es sein, dass der Roboter durch den zusätzlichen Akku irgendwie überlastet wird??
    Nein, eigentlich nicht.
    Nachdem wir das mit GND geklärt hatten:
    Wie sieht es denn mit dem Pluspol des RC-Akkus aus?

    Der sollte NUR mit den Servos (meist rotes Kabel) verbunden sein, aber nicht mit dem RP6.

    Wenn das so ist: Zeig mal dein Programm!
    Gruß
    Dirk

  7. #7
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Das roten Kabel des RC-Akkus sind nur mit den roten Kabeln der Servos verbunden.

    Hier wäre das (bestimmt unübersichtliche) Programm:
    Code:
    ///Hindernisausweichen mit Ultraschallsensor
     
    #include "RP6RobotBaseLib.h" 
    
    #define pos1 320
    #define pos2 410
    #define pos3 600
     
    void usleep(unsigned char usec); 
     
    extern uint8_t acs_state; 
    uint16_t servo_pos, servo_pos2, servo_timer, servo_dummy, Zeit; 
    int16_t Dist, Dist_left, Dist_right, Dist_front;
    int8_t x, z, a, Dist_3;
     
    int main(void)
    {
     initRobotBase();
     
     powerON();
     startStopwatch3();
     startStopwatch2();
     
     servo_pos2=pos2;
     
     a=0;
     x=1;
     z=0;
     Dist_3=1;
     
     servo_pos=1000;
     
     setACSPwrLow();
     
     while(true)
     {
     
      if ((getStopwatch2() > 20) && (acs_state < 2))
      { 
     
       servo_timer = servo_pos; 
       extIntON();
       while(servo_timer--) servo_dummy ^= servo_timer; 
       extIntOFF();
       servo_timer = servo_pos2;
       setLEDs(0b010000);
       while(servo_timer--) servo_dummy ^= servo_timer;
       setLEDs(0b000000);
       z=z+1;   
       setStopwatch2(0);
      } 
      
      if(z>3)
      {
       Dist=0;
       DDRC|=(SDA);
       PORTC&=~SDA;   
       PORTC|=SDA;   
       usleep(10);     
       PORTC&=~SDA;       
       DDRC&=~(SCL);
      
       while(!(PINC& SCL))
       {
        setLEDs(0b000000);  
       }
       while(PINC& SCL)      
       {
        Dist=Dist+1;
        usleep(1);
       }
       if(PINC&=~SCL)
       {
        if(Dist<23) 
        { 
         
         if(Dist<12)
         {
          servo_pos2=pos1;
          startStopwatch4();
          if(servo_pos<920)
          {
           a=0;
           changeDirection(LEFT);
           moveAtSpeed(50,50);
          }
          else
          {
           if(servo_pos>1150)
           {
            a=0;
            changeDirection(RIGHT);
            moveAtSpeed(50,50);
           }
           else
           {
            a=1;
            stopStopwatch3();
            setStopwatch3(1030);
            if(adcLSL>adcLSR) {changeDirection(LEFT); moveAtSpeed(100,100);} else {changeDirection(RIGHT); moveAtSpeed(100,100);}
           }
          }
         }
         else
         {
          servo_pos2=pos2;
          a=0;
          stopStopwatch4();
          setStopwatch4(0);
          changeDirection(FWD);
          if(servo_pos<1050)
          {
           moveAtSpeed(15,100);
          }
          else
          {
           moveAtSpeed(100,15);
          }
         }
        }
        else 
        {
         servo_pos2=pos3;
         a=0;
         stopStopwatch4();
         setStopwatch4(0);
         changeDirection(FWD);
         if(Dist_left-Dist_right>10)
         {
          moveAtSpeed(110,45);
         }
         else
         {       
          if(Dist_right-Dist_left>10)
          {
           moveAtSpeed(45,110);
          }
          else
          {
           moveAtSpeed(100,100);
          }
         }
        }
       }
       setStopwatch1(0);
       z=0;
      }
      
      if(getBumperLeft()) {move(100, BWD, DIST_MM(150), true); rotate(100, RIGHT, 70, true);}
      if(getBumperRight()) {move(100, BWD, DIST_MM(150), true); rotate(100, LEFT, 70, true);}  
      
      if(getStopwatch4()>2000)
      {
       if(adcLSL>adcLSR) {rotate(100, LEFT, 175, true);} else {rotate(100, RIGHT, 175, true);}
       stopStopwatch4();
       setStopwatch4(0);
      }
      
      if(servo_pos<700 && servo_pos>600) Dist_right=Dist;
      if(servo_pos<1000 && servo_pos>1060) Dist_front=Dist;
      if(servo_pos<1550 && servo_pos>1450) Dist_left=Dist;
      
      if(a==0) startStopwatch3();
     
      Zeit=getStopwatch3();
      
      if(getStopwatch3()>1700) 
      {
       if(x==0)
       {
        x=1;
        setStopwatch3(0);
       }
       else
       {
        x=0;
        setStopwatch3(0);
       }
      }
      
      if(a==0)
      {
       if(x==0)
       {
        servo_pos=600+Zeit/2;
       }
      
       if(x==1)
       {
        servo_pos=1550-Zeit/2;
       }
      }
      else
      {
       servo_pos=1030;
      }
       
      //task_RP6System(); 
      task_ADC(); 
      task_ACS(); 
      task_Bumpers();
      task_motionControl(); 
     }
     
     return 0;
    }
    void usleep(unsigned char usec) 
    { 
      for (int s=0; s<usec; s++) { 
        for (long int i=0; i<140; i++) { 
          asm volatile("nop"); 
          asm volatile("nop"); 
        } 
      } 
    }

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress