Skocz do zawartości
hugo1199

Arduino sterowanie RF przekaźnikiem

Pomocna odpowiedź

Napisano (edytowany)

Cześć. Jestem tu dlatego że sie poddałem...

Plan był taki aby za pomocą pilota 433Mhz sterować pprzekaźnikiem 2ch. Gdy mi już coś wyszło po naciśnięciu któregoś z 2 przycisków przekaźnik zaczyna wariować (załącza sie i wyłącza z 2 razy na sekunde). Szukałem gotowych kodów by znaleźć swój błąd lecz żaden nawet nie załączał przekaźnika. Niestety chce wykorzystać tylko jedno arduino nano/uno które bedzie sterowane pilotem. Może nie tyle o gotowe programy co o naprowadzenie jak to ugryźć.

Posiadam: 

przetwornica (posiadam tez 4ch ale i tak chce wykorzystać 2)

Moduł+pilot

Arduino nano/uno

#include <rm4.h>



static const int kEnablePin = 12;


static const int kData0Pin = 7;
static const int kData1Pin = 8;
static const int kData2Pin = 16;
static const int kData3Pin = 13;
const int relay1 =  10;             
const int relay2 =  11;             
const int relay3 =  14; 
const int relay4 =  15; 

RM4 remote(kData0Pin, kData1Pin, kData2Pin, kData3Pin);

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

  
  pinMode(kEnablePin, OUTPUT);
  digitalWrite(kEnablePin, HIGH);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);

}

void loop() {
  
  const int button_code = remote.buttonCode();
   if (button_code == 8) {                      
    digitalWrite(relay1, LOW);                    
    delay (2000);                                 
  } else {                                        
    digitalWrite(relay1, HIGH);                   
  }
   if (button_code == 2) {                     
    digitalWrite(relay2, LOW);                   
    delay (2000);                                 
  } else {                                        
    digitalWrite(relay2, HIGH);                   
  }
   if (button_code == 1) {                     
    digitalWrite(relay3, LOW);                  
    delay (2000);                                 
  } else {                                        
    digitalWrite(relay3, HIGH);                   
  }
   if (button_code == 4) {                     
    digitalWrite(relay4, LOW);                    
    delay (2000);                                 
  } else {                                        
    digitalWrite(relay4, HIGH);                 
  }


}

Z góry dzięki za pomoc

 

Edytowano przez hugo1199

Udostępnij ten post


Link to post
Share on other sites
2 godziny temu, hugo1199 napisał:

aby za pomocą pilota 433Mhz sterować przetwornicą 2ch

  1. Nie masz żadnej przetwornicy tylko moduł przekaźników i to przekaźnikami chcesz sterować.
  2. Co to znaczy "sterować"? Czy możesz opisać jak chcesz by to działało? Czy naciśnięcie przycisku powino powodować załączenie przekaźnika, który będzie trzymał tak długo jak długo będziesz wciskał przycisk? Czy może przycisk nr 1 ma włączać, a przycisk nr 2 wyłączać przekaźnik nr 1? I to samo z przyciskami  3 i 4 i przekaźnikiem nr 2?
  3. Czy kod który wrzuciłeś jakoś reaguje na przyciski nadajnika? Bo jeśli tak, to jesteś prawie w domu.
  4. Narysuj jak to podłączyłeś (plus zdjęcie?) i z czego to zasilasz.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

1. Poprawione...

2. Docelowo: 1 załącza 1 kanał przekaźnika - kolejne naciśnięcie wyłącza. Analogicznie z przyciskiem numer dwa.

3. Reaguje. Po wciśnięciu któregokolwiek przycisku przekaźnik załącza się i wyłącza ~3 razy w ciagu sekundy i nie da sie tego wyłączyć.

4. Arduino zasilam z USB a przekaźnik z osobnego zasilacza (zwarte GND)

Mniej więcej tak to wygląda 

modul-radiowy-4-kanaly-433mhz-pilot.thumb.png.120e150b0012fe9d1aaeef34199ba986.png

 

 

modul-radiowy-4-kanaly-433mhz-pilot.png

Edytowano przez hugo1199

Udostępnij ten post


Link to post
Share on other sites

