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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.