• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z ir
#1
Witam. Zaznaczę że jestem początkujący w programowaniu i zabawie z Arduino. Chciałbym rozwiązać problem sterowania za pomocą pilota ir, wszystko opanowałem do zapalania diody jak i gaszenia lecz działa tylko jeden pilot, zmieniałem odbiorniki lecz nic to nie dawało, na innych pilotach  wartość odbieranego sygnału była ffffffffff na każdym przycisku pilota. dodam że próbowałem zmieniać programy lecz jak już udało się odczytać wlasciwy kod to dalej nie udało się już sterować diodami gdyż po wgraniu programu do sterowania nie odczytywał żadnych wartości ir tylko na jednym pilocie z 5 zadziałało prawidłowo. Proszę o pomoc w rozwiązaniu problemu
 
Odpowiedź
#2
Jak masz problem z kodem to pokazujesz ten kod, jakie program IDE, jaka płytka Arduino i opis połączeń - schemat, napisz też z jakich bibliotek korzystasz. W bibliotekach do arduino są przykłady pozwalające identyfikować kod - w IRremote ReceiveDump, trzeba wstępnie rozpoznać czy to jest NEC, SONY czy co tam za protokół, kody mogą być unikatowe, podwójne lub z wartością oznaczającą powtórzenie kodu , potem w gotowym programie trzeba wskazać jakiego trybu się używa. W DUMP jest bardzo duży bufor na przylatujące wartości, tak by niczego nie pominąć, ale w gotowym programie nie należy z tego korzystać, aplikacja zajęła by za dużo zasobów.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
program to arduino ide biblioteka irremote płytka to zamiennik arduino uno

załączam zdjęcie na którym program jak i odczyty ir drugie odczyty to z pilota który działa i jest właściwy kod który mogę używać dalej do sterowania stycznikami a wyżej kod z pierwszego pilota który wygląda jak wygląda. Sprawdziłem w recivedumb niby to nec, pobrałem bibliotekę nec lecz nic to nie zmieniło


Załączone pliki Miniatury
   
 
Odpowiedź
#4
Można dodać zrzut ekranu jako uzupełnienie treści programu, ale do pokazywania kodu skopiuj tekst, wejdź w pełną edycję posta (podgląd), napisz co masz do powiedzenia, kod wklej w jeden znacznik code, potem w drugi to co pokazuje SerialMonitor.
Ten który działa to może i NEC, ale ten który wrzuca EFY to może coś zupełnie innego, te piloty są takie same, kupiłeś je jako moduły do Arduino, czy znalazłeś w starym pudle z gratami i chcesz je sobie zagospodarować?
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
ok dzięki za radę, pilot który działa to pilot z laptopa hp sterujący mediami, każdy inny pilot tzn od radia samochodowego, od klimatyzacji, od telewizora, od lampek choinkowych pokazuje wartość 0xfffffffff. Chciałbym zagospodarować inny pilot gdyż od laptopa jest bardzo niewygodny.
 
Odpowiedź
#6
(18-02-2024, 01:07)Mati94 napisał(a): ok dzięki za radę, pilot który działa to pilot z laptopa hp sterujący mediami, każdy inny pilot tzn od radia samochodowego, od klimatyzacji, od telewizora, od lampek choinkowych pokazuje wartość 0xfffffffff. Chciałbym zagospodarować inny pilot gdyż od laptopa jest bardzo niewygodny.

Różne piloty IR nie muszą być ze sobą kompatybilne - są co najmniej dwa fundamentalne parametry, którymi mogą się różnić.
1. Długość fali IR - coś jak "kolor" światła.
2. Częstotliwość nośna - piloty nie włączają diody przez te milisekundy na stałe - na ten czas dioda miga z pewną częstotliwością nośną. Odbiór stałego sygnału byłby bardzo trudny, uwzględniając "tło" promieniowania np. światło słoneczne. Łatwiej jest odebrać sygnał zmienny kluczowany (takie CW). jest to przebieg zwykle w zakresie 30-40kHz, ale są i wyżej. Odbiornik pilota to nie jest sama fotodioda, ale prosty układ ze wzmacniaczem i filtrem na odpowiednią częstotliwość.
W sumie odbiornik musi być zgrubnie dopasowany do pilota.
 
Odpowiedź
#7
przez recivedumb udało się tyle wyciągnąć z tego pilota 
Cytat:Protocol=RC5 Address=0x0 Command=0x40 Raw-Data=0x0 1 bits MSB first

