Stap 6: Rinkelen de de deurbel Quhwa QH-832AC
Ik vond de Quhwa QH-832AC aka QH-C-CE-3V, aka SelectPlus, aka 1-door-één in een lokale zuinigheid winkel ("actie"). Het bestaat in het zwart en in White.It lijkt dat alle witte sets dezelfde code hebben en alle zwarte sets een aparte 'dezelfde' code hebben. De code wordt bepaald door de bell-knop. Een witte klok kan geprogrammeerd worden door een zwarte knop en vice versa.
Ik wilde dat mijn Arduino zitten kundig voor ring van de deurbel. Helaas mijn reguliere aanpak door te proberen te ruiken de code met mijn arduino werkte niet, dus uiteindelijk ik teruggekeerd naar een logic analyzer en vond de volgende codes (hoe ik deze kijk hier.):
De witte knop stuurt de code
010101100101011001011001101010101010
de '1' vertegenwoordigt een korte puls (250-275u sec) en de '0' een lange puls (950-1000 u sec).
Als we dan 'long-short' of '01' als een '1' ' en 'korte-lange' als een ' 0 dan zien wordt dit
111011101101000000 of 3BB40
Om het te maken meer visueel:
___ '0': _| | (T,3T) _ '1': ___| | (3T,T)
Toen ik dezelfde oefening voor de zwarte knop die gaf 111100001100110000 = 3 C die 330 het lijkt dat de eerste 14 bits vormen een unieke bell-id en de laatste 4 bytes hebben geen specifieke betekenis.
Om de Arduin aanbellen moeten we schrijven van een routine die neemt de nummer. '111011101101000000' en voor elke '1' stuurt een lage gevolgd door een hoog met de lage 3 keer langer dan de hoge
Voor elke '0' stuurt het een gevolgd door een lange hoog laag
(er is sommige variantie in het gemeten DIEPTEPUNTEN en hoogtepunten, maar een factor 4 lijkt te hoog).
Gelukkig vond ik een stukje code dat doet precies dat (graag eer geven als ik herinnerde me hoe ik het)
const byte rfPin=7; void setup() { SelectPlus(0x3BB40);// White //SelectPlus(0x3C330);// Black } void loop() { //SelectPlus_Send(0x3BB40);// 11 1011 1011 0100 0000 } void SelectPlus(uint32_t address) { int pulseWidth= 325;// Pulse breedte in uS byte repeat = 16; // repeat send uint32_t databit; uint32_t mask = 0x10000; uint32_t sendbuff; for (byte j = 0; j <= repeat; j++) { sendbuff=address; // send 3 HIGH pulses for syncing digitalWrite(rfPin, HIGH); delayMicroseconds(pulseWidth * 3); // Send command for (int i = 0; i < 18;i++) { // 18bits databit = sendbuff & mask; // Get most left bit sendbuff = (sendbuff << 1);// Shift left if (databit != mask) { // Write 0 digitalWrite(rfPin, LOW); delayMicroseconds(pulseWidth); digitalWrite(rfPin, HIGH); delayMicroseconds(pulseWidth * 3); } else { // Write 1 digitalWrite(rfPin, LOW); delayMicroseconds(pulseWidth * 3); digitalWrite(rfPin, HIGH); delayMicroseconds(pulseWidth); } } digitalWrite(rfPin, LOW); delayMicroseconds(pulseWidth * 16); } }
De Gong zelf is heel tolerant in de code die ik heb verzonden. Als ik zou het met de code 1BB40 hebt geprogrammeerd, zou het nog steeds ring wanneer geactiveerd uit mijn arduino, maar niet wanneer de bell-knop wordt ingedrukt. Dit heeft zijn voordelen als u wilt dat de Arduino te detecteren uw deurbel gedrukt en beslist als het zal de bel rinkelen of niet.
De code in de knop is meestal hetzelfde voor een hele batch. De code die ik heb gegeven is voor datumcode 914. Andere productie datums wellicht verschillende codes. Voor andere datums opnemen die u misschien wel door deze bibliotheek geholpen.
Ook, als u proberen dit met je Raspberry Pi wilt, kijk hier.