Skocz do zawartości

Kurs budowy robotów - #8 - zdalne sterowanie IR (RC5)


Pomocna odpowiedź

@ghost1313 chyba do tej pory nikt nie zgłaszał nam problemu z kółkami, dzięki za sygnał - przekazuję sprawę do sprawdzenia 🙂 Jeśli Twoje kółka są wadliwe to zgłoś reklamację do Botlandu, na pewno wymienią je na nowy komplet 🙂

  • 5 miesiące później...

Dzień dobry, otóż przeszedłem właśnie 8 część kursu budowy robotów o sterowaniu robota pilotem do TV i zastanawia mnie jedno, dlaczego klikając np. 2 która w kursie była przypisana jako jazda do przodu robot jedzie do przodu cały czas, aż do momentu wydania polecenia zatrzymania czy zmiany kierunku jazdy, pomimo iż tylko raz wcisnąłem ten przycisk. Ja myślałem, że żeby robot jechał do przodu cały czas to i cały czas trzeba wciskać dany przycisk, nie rozumiem dlaczego tak nie jest, prosiłbym o wytłumaczenie tego.

@modok340 kurs ma na celu uczenie i podany został przykładowy program, który nie jest trudny w dostosowaniu do własnych potrzeb. Sprawdź czy podczas trzymania przycisku pilot dalej emituje sygnał, czy tylko w momencie kliknięcia - poświęć w kamerę i zobacz czy cały czas miga. Jeżeli tak, to możesz wykorzystać powtarzany sygnał.

  • 7 miesiące później...
(edytowany)

Witam,

Mam problem, w programie jest zapisane że przycisk 2 na pilocie to do przodu a jak klikam to skręca i tak ze wszystkimi jakby się przyciski po przemieniały macie jakieś porady jak z tym poradzić

Nie ważne wystarczyło zamienić 2 za 4 i 8 za 6 i wszystko działa przepraszam za problemy

Edytowano przez Akumulator222
  • Lubię! 1
  • 5 miesiące później...
  • 1 rok później...
C:\Users\jerem\AppData\Local\Temp\.arduinoIDE-unsaved2024020-17228-p97663.0m9z\sketch_jan20a\sketch_jan20a.ino:2:10: fatal error: RC5.h: No such file or directory
 #include <RC5.h>
          ^~~~~~~
compilation terminated.

exit status 1

Compilation error: RC5.h: No such file or directory

 

  • 1 miesiąc później...

Tak przy okazji zdalnego sterowanie IR przetestowałem kilka pilotów: 2 do odbiorników TV i 2 do dekoderów DVBT. Okazało się, że żaden nie współpracuje z protokółem kodowania RC5. Cóż pozostało mi znaleźć obsługiwany protokół dla moich pilotów. W tym przypadku odpowiednim protokołem okazał się NEC i trzeba było zmienić bibliotekę.

#define IR_SMALLD_NECx

#include <IRsmallDecoder.h>

  • Lubię! 1
  • 1 miesiąc później...

Super poradnik, a tu wersja kodu ode mnie z formą przyspieszenia po dłuższym trzymaniu przycisku (zrobiona nie podstawie command, nie toggle) oraz tryb sportowy (przycisk +, zwykly tryb przycisk -)
 

#include <RC5.h>

#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9
#define PWM_MAX 165

#define BUZZER 10
#define LED 13
#define TSOP_PIN 3

#define START_SPEED 40
#define DIFFERENCE_SPEED 20

RC5 rc5(TSOP_PIN);  //Informacja o podłączeniu odbiornika TSOP
byte address;
byte command;
byte toggle;