Send with: IrSender.sendRC5(0x0, 0x40, <numberOfRepeats>);

Raw result in internal ticks (50 us) - with leading gap
rawData[2]:
-54335
+40
Sum: 40
Raw result in microseconds - with leading gap
rawData[2]:
-2716750
+2000
Sum: 2000
Result as internal 8bit ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
uint8_t rawTicks[1] = {52};  // Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received

Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
uint16_t rawData[1] = {2580};  // Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received



Pronto Hex as string
char prontoData[] = "0000 006D 0001 0000 0065 06C3 ";

również udało mi się odczytać kod następującym programem:


Cytat:```

#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;

void setup() {
  Serial.begin(19200);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode()) {
      Serial.print("0x");
      Serial.println(irrecv.decodedIRData.decodedRawData, HEX);
      delay(250);
      irrecv.resume();
      }
}

```

otrzymałem następujące wartości z pilota z który wcześniej wysyłał wartości 0xFFFFFFF:

0xF00F5E87
0xE9165E87
0xCB345E87
0xDF205E87
0xBB445E87

Problem dalej tkwi w tym jak wykorzystać te kody gdyż nadgrywając następujący program płytka wcale nie reaguje z pilotem ( poniżej program): 
Cytat:#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;

void setup() {
  Serial.begin(19200);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {

      switch (results.value) {
        case 0xF00F5E87:
            Serial.println("garaz");
            break;

        }

  irrecv.resume();
  }
}
 
Odpowiedź
#8
Brawo, w szkicu dump ustaliłeś, że masz protokół RC5, nie działa w drugim szkicu, bo mu nigdzie nie napisałeś, że będziesz korzystał z pilota RC5.
Piloty do chińskich zabawek często korzystają z protokołów NEC lub RC5.
Skorzystaj z przykładu SimpleReceiver, gdzie masz pokazane jak wskazać używany protokół, możesz też wskazać dwa, więcej, wtedy do programu jest dodawany protokół:
Kod:
//#define DECODE_DENON        // Includes Sharp
//#define DECODE_JVC
//#define DECODE_KASEIKYO
//#define DECODE_PANASONIC    // the same as DECODE_KASEIKYO
//#define DECODE_LG
#define DECODE_NEC          // Includes Apple and Onkyo
//#define DECODE_SAMSUNG
//#define DECODE_SONY
//#define DECODE_RC5
//#define DECODE_RC6
Wystarczy zakomentować linię NEC i odkomentować linię z RC5, albo tylko odkomentować linię z RC5. Poczytaj też więcej o protokołach IR jeśli chcesz je faktycznie używać.
Przed pisaniem programów do używania warto się nauczyć używać millis zamiast delay.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#9
Czy dobrze zrozumiałem kod na sterowanie stycznikiem ma wyglądać następująco?:

Kod:
#include <IRremote.h>
#define irPin 11
Kod:
#define DECODE_NEC 
Kod:
#define DECODE_RC6
IRrecv irrecv(irPin);
decode_results results;

void setup() {
  Serial.begin(19200);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {

      switch (results.value) {
        case 0xF00F5E87:
            Serial.println("garaz");
            break;

        }

  irrecv.resume();
  }
}
 
Odpowiedź
#10
Jak zaczęło drukować garaz, to jest to dobry początek, teraz naucz się używać millis, mierzyć czas w programie i zarządzać zdarzeniami wraz z jego upływem. Wciśnięcie przycisku może wysłać wiele kodów, trzeba umieć zignorować te niepotrzebne, podobnie jak z drganiem styków.
Nie wiem czemu wybrałeś pin 11, w uC piny mają podstawową funkcję Input/Output cyfrowe, ale niektóre mają dodatkowe, np. w NANO są dwa piny z przerwaniem zewnętrznym, czyli można napisać kod programu wywoływany natychmiast gdy określony stan zaistnieje na tym pinie, ta biblioteka to wykorzystuje i domyślnie preferuje pin 2 jako wejście IR. Na pinie 11 biblioteka może działać gorzej, a ten pin jest cenny dla innych zasobów.
Poza tym są piny do UART, SPI, Analogowe, piny wyjściowe poszczególnych timerów, jak nie musisz korzystać z tych szczególnych funkcji to zostawiasz te piny do wykorzystania w ostateczności, tak by nie zamykać sobie drogi do dodania tej funkcjonalności.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości