Skocz do zawartości

Działający robot na podczerwień


Pomocna odpowiedź

Hejka wszystkim

Robot na podczerwien dziala. W zalaczniku wysylam filmik z jego dzialania. Rozwiazaniem bylo to zeby podstawic kod i bibliotekę ze standardu RC5. Kolejny projekt arduino na ktory wpadłem szczęściem w rozwiązanie problemu. Problem dotyczyl instrukcji casw i flag. Trzeba podstawic program z kursu forbot na standard RC5 i swoje komendy 🙂 nic nie trzeba było robic z żadną flaga. Hehe 🙂 😊 . Z poniższym kodem śmiga jak burza 🙂

#include <RC5.h>



int TSOP_PIN = 13;         // def.PIN odbiornika


RC5 rc5(TSOP_PIN); //Informacja o podłączeniu odbiornika TSOP
byte address; 
byte command;
byte toggle;
 
const int IN1 = 7;
const int IN2 = 6;
const int IN3 = 4;
const int IN4 = 5;
const int ENA = 11;
const int ENB = 3;            // Piny silników


void setup() {


pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (ENB, OUTPUT);      // ust.silnikow jako wyjscia


}

void przod() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void lewo() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void prawo() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void tyl() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void stop() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 0);
analogWrite  (ENB, 0);

}

void loop() {
 if (rc5.read(&toggle, &address, &command)){
     switch(command) {
      case 2: //Do przodu
       przod();
      break;
 
      case 4: //Do tyłu
       lewo();
      break;
 
      case 6: //STOP
       prawo();
      break;
 
      case 8: //Obrót w lewo
        tyl();
      break; 
      
      case 0:
      stop();
      break;  
      
  


}
 }
}

16084786674173014320175695978292.jpg

Edytowano przez mateusz797
  • Lubię! 1
Link do komentarza
Share on other sites

10 minut temu, mateusz797 napisał:

Hejka wszystkim

Robot na podczerwien dziala. W zalaczniku wysylam filmik z jego dzialania. Rozwiazaniem bylo to zeby podstawic kod i bibliotekę ze standardu RC5. Kolejny projekt arduino na ktory wpadłem szczęściem w rozwiązanie problemu. Problem dotyczyl instrukcji casw i flag. Trzeba podstawic program z kursu forbot na standard RC5 i swoje komendy 🙂 nic nie trzeba było robic z żadną flaga. Hehe 🙂 😊 . Z poniższym kodem śmiga jak burza 🙂


#include <RC5.h>



int TSOP_PIN = 13;         // def.PIN odbiornika


RC5 rc5(TSOP_PIN); //Informacja o podłączeniu odbiornika TSOP
byte address; 
byte command;
byte toggle;
 
const int IN1 = 7;
const int IN2 = 6;
const int IN3 = 4;
const int IN4 = 5;
const int ENA = 11;
const int ENB = 3;            // Piny silników


void setup() {


pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (ENB, OUTPUT);      // ust.silnikow jako wyjscia


}

void przod() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void lewo() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void prawo() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void tyl() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void stop() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 0);
analogWrite  (ENB, 0);

}

void loop() {
 if (rc5.read(&toggle, &address, &command)){
     switch(command) {
      case 2: //Do przodu
       przod();
      break;
 
      case 4: //Do tyłu
       lewo();
      break;
 
      case 6: //STOP
       prawo();
      break;
 
      case 8: //Obrót w lewo
        tyl();
      break; 
      
      case 0:
      stop();
      break;  
      
  


}
 }
}

16084786674173014320175695978292.jpg

2.Program z flaga - tylko krecił się jeden silnik i trzeba było wyłączać go ,włączać 4 i wtedy np.  w lewo tylko jechal. Także mit programu z flagą został obalony 😄

#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

int receiverpin = 13;         // def.PIN odbiornika
IRrecv irrecv (receiverpin);  // nazwa odb
decode_results results;       // odwolanie do odbiornika


const int IN1 = 7;
const int IN2 = 6;
const int IN3 = 4;
const int IN4 = 5;
const int ENA = 11;
const int ENB = 3;            // Piny silników


void setup() {

irrecv.enableIRIn();         // uruchamia odbiornik podczerwieni
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (ENB, OUTPUT);      // ust.silnikow jako wyjscia


}

void przod() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void lewo() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void prawo() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void tyl() {

digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 150);
analogWrite  (ENB, 150);

}

void stop() {

digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
analogWrite  (ENA, 0);
analogWrite  (ENB, 0);

}

void IRtranslate(){

switch(results.value & 0x07FF){
 
   
   case 0x142:
   
   
   przod();  
   
   break;     // 2 - Jazda do przodu


   
   case 0x144:

   lewo();
    
    break;     // 4 - Skret w lewo

   
   case 0x146:


    prawo();
    
      break;     // 6 - Skret w prawo


  
   case 0x148:

    tyl();
    
      break;     // 8 - Jazda do tylu
      
 
  case 0x140:
  stop();
 
}


}


void loop() {

if (irrecv.decode(&results))

{

  IRtranslate();
}

}
 

 

  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)

Czesc ,

Robot dzialal mi normalnie przez miesiac. W pewnym momencie robot przestal reagowac na komendy.

Jak podlaczylem robota arduino uno przez usb do laptopa. Wymienilem odbiornik podczerwieni. 

Kopiuje opis bledow:

 

Arduino:1.8.13 (Windows Store 1.8.42.0) (Windows 10), Płytka:"Arduino Uno"

Szkic używa 1858 bajtów (5%) pamięci programu. Maksimum to 32256 bajtów.
Zmienne globalne używają 30 bajtów (1%) pamięci dynamicznej, pozostawiając 2018 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów.

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x5e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x5e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x5e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x5e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x5e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x5e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x5e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x5e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x5e
avrdude: stk500_recv(): programmer is not responding
Problem z wgrywaniem na płytkę. Sprawdź http://www.arduino.cc/en/Guide/Troubleshooting#upload w poszukiwaniu sugestii.
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x5e


Ten raport powinien zawierać więcej informacji jeśli w 
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"
 

Edytowano przez Gieneq
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.