Med 433 MHz fjärrstyrda strömbrytare på Arduino (6 / 9 steg)
Steg 6: Ringning på dörrklockan Quhwa QH-832AC
Jag hittade den Quhwa QH-832AC aka QH-C-CE-3V, aka SelectPlus, aka 1 i taget i en lokal sparsamhet butik ("handling"). Det finns i svart och i White.It verkar som alla vita set har samma kod och alla svart set har en separat "samma" kod. Koden bestäms av sätta en klocka på vredet. En vit klocka kan programmeras av en svart knopp och vice versa.
Jag ville ha min Arduino att kunna ringa på dörrklockan. Tyvärr fungerade inte min vanliga strategi genom att försöka vädra koden med min arduino, så småningom jag återgått till en logik analyzer och hittade följande koder (hur jag fick denna utseendehär.):
Den vita knappen skickar koden
010101100101011001011001101010101010
'1' representerar en kort puls (250-275u SEK) och '0' en lång puls (950-1000 u SEK).
Om vi sedan ser 'lång-kort' eller '01' som en '1' ' och "kort-lång" som en ' 0 än blir detta
111011101101000000 eller 3BB40
Att göra det mer visuellt:
___
'0': _| | (T, 3T)
_
'1': ___| | (3T, T)
När jag gjorde samma övning för den svarta knappen som gav 111100001100110000 = 3 C 330 det verkar som de första 14 bitarna är en unik bell identifierare och de senaste 4 byte har ingen specifik betydelse.
För att få Arduin ringer på behöver vi skriva en rutin som tar nummer. "111011101101000000" och för varje 1 skickar en låg följt av en hög med låg 3 gånger längre än höga
För varje '0' skickar den en låg följt av en lång hög
(det finns vissa skillnader den uppmätta DALAR och toppar, men en faktor 4 verkar för hög).
Lyckligtvis hittade jag en bit kod som gör exakt det (glad att ge heder om jag kom ihåg hur jag fick det)
CONST byte rfPin = 7.
void setup()
{
SelectPlus(0x3BB40); / / vit
SelectPlus(0x3C330); / / svart
}
void loop()
{
SelectPlus_Send(0x3BB40); / / 11 1011 1011 0100 0000
}
void SelectPlus(uint32_t address) {
int pulseWidth = 325; / / Pulse breedte i oss
byte upprepa = 16. Upprepa skicka
uint32_t databit;
uint32_t mask = 0x10000;
uint32_t sendbuff;
för (byte j = 0; j < = upprepa; j ++) {
sendbuff = adress;
Skicka 3 hög pulser för synkronisering
digitalWrite (rfPin, hög);
delayMicroseconds(pulseWidth * 3);
Skicka-kommando
för (int jag = 0; jag < 18; i ++) {/ / 18bits
databit = sendbuff & mask; Får mest vänster lite
sendbuff = (sendbuff << 1); / / skift vänster
om (databit! = mask) {/ / skriva 0
digitalWrite (rfPin, låg);
delayMicroseconds(pulseWidth);
digitalWrite (rfPin, hög);
delayMicroseconds(pulseWidth * 3);
} annat {/ / skriva 1
digitalWrite (rfPin, låg);
delayMicroseconds(pulseWidth * 3);
digitalWrite (rfPin, hög);
delayMicroseconds(pulseWidth);
}
}
digitalWrite (rfPin, låg);
delayMicroseconds(pulseWidth * 16);
}
}
Klockljudet själv är ganska tolerant i koden jag skickade. Om jag skulle har programmerat det med kod 1BB40, skulle det fortfarande ringer när aktiveras från min arduino men inte att sätta en klocka på vredet trycks. Detta har sina fördelar om du vill att Arduino att upptäcka din dörrklockan intryckt och besluta om det ringer på klockan eller inte.
Koden för knappen är oftast densamma för en hela partiet. Jag gav koden är för datumkod 914. Övriga produktion datum kan ha olika koder. För andra datum kan du bli hjälpt av detta bibliotek.
Om du vill prova det här med din Raspberry Pi, titta även här.