void setup() {
  //Konfiguracja pinow od mostka H
  pinMode(L_DIR, OUTPUT);
  pinMode(R_DIR, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(R_PWM, OUTPUT);

  //Konfiguracja pozostalych elementow
  pinMode(BUZZER, OUTPUT);
  digitalWrite(BUZZER, 0);  //Wylaczenie buzzera
  pinMode(LED, OUTPUT);
  digitalWrite(LED, 0);  //Wylaczenie diody

  Serial.begin(9600);
}

int Speed = START_SPEED;
byte lastToggle = 0;
byte lastCommand = 255;

bool SportMode = false;

void loop() {
  if (rc5.read(&toggle, &address, &command)) {

    switch (command) {

      case 1:
        Speed = acceleration();               // Skret lewy skos
        leftMotor(Speed - DIFFERENCE_SPEED);   
        rightMotor(Speed);
        break;

      case 2:                    //Do przodu
        Speed = acceleration();   
        leftMotor(Speed);         
        rightMotor(Speed);
        break;

      case 3:
        Speed = acceleration();  // Skret prawy skos
        leftMotor(Speed);         
        rightMotor(Speed - DIFFERENCE_SPEED);
        break;

      case 4:                    //Obrót w lewo
        Speed = acceleration();   
        leftMotor(-Speed);        
        rightMotor(Speed);
        break;

      case 5:  //STOP
        stopMotors();
        break;

      case 6:  //Obrót w prawo
        acceleration();
        leftMotor(Speed);
        rightMotor(-Speed);
        break;

      case 7:                                  
        Speed = acceleration();                // Skret lewy skos wstecz
        leftMotor(-Speed + DIFFERENCE_SPEED);   
        rightMotor(-Speed);
        break;

      case 8:                    //Do tyłu
        Speed = acceleration();   
        leftMotor(-Speed);        
        rightMotor(-Speed);
        break;

      case 9:
        Speed = acceleration();  // Skret prawy skos wstecz
        leftMotor(-Speed);        
        rightMotor(-Speed + DIFFERENCE_SPEED);
        break;

      case 12:
        buzzer();
        break;

      case 32:  //SportMode
        SportMode = 1;
        buzzer();
        break;

      case 33:
        SportMode = 0;
        buzzer();
        break;
    }
  }
}

void leftMotor(int V) {
  if (V > 0) {  //Jesli predkosc jest wieksza od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 0);  //Kierunek: do przodu
    analogWrite(L_PWM, V);   //Ustawienie predkosci
  } else {
    V = abs(V);  //Funkcja abs() zwroci wartosc V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 1);  //Kierunek: do tyłu
    analogWrite(L_PWM, V);   //Ustawienie predkosci
  }
}

void rightMotor(int V) {
  if (V > 0) {  //Jesli predkosc jest wieksza od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 0);  //Kierunek: do przodu
    analogWrite(R_PWM, V);   //Ustawienie predkosci
  } else {
    V = abs(V);  //Funkcja abs() zwroci wartosc V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 1);  //Kierunek: do tyłu
    analogWrite(R_PWM, V);   //Ustawienie predkosci
  }
}

int acceleration() {
  if (SportMode) {
    Speed = 95;
  } else {
    if (command != lastCommand) {
      Speed = START_SPEED;   
      lastCommand = command;  
    } else if (Speed >= 90) {
      Speed = START_SPEED;
    } else {
      Speed++;
    }
  }

  return (Speed);
}
void stopMotors() {
  analogWrite(L_PWM, 0);  //Wylaczenie silnika lewego
  analogWrite(R_PWM, 0);  //Wylaczenie silnika prawego
}

void buzzer() {
  digitalWrite(BUZZER, 1);
  delay(500);
  digitalWrite(BUZZER, 0);
}

 

  • Lubię! 1
  • 3 miesiące później...
(edytowany)

Witam.

Mam problem z odbiornikiem.

Gdy naciskam na pilocie jakiś przycisk odbiornik nie reaguje.

Pilot działa na kamerce.

Przeglądałem forum i nie mam tego pilota:
https://botland.com.pl/piloty/7395-pilot-uniwersalny-z-kodowaniem-rc5-5900804048374.html

 

Sprawdziłem napięcie na czujniku i jest ładnie 5v.

#define TSOP 3
#include <RC5.h>

RC5 rc5(TSOP);

byte address;
byte command;
byte toggle;

void setup() {
  Serial.begin(9600);

}

void loop() {
  if (rc5.read(&toggle, &address, &command))
  {
    Serial.print("A:");
    Serial.print(address);
    Serial.print(" K:");
    Serial.print(command);
    Serial.print(" T:");
    Serial.println(toggle);
  }

}

 

Edytowano przez sp2013
Dnia 1.08.2024 o 09:21, sp2013 napisał:

Niestety nie masz zarejestrowanego zestawu do tego kursu, więc nie wiem jaki sprzęt dokładnie posiadasz. Jeśli nie masz takiego pilota (jak ten linkowany) to co dokładnie posiadasz?

14 godzin temu, Treker napisał:

Niestety nie masz zarejestrowanego zestawu do tego kursu, więc nie wiem jaki sprzęt dokładnie posiadasz. Jeśli nie masz takiego pilota (jak ten linkowany) to co dokładnie posiadasz?

Już rejestruję ;) zapomniałem.

Mam tego samego pilota jak na zdjęciach ale niech Pan dla pewności sprawdzi :)

@sp2013 jeśli korzystasz z płytki i pilota, które były w zestawie i uruchamiasz kod z kursu, a coś nie działa to możliwe, że niestety jest jakiś problem sprzętowy (z odbiornikiem IR lub z pilotem). Ciężko będzie to zdalnie zweryfikować. Zgłoś proszę tę sprawę do Botlandu (pisząc na adres: [email protected]) - na pewno szybko pomogą 🙂

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