Paso 6: Suena el timbre Quhwa QH-832AC
Encontré el Quhwa QH-832AC aka QH-C-CE-3V, aka SelectPlus, también conocido como 1-por-uno en una tienda local de segunda mano ("acción"). Existe en negro y en White.It parece que todos los grupos de blanco tienen el mismo código y todos los grupos de negro tienen un separado código 'mismo'. El código está determinado por el mando de bell. Una campana blanca puede ser programada por una perilla negra y viceversa.
Quería que ser capaz de tocar el timbre mi Arduino. Lamentablemente no funcionó mi método habitual al tratar de capturar el código con mi arduino, así que finalmente volvió a un analizador lógico y me encontré los siguientes códigos (Cómo llegué a esta aquí.):
El botón blanco envía el código
010101100101011001011001101010101010
el '1' representa un pulso corto (250-275u seg) y el '0' un pulso largo (950-1000 u seg).
Si luego vemos 'largo-corto' o '01' como un '1' ' y 'corto-largo' como un 0 que esto se convierte en
111011101101000000 o 3BB40
Para hacerlo más visual:
___ '0': _| | (T,3T) _ '1': ___| | (3T,T)
Cuando hice el mismo ejercicio para el botón negro le dio 111100001100110000 = 3 C que 330 parece que los primeros 14 bits son un identificador único de bell y los 4 últimos bytes no tienen ningún significado específico.
Suena la campana para el Arduin necesitamos escribir una rutina que toma número. '111011101101000000' y para cada '1' envía un bajo seguido de una alta con la baja 3 veces más largo que el alto
Para cada '0' envía un bajo seguido de un largo alto
(hay algunas variaciones en la medida mínimos y máximos, pero un factor de 4 parece demasiado alto).
Afortunadamente encontré un pedazo de código que hace exactamente eso (glad darle honores si me acordé de cómo lo conseguí)
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); } }
El timbre en sí mismo es bastante tolerante en el código que te envié. Si yo hubiera programado con el código 1BB40, todavía anillo cuando dispara desde mi arduino pero no cuando se presiona el botón del timbre. Esto tiene sus ventajas si te interesa el Arduino para detectar su timbre pulsado y decidir si sonará la campana o no.
El código en el botón generalmente es el mismo para un lote entero. El código que te di es para fecha código 914. Otras fechas de producción pueden tener diferentes códigos. Para otras fechas que podría ser ayudaron por esta biblioteca.
También, si quieres intentar esto con tu Pi de frambuesa, mira aquí.