Wydłuż sobie komendy np. żeby reakcja na sygnał z pilota była po odebraniu 10 poprawnych ramek z pilota inaczej ignoruj. Poza tym jaką masz tam antenkę? Ten odbiornik to delikatnie mówiąc lipa, zbiera zakłócenia co nie znaczy, że nie da się z tego korzystać. Miałem kiedyś taki. Od anteny bardzo dużo zależy w tym przypadku a nawet przy dobrej antenie i tak gubi znaki więc trzeba mu to powtarzać. 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Mam taki drucik miedziany chyba 0,5mm^2  ~50mm. Zrobię większą i zobacze czy działa.

 

Pytanie jak to wydłużyć żeby było tak jak należy. 

Nie jestem specjalistą. Raczej amatorem który naoglądał sie dziwnych filmików na yt i teraz chce zdziałać cuda...

 

Edytowano przez hugo1199

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Kod jest absolutnie błędny. Masz coś takiego:
 

jeśli naciśnięto przycisk 1, załącz przekaźnik i poczekaj dwie sekundy nie reagując na nic
a jeśli nie naciśnięto przycisku 1, wyłącz przekaźnik

Na pewno tak chciałeś?

 

Edytowano przez ethanak
  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

To dlatego gdy podłącze wszystko (aktualnie zmieniłem numery pinów) to się załącza samo z siebie co 2s...

 

W takim razie jak to naprawić? W sensie chodzi o to:

Gdy dostanie sygnał na DATA1 (9pin) wysyłało napięcie 5V lub zwierało GND na pinie 14?

EDIT

Skasowałem Delay

Z tego co zauważyłem mierząc napięcia. Między GND a DATA1/2 wsytępuje spadek z 1,7V do 0 po wciśnięciu przycisku. 

Brak reakcji między GND a IN1/2. Nie podaje wiec napięcia na styki przekaźnika (+5DC/GND).

Program jest zły i ogólnie tory sa złe...

Wcześniej mylnie powiązałem załączenie przekaźnika z naciśnięciem przycisku

 

W ogóle dlaczego między GND a DATA jest 1,7V? Stan niski jest chyba poniżej 2,5V a wysoki do 5...

EDITv2

int przekaznik1 = 10;               //przekaznik1 podłączamy do pinu 10
int przekaznik2 = 11;               //przekaznik2 podłączamy do pinu 11
 
int przycisk1 = 8;                  //przycisk1 podłączamy do pinu 8
int przycisk2 = 9;                  //przycisk2 podłączamy do pinu 9
 
bool sp1 = true;                    //zmienna boolowska do steowania stanem przekaznika1
bool sp2 = true;                    //zmienna boolowska do steowania stanem przekaznika2
 
 
void setup() 
{
 
pinMode(przekaznik1, OUTPUT);       //przekaznik1 jako wyjście
pinMode(przekaznik2, OUTPUT);       //przekaznik2 jako wyjście
pinMode(przycisk1, INPUT_PULLUP);   //przycisk1 jako wejście 
pinMode(przycisk2, INPUT_PULLUP);   //przycisk2 jako wejście 
 
digitalWrite(przekaznik1, HIGH);    //stan początkowy przekaznika1-wysoki
digitalWrite(przekaznik2, HIGH);    //stan początkowy przekaznika2-wysoki
 
}
 
void loop() 
{
 
  if(digitalRead(przycisk1) == 0)   //jezeli przycisk1 zostal wcisniety:
  {
    
  sp1=!sp1;                         //zaneguj zmienną sp1
  digitalWrite(przekaznik1, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
  delay(150);                       //odczekaj 150ms
  
    
  }
  
  if(digitalRead(przycisk2) == 0)   //jezeli przycisk1 zostal wcisniety:
  {
    
  sp2=!sp2;                         //zaneguj zmienną sp2
  digitalWrite(przekaznik2, sp2);   //stan przekaźnika ustaw taki jak jest stan sp1
  delay(150);                       //odczekaj 150ms
    
  }
 
}

Bardzo prosty kod nawet jak na mnie 😄

Działa... Nie tak jak chce ale działa co jest chyba przełomem w całej sprawie.

Po wcisnięciu byle jakiego przycisku (z 4 na pilocie) przekaźnik dostaje sygnał na kanał numer jeden. Kolejne przyciśnięcie daje sygnał na kanał numer dwa. Następnie przycisk wyłącza kanał 1 a następnie dwa.

 

Pytanie jak odczytać teraz kody przycisków i przypisać  do poszczególnych zadań tak aby to działało.

Edytowano przez hugo1199

Udostępnij ten post


Link to post
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!

Gość
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...