====== Dzwonek, dzwonek… ======
Drobny hacking radiowych modułów komunikacyjnych pod koniec nighthacka, czyli jak stworzyć własny pilot do bezprzewodowego dzwonka.
===== Moduł komunikacyjny =====
Nadajnik to FS1000A, tani moduł sprzedawany w komplecie z odbiornikiem za 7,20zł na Allegro. Co ciekawe nie ma żadnego konkretnego, dedykowanego chipa. Jego konstrukcja to oscylator oparty na tranzystorze NPN o paśmie przenoszenia 1GHz podłączony pod filtr SAW fabrycznie zestrojony na 433.92MHz. Do tego dochodzi garstka cewek i kondensatorów w celu filtracji i dopasowania. Moduł ten ma jeszcze jeden tranzystor który służy tylko do kluczowania. Schemat ideowy (nadajnik o bardzo podobnej konstrukcji).
{{:blog:dzwonek-dzwonek:nadajnik-300x300.jpg?nolink|}}
{{:blog:dzwonek-dzwonek:schemat-nadajnika-250x300.jpg?nolink|}}
===== Podłączenie nadajnika do Arduino =====
Samo podłączenie jest bardzo proste. Zasilanie do zasilania, pin kluczujący modułu do pinu 13 na Arduino.
===== Odbiornik =====
{{:blog:dzwonek-dzwonek:433m-superregeneration-wireless-transmitter-and-receiver-module-450x320-450x320.jpg?nolink|}}
Zestaw komunikacji bezprzewodowej – po lewej nadajnik, po prawej odbiornik
Odbiornik mimo posiadania 4 pinów, używa tylko 3. Zasilanie podłączyliśmy do Arduino wyjście danych do oscyloskopu, by widzieć co jest nadawane przez orginalny pilot.
===== Oryginalny pilot =====
Wizualnie stwierdziliśmy, że wygląda to na kodowanie Manchester, paczki 24-bitów co 18ms. Nie dekodowaliśmy kodu na hexy, ale podyktowałem Wiktorowi długości sygnałów trybem krótki/długi (500 µS, 1500 µS)
===== Własny pilot =====
Potem napisałem sketcha w Arduino który sygnał ten odtwarzał. Poprawiłem go parę razy, aż dzwonek zadzwonił.
<code>
int out = 13;
void setup() {
pinMode(out, OUTPUT);
}
char* code = "kdkdkdkddkkdkddkdkkddkkdkdkddkdkkdkddkdkkdkddkk";
void loop() {
boolean state = true;
char ch = 0;
int i=0;
digitalWrite(out, LOW);
while(ch=code[i++]) {
digitalWrite(out, state ? HIGH : LOW);
if(ch == 'k') {
delayMicroseconds(500);
} else
if(ch=='d') {
delayMicroseconds(1500);
}
state=!state;
}
digitalWrite(out, LOW);
delay(20);
}
</code>
====== Autoindex ======
{{indexmenu>blog:dzwonek-dzwonek}}