Digitales Schlüsselbrett mit iButtons und Arduino

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Mr.Burns
Beiträge: 73
Registriert: 18.09.2010, 14:33

Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von Mr.Burns » 09.04.2015, 16:35

Hallo zusammen,

ich habe mir ein digitales Schlüsselbrett mit magnetischen iButton gebaut.
Damit kann recht einfach eine Anwesenheit erkannt werden...

Die Idee stammt nicht von mir sondern aus vom KNX-User-Forum http://knx-user-forum.de/forum/supportf ... -ansteuern

Darauf aufmerksam gemacht hat mich dieser Artikel: http://homematic-forum.de/forum/viewtop ... 20#p184704.

Verwendet habe ich:

5 magnetische iButton Holder
5 magnetische iButtons (versch. Farben)
5 4k7 Ohm widerstände (Reichelt)
1 Duo LED (Reichelt)
2 1k Ohm widerstand (Reichel)
1 Arduino mini pro (Wattenrott) kann aber jeder china klon (3$) verwendet werden...
den hatte ich noch rumfliegen und er passte ins das Schlüsselbrett.
1 Schlüsselbrett (ich hab ein 40x40 Buche Kantholz verwendet)
5 Eingänge auf der CCU (ich hatte noch jede Menge Schaltzustandseingänge frei
....deswegen hab ich mich nicht mit der ethernet Anbindung auseinander gesetzt http://homematic-forum.de/forum/viewtop ... 31&t=19304.

Die 1-wire iButton hier bezogen: http://shop.wiregate.de/ibutton.html (schnelle Lieferung. Zur Zeit ausverkauft)
Alternativ gibt es diese günstig hier http://demiurg.pl/ibutton-readers-with-bicolour-led (keine eigenen Erfahrungen)

Die magnetischen Halter verdrahten und an die Eingänge 2-6 anschließen (4k7 Pull-up widerstand nicht vergessen)
Die Ausgänge für die Homematic an die Pins 7-11 (OpenCollector)
Die Status Duo LED an die Ausgänge 12 und 13 (Ich hab nen 1k widerstand benutzt...bei 5V DC gehen auch 200 Ohm, ich wollte es etwas dezenter.

Dann bekommt der Arduino noch 5V DC (Der Minus sollte das gleiche Potential wie die Homematic haben)

Die 1-Wire Libary downloaden und installieren http://www.hacktronics.com/code/OneWire.zip (wenn noch nicht vorhanden)
Den Arduino mit folgendem Script bespielen:

Code: Alles auswählen

#include <OneWire.h>

OneWire  ds_1(2);                        // Pin des 1-Wire Transponders
OneWire  ds_2(3);                        // Pin des 1-Wire Transponders
OneWire  ds_3(4);                        // Pin des 1-Wire Transponders
OneWire  ds_4(5);                        // Pin des 1-Wire Transponders
OneWire  ds_5(6);                        // Pin des 1-Wire Transponders

byte addr_1[8];                           // adresse des Transponders
byte addr_2[8];                           // adresse des Transponders
byte addr_3[8];                           // adresse des Transponders
byte addr_4[8];                           // adresse des Transponders
byte addr_5[8];                           // adresse des Transponders

int but_1[6] = {0,0,XXX,XXX,XXX,XXX};      // Serien Nr des roten Transponder       BENUTZER EINGABE
int but_2[6] = {0,0,XXX,XXX,XXX,XXX};        // Serien Nr. des schwarzen Transponder  BENUTZER EINGABE
int but_3[6] = {0,0,XXX,XXX,XXX,XXX};      // Serien Nr. des blauen Transponder     BENUTZER EINGABE
int but_4[6] = {0,0,XXX,XXX,XXX,XXX};        // Serien Nr. des gruenen Transponder    BENUTZER EINGABE
int but_5[6] = {0,0,XXX,XXX,XXX,XXX};      // Serien Nr. des gelben Transponder     BENUTZER EINGABE

int keyStatus_1, keyStatus_2, keyStatus_3, keyStatus_4, keyStatus_5 = 0;   // Transponder vorhanden (oder nicht)

boolean T1_ds1, T2_ds1, T3_ds1, T4_ds1, T5_ds1 = 0;                        // Merker Transponder an Eingang 1 erkannt
boolean T1_ds2, T2_ds2, T3_ds2, T4_ds2, T5_ds2 = 0;                        // Merker Transponder an Eingang 2 erkannt
boolean T1_ds3, T2_ds3, T3_ds3, T4_ds3, T5_ds3 = 0;                        // Merker Transponder an Eingang 3 erkannt
boolean T1_ds4, T2_ds4, T3_ds4, T4_ds4, T5_ds4 = 0;                        // Merker Transponder an Eingang 4 erkannt
boolean T1_ds5, T2_ds5, T3_ds5, T4_ds5, T5_ds5 = 0;                        // Merker Transponder an Eingang 5 erkannt


void setup(void) {                         // Hardware funktionen festlegen
  //Serial.begin(9600);                    // Ausgabe Serieller Monitor initialisieren (zur indentifikation der Transpondernummer)
  pinMode(7, OUTPUT);                      // Pin 7 als Ausgang deklariert (roter Transponder)
  pinMode(8, OUTPUT);                      // Pin 8 als Ausgang deklariert (schwarzer Transponder)
  pinMode(9, OUTPUT);                      // Pin 9 als Ausgang deklariert (blauer Transponder)
  pinMode(10, OUTPUT);                     // Pin 10 als Ausgang deklariert (gruener Transponder)
  pinMode(11, OUTPUT);                     // Pin 11 als Ausgang deklariert (gelber Transponder)
  pinMode(12, OUTPUT);                     // Pin 12 als Ausgang deklariert (status LED ROT - nicht anwesend)
  pinMode(13, OUTPUT);                     // Pin 13 als Ausgang deklariert (status LED GRUEN - anwesend)
}

void loop(void) {                          // Main Programm
  getKeyCode();                            // Aufruf Unterprogramm
  
 if(keyStatus_1==1){                       // Ist ein Transponder vorhanden -> 
      /*Serial.println("");
      byte i;                              // Aufbereiten der Serien Nr. zur Ausgabe an Seriellen Monitor (indentifikation)
      for( i = 5; i >0; i--) {
           Serial.print(" : ");            // Trennzeichen zwischen bytes
           Serial.print(addr_1[i], DEC);   // Ausgabe Serien Nr. auf Serien Monitor
      }*/                                   
      if(addr_1[1] == but_1[5] && addr_1[2] == but_1[4] && addr_1[3] == but_1[3] && addr_1[4] == but_1[2]){  // vergleiche Serien Nr. des schwarzen Transponders
      T1_ds1=1;} else {T1_ds1=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des schwarzen Transponder nicht uebereinstimmt
      
      if(addr_1[1] == but_2[5] && addr_1[2] == but_2[4] && addr_1[3] == but_2[3] && addr_1[4] == but_2[2]){  // vergleiche Serien Nr. des roten Transponders
      T2_ds1=1;} else {T2_ds1=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des roten Transponder nicht uebereinstimmt
      
      if(addr_1[1] == but_3[5] && addr_1[2] == but_3[4] && addr_1[3] == but_3[3] && addr_1[4] == but_3[2]){  // vergleiche Serien Nr. des blauen Transponders
      T3_ds1=1;} else {T3_ds1=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des blauen Transponder nicht uebereinstimmt
      
      if(addr_1[1] == but_4[5] && addr_1[2] == but_4[4] && addr_1[3] == but_4[3] && addr_1[4] == but_4[2]){  // vergleiche Serien Nr. des gruenen Transponders
      T4_ds1=1;} else {T4_ds1=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gruenen Transponder nicht uebereinstimmt
      
      if(addr_1[1] == but_5[5] && addr_1[2] == but_5[4] && addr_1[3] == but_5[3] && addr_1[4] == but_5[2]){  // vergleiche Serien Nr. des gelben Transponders
      T5_ds1=1;} else {T5_ds1=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gelben Transponder nicht uebereinstimmt  
  }
    else {T1_ds1=0;T2_ds1=0;T3_ds1=0;T4_ds1=0;T5_ds1=0;}                                                     // Alle angemeldeten Transponder an diesem Pin zuruecksetzen (keyStatus==0)                                                 
  

 if(keyStatus_2==1){                      // Ist ein Transponder vorhanden -> 
      if(addr_2[1] == but_1[5] && addr_2[2] == but_1[4] && addr_2[3] == but_1[3] && addr_2[4] == but_1[2]){  // vergleiche Serien Nr. des schwarzen Transponders
      T1_ds2=1;} else {T1_ds2=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des schwarzen Transponder nicht uebereinstimmt
      
      if(addr_2[1] == but_2[5] && addr_2[2] == but_2[4] && addr_2[3] == but_2[3] && addr_2[4] == but_2[2]){  // vergleiche Serien Nr. des roten Transponders
      T2_ds2=1;} else {T2_ds2=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des roten Transponder nicht uebereinstimmt
      
      if(addr_2[1] == but_3[5] && addr_2[2] == but_3[4] && addr_2[3] == but_3[3] && addr_2[4] == but_3[2]){  // vergleiche Serien Nr. des blauen Transponders
      T3_ds2=1;} else {T3_ds2=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des blauen Transponder nicht uebereinstimmt
      
      if(addr_2[1] == but_4[5] && addr_2[2] == but_4[4] && addr_2[3] == but_4[3] && addr_2[4] == but_4[2]){  // vergleiche Serien Nr. des gruenen Transponders
      T4_ds2=1;} else {T4_ds2=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gruenen Transponder nicht uebereinstimmt
      
      if(addr_2[1] == but_5[5] && addr_2[2] == but_5[4] && addr_2[3] == but_5[3] && addr_2[4] == but_5[2]){  // vergleiche Serien Nr. des gelben Transponders
      T5_ds2=1;} else {T5_ds2=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gelben Transponder nicht uebereinstimmt  
  }
    else {T1_ds2=0; T2_ds2=0; T3_ds2=0; T4_ds2=0; T5_ds2=0;}                                                 // Alle angemeldeten Transponder an diesem Pin zuruecksetzen (keyStatus==0)
         
  
 if(keyStatus_3==1){                      // Ist ein Transponder vorhanden -> 
      if(addr_3[1] == but_1[5] && addr_3[2] == but_1[4] && addr_3[3] == but_1[3] && addr_3[4] == but_1[2]){  // vergleiche Serien Nr. des schwarzen Transponders
      T1_ds3=1;} else {T1_ds3=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des schwarzen Transponder nicht uebereinstimmt
      
      if(addr_3[1] == but_2[5] && addr_3[2] == but_2[4] && addr_3[3] == but_2[3] && addr_3[4] == but_2[2]){  // vergleiche Serien Nr. des roten Transponders
      T2_ds3=1;} else {T2_ds3=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des roten Transponder nicht uebereinstimmt
      
      if(addr_3[1] == but_3[5] && addr_3[2] == but_3[4] && addr_3[3] == but_3[3] && addr_3[4] == but_3[2]){  // vergleiche Serien Nr. des blauen Transponders
      T3_ds3=1;} else {T3_ds3=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des blauen Transponder nicht uebereinstimmt
      
      if(addr_3[1] == but_4[5] && addr_3[2] == but_4[4] && addr_3[3] == but_4[3] && addr_3[4] == but_4[2]){  // vergleiche Serien Nr. des gruenen Transponders
      T4_ds3=1;} else {T4_ds3=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gruenen Transponder nicht uebereinstimmt
      
      if(addr_3[1] == but_5[5] && addr_3[2] == but_5[4] && addr_3[3] == but_5[3] && addr_3[4] == but_5[2]){  // vergleiche Serien Nr. des gelben Transponders
      T5_ds3=1;} else {T5_ds3=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gelben Transponder nicht uebereinstimmt  
  }
  else {T1_ds3=0; T2_ds3=0; T3_ds3=0; T4_ds3=0; T5_ds3=0;}                                                   // Alle angemeldeten Transponder an diesem Pin zuruecksetzen (keyStatus==0)
  

 if(keyStatus_4==1){                      // Ist ein Transponder vorhanden -> 
      if(addr_4[1] == but_1[5] && addr_4[2] == but_1[4] && addr_4[3] == but_1[3] && addr_4[4] == but_1[2]){  // vergleiche Serien Nr. des schwarzen Transponders
      T1_ds4=1;} else {T1_ds4=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des schwarzen Transponder nicht uebereinstimmt
      
      if(addr_4[1] == but_2[5] && addr_4[2] == but_2[4] && addr_4[3] == but_2[3] && addr_4[4] == but_2[2]){  // vergleiche Serien Nr. des roten Transponders
      T2_ds4=1;} else {T2_ds4=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des roten Transponder nicht uebereinstimmt
      
      if(addr_4[1] == but_3[5] && addr_4[2] == but_3[4] && addr_4[3] == but_3[3] && addr_4[4] == but_3[2]){  // vergleiche Serien Nr. des blauen Transponders
      T3_ds4=1;} else {T3_ds4=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des blauen Transponder nicht uebereinstimmt
      
      if(addr_4[1] == but_4[5] && addr_4[2] == but_4[4] && addr_4[3] == but_4[3] && addr_4[4] == but_4[2]){  // vergleiche Serien Nr. des gruenen Transponders
      T4_ds4=1;} else {T4_ds4=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gruenen Transponder nicht uebereinstimmt
      
      if(addr_4[1] == but_5[5] && addr_4[2] == but_5[4] && addr_4[3] == but_5[3] && addr_4[4] == but_5[2]){  // vergleiche Serien Nr. des gelben Transponders
      T5_ds4=1;} else {T5_ds4=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gelben Transponder nicht uebereinstimmt  
  }
  else {T1_ds4=0; T2_ds4=0; T3_ds4=0; T4_ds4=0; T5_ds4=0;}                                                               // Alle angemeldeten Transponder an diesem Pin zuruecksetzen (keyStatus==0)

 if(keyStatus_5==1){                      // Ist ein Transponder vorhanden -> 
      if(addr_5[1] == but_1[5] && addr_5[2] == but_1[4] && addr_5[3] == but_1[3] && addr_5[4] == but_1[2]){  // vergleiche Serien Nr. des schwarzen Transponders
      T1_ds5=1;} else {T1_ds5=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des schwarzen Transponder nicht uebereinstimmt
      
      if(addr_5[1] == but_2[5] && addr_5[2] == but_2[4] && addr_5[3] == but_2[3] && addr_5[4] == but_2[2]){  // vergleiche Serien Nr. des roten Transponders
      T2_ds5=1;} else {T2_ds5=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des roten Transponder nicht uebereinstimmt
      
      if(addr_3[1] == but_3[5] && addr_3[2] == but_3[4] && addr_3[3] == but_3[3] && addr_3[4] == but_3[2]){  // vergleiche Serien Nr. des blauen Transponders
      T3_ds5=1;} else {T3_ds5=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des blauen Transponder nicht uebereinstimmt
      
      if(addr_5[1] == but_4[5] && addr_5[2] == but_4[4] && addr_5[3] == but_4[3] && addr_5[4] == but_4[2]){  // vergleiche Serien Nr. des gruenen Transponders
      T4_ds5=1;} else {T4_ds5=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gruenen Transponder nicht uebereinstimmt
      
      if(addr_5[1] == but_5[5] && addr_5[2] == but_5[4] && addr_5[3] == but_5[3] && addr_5[4] == but_5[2]){  // vergleiche Serien Nr. des gelben Transponders
      T5_ds5=1;} else {T5_ds5=0;}                                                                            // Merker ruecksetzen , wenn Serien Nr. nicht mit dem des gelben Transponder nicht uebereinstimmt  
  }
  else {T1_ds5=0; T2_ds5=0; T3_ds5=0; T4_ds5=0; T5_ds5=0;}                                                   // Alle angemeldeten Transponder an diesem Pin zuruecksetzen (keyStatus==0)
  
  if (T1_ds1 == 1 | T1_ds2 == 1 | T1_ds3 == 1 | T1_ds4 == 1 | T1_ds5 ==1) {                                  // Pruefe, ob Tranponder 1 vorhanden
    digitalWrite(7,LOW);} else {digitalWrite(7,HIGH);}                                                       // setze Ausgang 7 auf LOW (OC), wenn dem so ist

  if (T2_ds1 == 1 | T2_ds2 == 1 | T2_ds3 == 1 | T2_ds4 == 1 | T2_ds5 ==1) {                                  // Pruefe, ob Tranponder 2 vorhanden
    digitalWrite(8,LOW);} else {digitalWrite(8,HIGH);}                                                       // setze Ausgang 8 auf LOW (OC), wenn dem so ist

  if (T3_ds1 == 1 | T3_ds2 == 1 | T3_ds3 == 1 | T3_ds4 == 1 | T3_ds5 ==1) {                                  // Pruefe, ob Tranponder 3 vorhanden
    digitalWrite(9,LOW);} else {digitalWrite(9,HIGH);}                                                       // setze Ausgang 9 auf LOW (OC), wenn dem so ist

  if (T4_ds1 == 1 | T4_ds2 == 1 | T4_ds3 == 1 | T4_ds4 == 1 | T4_ds5 ==1) {                                  // Pruefe, ob Tranponder 4 vorhanden
    digitalWrite(10,LOW);} else {digitalWrite(10,HIGH);}                                                     // setze Ausgang 10 auf LOW (OC), wenn dem so ist

  if (T5_ds1 == 1 | T5_ds2 == 1 | T5_ds3 == 1 | T5_ds4 == 1 | T5_ds5 ==1) {                                  // Pruefe, ob Tranponder 5 vorhanden
    digitalWrite(11,LOW);} else {digitalWrite(11,HIGH);}                                                     // setze Ausgang 11 auf LOW (OC), wenn dem so ist

  if (digitalRead(7) == 0 | digitalRead(8) == 0 | digitalRead(9) == 0 | digitalRead(10) == 0 | digitalRead(11) == 0) {                                                        // Pruefe, ob 1/5 Transpondern vorhanden
    digitalWrite(13,HIGH);} else {digitalWrite(13,LOW);}                                                     // Setze status LED "anwesend"
    
  if (digitalRead(7) == 1 && digitalRead(8) == 1 && digitalRead(9) == 1 && digitalRead(10) == 1 && digitalRead(11) == 1) {                                                    // Pruefe ob KEIN Transponder vorhanden
    digitalWrite(12,HIGH);} else {digitalWrite(12,LOW);}     // Setze status LED "abwesend"
}

void getKeyCode(){                        // Unterprogramm

  addr_1[0]=0;                            // eingelesene Adresse zurueck setzen  
  ds_1.search(addr_1);                    // adress suche starten und in byte "addr" schreiben
  ds_1.reset_search();                    // adress suche stoppen
  if (addr_1[0]==0x01){keyStatus_1=1;}    // Ist ein Tranponder vorhanden schreibe 1   (Dieser "Merker" ist notwendig, 
  else keyStatus_1=0;                     // Andernfalls schreibe 0         ansonsten steht für einen Zyklus eine 0 an)
  ds_1.reset();                           // Zurücksetzen der 1-Wire Libery ???
  
  addr_2[0]=0;                            // eingelesene Adresse zurueck setzen
  ds_2.search(addr_2);                    // adress suche starten und in byte "addr" schreiben
  ds_2.reset_search();                    // adress suche stoppen
  if (addr_2[0]==0x01){keyStatus_2=1;}    // Ist ein Tranponder vorhanden schreibe 1   (Dieser "Merker" ist notwendig, 
  else keyStatus_2=0;                     // Andernfalls schreibe 0         ansonsten steht für einen Zyklus eine 0 an) 
  ds_2.reset();                           // Zurücksetzen der 1-Wire Libery ???

  addr_3[0]=0;                            // eingelesene Adresse zurueck setzen
  ds_3.search(addr_3);                    // adress suche starten und in byte "addr" schreiben
  ds_3.reset_search();                    // adress suche stoppen
  if (addr_3[0]==0x01){keyStatus_3=1;}    // Ist ein Tranponder vorhanden schreibe 1   (Dieser "Merker" ist notwendig, 
  else keyStatus_3=0;                     // Andernfalls schreibe 0         ansonsten steht für einen Zyklus eine 0 an) 
  ds_3.reset();                           // Zurücksetzen der 1-Wire Libery ???
  
    addr_4[0]=0;                            // eingelesene Adresse zurueck setzen
  ds_4.search(addr_4);                    // adress suche starten und in byte "addr" schreiben
  ds_4.reset_search();                    // adress suche stoppen
  if (addr_4[0]==0x01){keyStatus_4=1;}    // Ist ein Tranponder vorhanden schreibe 1   (Dieser "Merker" ist notwendig, 
  else keyStatus_4=0;                     // Andernfalls schreibe 0         ansonsten steht für einen Zyklus eine 0 an) 
  ds_4.reset();                           // Zurücksetzen der 1-Wire Libery ???
  
  addr_5[0]=0;                            // eingelesene Adresse zurueck setzen
  ds_5.search(addr_5);                    // adress suche starten und in byte "addr" schreiben
  ds_5.reset_search();                    // adress suche stoppen
  if (addr_5[0]==0x01){keyStatus_5=1;}    // Ist ein Tranponder vorhanden schreibe 1   (Dieser "Merker" ist notwendig, 
  else keyStatus_5=0;                     // Andernfalls schreibe 0         ansonsten steht für einen Zyklus eine 0 an) 
  ds_5.reset();                           // Zurücksetzen der 1-Wire Libery ???
}
Die Adressen der individuellen iButton anpassen. (Zum Auslesen kann dieses Script auch verwendet werden.Einfach die Kommentare lesen.) Ich denke ich habe fast jeden Schritt dokumentiert.


Ich bin gespannt ob es noch andere einsetzen und ob das Projekt sich weiter entwickelt...

Gruß

Thomas
Dateianhänge
IMG_4669.JPG
IMG_4668.JPG
IMG_4667.JPG
IMG_4666.JPG
IMG_4665.JPG
connect2.jpg
connect2.jpg (11.99 KiB) 8803 mal betrachtet

dondaik
Beiträge: 12925
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1599 Mal
Danksagung erhalten: 222 Mal

Re: Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von dondaik » 09.04.2015, 18:02

nice, werde ich mal auf "todo" legen..
für die nachbauer ohne nano erfahrung: der kleine braucht einen bootsektor,dieser und die schnittstellenanbindung an die arduino-ide kann etwas nerven kosten..
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Mr.Burns
Beiträge: 73
Registriert: 18.09.2010, 14:33

Re: Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von Mr.Burns » 09.04.2015, 18:28

Beim Nano weiß ich es (noch) nicht (es sind aber einige aus dem Morgenland unterwegs zu mir) aber beim mir verwendeten PRO MINI http://www.watterott.com/de/Wattuino-pro-mini-5V-16MHzbraucht man nur die FTDI Schnittstelle http://www.watterott.com/de/FTDI-Breakout-Reloaded-V2. Der Bootloader ist bereits drauf.

Aber man kann auch nen UNO, Mega oder oder oder verwenden...

Gruß
Thomas

olifall
Beiträge: 79
Registriert: 17.07.2016, 09:48

Re: Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von olifall » 08.12.2016, 20:13

Hallo ich möchte dieses digitale Schlüsselbrett nachbauen.

Ich habe den Arduino UNO und einen iButton. Leider schaffe ich es nicht die ID des Buttons auszulesen, kann mir da jemand behilflich sein? Welchen Teil des Scripts muss ich als Sketch verwenden?

Gruss Oli

dondaik
Beiträge: 12925
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1599 Mal
Danksagung erhalten: 222 Mal

Re: Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von dondaik » 08.12.2016, 20:44

wohl alles.. :-)... nein, ich denke diesen abschnitt: void getKeyCode();

ach mal eben auch gesucht: https://de.aliexpress.com/wholesale?cat ... xt=iButton+

dann könnte eine kombination von esp2866 + ibutton + 8er adressierbarer i2c-ledleiste als statusanzeige ein interessantes projekt sein ..

ups: die 8er leiste in der bucht als suche: WS2812-5050-RGB-LED-Lamp-Panel-Module-5V-8-Bit-Rainbow-LED-Precise-for-Arduino.... 1,04 euro
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

olifall
Beiträge: 79
Registriert: 17.07.2016, 09:48

Re: Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von olifall » 09.12.2016, 10:46

danke für die Info, jetzt habe ich es geschafft die ID auszulesen. :-)

Kann mir jetzt noch jemand sagen, was für ein Gerät ich im CUXD anlegen muss?

Gruss Oli

Bulli
Beiträge: 494
Registriert: 29.04.2014, 18:38
Hat sich bedankt: 2 Mal
Danksagung erhalten: 9 Mal

Re: Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von Bulli » 09.12.2016, 11:48

Hallo
z.B 5.7 (90) Universal Wrapper Devices
CuxD Doku ab Seite 67.

Gruß
Bulli

olifall
Beiträge: 79
Registriert: 17.07.2016, 09:48

Re: Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von olifall » 10.12.2016, 09:25

Hallo Bulli,

vielen Dank, habe das Gerät angelegt. Wenn ich jetzt den Button aus der Halterung nehme kommt in der CCU ein Zeitstempel, wenn ich ihn wieder dran mache passiert nichts. Muss ich noch was im Setup vom CUXD konfigurieren?

Bulli
Beiträge: 494
Registriert: 29.04.2014, 18:38
Hat sich bedankt: 2 Mal
Danksagung erhalten: 9 Mal

Re: Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von Bulli » 10.12.2016, 14:36

Aua alles schon lang her. Bin mir immer noch nichts sicher was du haben möchtest. Vielleicht reicht dir ja ein CuxD 16 Gerät?
So mach ich es z.B bei meinen Brenner umgewandelt aus oder an. Normal ist es ja ein TFK offen geschlossen. Für deinen Fall anwesend nicht anwesend?
5.5.8 (16) HMS 100 TFK (Tür-/Fensterkontakt)
Tür-/Fensterkontakt.
Paketaufbau (hexadezimal kodiert):
HAAAAF4SSCCRR (normally closed)
HAAAAF5SSCCRR (normally open)
AAAA..........Adresse
F...................Flags (4..sync, 2..lowbat)
SS................Status
CC................Zähler für Datentelegramme
RR................RSSI-Wert vom Empfang (optional)

Wichtig ist der Code bei den Geräteeinstellungen. Z.B D001 oder D002 in Beispiel D101
brenner.jpg
Jetzt muß der Arduino nur noch HD10104010000 oder HD10104000000 senden und das wars.

Variable dazu fertig.
brenner_var.jpg

olifall
Beiträge: 79
Registriert: 17.07.2016, 09:48

Re: Digitales Schlüsselbrett mit iButtons und Arduino

Beitrag von olifall » 11.12.2016, 10:16

Hallo Bulli,

vielen Dank werde mir das mal anschauen.

Was ich will ist genau das was Du schreibst, anwesend nicht anwesend. Damit könnte ich dann programmieren, wenn der letzte Magnet vom Schlüsselbrett weg ist, Alarmanlage ein. Sobald der erste wieder dran ist, Alarmanlage aus.

Gruss Oli

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“