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 🙂

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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

 

Link do komentarza
Share on other sites

@jerkoput witam na forum 🙂 Taki błąd oznacza, że nie zainstalowałeś w Arduino odpowiedniej biblioteki, do której link znajduje się w kursie.

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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 :)

Link do komentarza
Share on other sites

@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: reklamacje@botland.com.pl) - na pewno szybko pomogą 🙂

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.