Zitat von ThorstenGehrig
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
ARDUINO am KNX
Einklappen
X
-
Auf den iAQ, den gibts als "C"- und als "P"-Variante. Erste benötigt 66mW, der gepulste nur 9mW...allerdings liefert der auch nur alle 11s einen neuen Messwert. Dürfte aber für die meisten Anwendungen locker ausreichen.
-
Hallo,
ich habe - nach langer langer zeit - mal wieder in diesen Thread geschaut.
Erstmal VIELEN VIELEN Dank für Mac Gyver für das Pflegen der Lib - da wurde echt viel Arbeit geleistet.
Genauso stelle ich mir "community" vor...
Ich muss mal meine bestehenden Projekte auf die neue Lib aktualisieren (die Projekte sind bei mir schon alle größer 1 jähr in Betrieb...)
@Dreamy: worauf beziehst du das "pulsed"? Auf den iAQ oder BME?
@Tuxedo: dein Konnekting Projekt ist super - und ich bin ganz froh das ich hier einige "politische" Diskussionen verpasst habe.
Was echt herausragend ist - sind die Hardwareleistungen - die ja (meines Wissens nach) für alle Libraries einsetzbar sind.
Die Suite ist sicherlich auch eine Leistung - die ich aber selbst noch nicht begutachtet habe (Zeitmangel).
Mein träum währe eine industrielle Kleinserien-produktion fertiger Platinen (zu guten Preisen) und fertige "Bastelsätze" (mit Platinen und Sensoren).
Vermutlich ist das aber nicht so einfach Umsetzbar und nur ein Traum... nevertheless: wir haben - alle zusammen - schon superviel Erreicht. Vieles währe vor 5 Jahren noch undenkbar gewesen :-)
Gruß
Thorsten
Einen Kommentar schreiben:
-
Nach Murphy natürlich nein - C.
Ultraschall: Ich will ein Kästchen an die Wand machen und die Entfernung Auto -> Wand messen und dann eine Meldeleuchte schalten.
Einen Kommentar schreiben:
-
Hallo Armin,
hmm...Utraschallsensor? Habe ich was verpasst? :-)
Platz für den iAQ habe ich übrigens auch gelassen...ich hoffen, Du hast den "pulsed" genommen, der andere wird leider etwas warm und verfälscht dann die Temperaturmessung (leidvolle eigene Erfahrung) in näherer Umgebung.
Einen Kommentar schreiben:
-
Räusper - der Code ist von Thorsten, nur von mir umgestrickt auf BME280. Daumen hoch für ThorstenGehrig und an dich als Elektronikprofi
Achja, der BME muss erst mal "kalibriert" (siehe Messwertkorrektur im Code) werden. Heisst, Feuchte und Temperatur sind anfänglich daneben. Den Luftdruck habe ich von weatherunderground für unsere Gegend und dann ins Beispiel eingetragen. Dann auf Altitude geachtet, ob das ungefähr hinkommt - bei mir hats gepasst. Am Besten Du nimmst erstmal das Beispiel in der Arduino IDE von Adafruit für den BME und bringst die Sensoren auf Linie. Ab dann arbeiten die Sensoren einwandfrei.
Bin schon sehr gespannt auf deine Platine, wie das aussieht - bestimmt super. Bei mir kommt der Sensor in den Keller, da ist es nicht tragisch. Aufputzdose - fertig.
Der Ultraschallsensor funktioniert auch ootb und das erstaunlich genau aufn Zentimeter. Mit einem Pro Micro nur 3 Bauteile incl. Siemens. Leider habe ich im Moment nur einen Siemens-Buskoppler.
Dann sind gestern noch 2 iAQs gekommen. Dazu fehlen mir noch ein paar Teilchen.
Einen Kommentar schreiben:
-
Geil...vielen Dank fürs Teilen!!! Dein Code hilft mir immens, da ich leider nicht gerade fit in Software bin...ich habe lieber nen Lötkolben in der Hand :-)
Bin gerade ausm Urlaub zurückgekommen...nächste Woche mache ich die Testplatine fertig. Habe allerdings ein etwas kleineres BME-Modul genommen.
Einen Kommentar schreiben:
-
Sorry, Link geht iwie im Edit nicht für den Sensor BME280. KlickZuletzt geändert von WagoKlemme; 26.05.2017, 15:12.
Einen Kommentar schreiben:
-
Wie versprochen mein erstes kleines Projekt mit Arduino überhaupt - ist fertig.
Es geht um einen Pro Micro 5V mit BME280 (Boschsensor: Luftdruck, Feuchte, Temperatur).
Das Setup:
IMG_0278.JPG
Der Code:
Das Ergebnis:Code:/*************************************************************************** I2C device class (I2Cdev) demonstration Arduino sketch for IAQ2000 class 2012-04-01 by Peteris Skorovs <pskorovs@gmail.com> Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib I2C Device Library hosted at http://www.i2cdevlib.com This is a library for the BME280 humidity, temperature & pressure sensor Designed specifically to work with the Adafruit BME280 Breakout ----> http://www.adafruit.com/products/2650 These sensors use I2C or SPI to communicate, 2 or 4 pins are required to interface. The device's I2C address is either 0x76 or 0x77. Adafruit invests time and resources providing this open source code, please support Adafruit andopen-source hardware by purchasing products from Adafruit! Written by Limor Fried & Kevin Townsend for Adafruit Industries. BSD license, all text above must be included in any redistribution ***************************************************************************/ #include <Wire.h> #include <I2Cdev.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> //KNX #include <KnxTpUart.h> #define KNX_PHYSICAL_ADRESS "15.15.20" #define KNX_WRITE_GROUPADRESS_PRESSURE "4/0/200" #define KNX_WRITE_GROUPADRESS_HUMIDITY "4/0/201" #define KNX_WRITE_GROUPADRESS_TEMP "4/0/202" #define KNX_MEASSURE_INTERVAL_MS 30000 // Messintervall alle 30 sekunden #define KNX_SEND_INTERVAL_MS_AIRPRESSURE 3600000 // senden des Luftdrucks mindestens alle 60 minuten #define KNX_SEND_INTERVAL_MS_HUMIDITY 3600000 // senden der rel. Feuchte mindestens alle 60 minuten #define KNX_SEND_INTERVAL_MS_TEMP 3600000 // senden der Temperatur mindestens alle 60 minuten #define watchdog_time 3600000 // Watchdog = 1 Stunde #define SEALEVELPRESSURE_HPA (1021) //Initialize KNX KnxTpUart knx(&Serial1, KNX_PHYSICAL_ADRESS); Adafruit_BME280 bme; // I2C float airpressure = 0; float humidity = 0; float temp = 0; float oldhumidity = 0; float oldtemp = 0; float oldairpressure = 0; unsigned long delayTime; unsigned long startTime; unsigned long watchdog; unsigned long sendTimePressure; unsigned long sendTimeHumidity; unsigned long sendTimeTemp; bool result; void setup() { // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin(); // initialize serial communication Serial.begin(9600); delay(1000); Serial.println("Initializing Serial..."); delay(1000); //initialize connection to KNX BCU Serial1.begin(19200); while (!Serial1) { ; // wait for serial port to connect } UCSR1C = UCSR1C | B00100000; Serial.print("UCSR1C: "); Serial.println(UCSR1C, BIN); // Reset UART knx.uartReset(); bool status; // default settings for BME280 status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } Serial.println("-- Default Test --"); Serial.println(); delay(100); // let sensor boot up startTime = millis(); watchdog = millis(); // initialize device Serial.println("Initializing I2C devices..."); // Lese-Addressen registrieren knx.addListenGroupAddress(KNX_WRITE_GROUPADRESS_PRESSURE); knx.addListenGroupAddress(KNX_WRITE_GROUPADRESS_HUMIDITY); knx.addListenGroupAddress(KNX_WRITE_GROUPADRESS_TEMP); } void loop() { // Wenn unterhalb des messintervalls: nichts tun if (millis() - startTime < KNX_MEASSURE_INTERVAL_MS) { delay(1); return; } startTime = millis(); // Wenn überhalb des sendeintrvalls if (millis() - sendTimePressure > KNX_SEND_INTERVAL_MS_AIRPRESSURE) { oldairpressure = 950; // undefinierter wert - damit beim nächsten befehl gesendet wird } // Wenn überhalb des sendeintrvalls if (millis() - sendTimeHumidity > KNX_SEND_INTERVAL_MS_HUMIDITY) { oldhumidity = 30; // undefinierter wert - damit beim nächsten befehl gesendet wird } // Wenn überhalb des sendeintrvalls if (millis() - sendTimeTemp > KNX_SEND_INTERVAL_MS_TEMP) { oldtemp = 10; // undefinierter wert - damit beim nächsten befehl gesendet wird } // Wenn über Watchdog-time: Fehler auf BUS senden, reboot if (millis() - watchdog > watchdog_time) { result = knx.groupWrite1ByteInt(KNX_WRITE_GROUPADRESS_PRESSURE, 127); delay(1000); asm volatile (" jmp 0"); return; } // read sensor airpressure airpressure = (bme.readPressure()/100.0F)+50; if (airpressure >= (oldairpressure + 0.1) || airpressure <= (oldairpressure - 0.1)) { oldairpressure = airpressure; result = knx.groupWrite2ByteFloat(KNX_WRITE_GROUPADRESS_PRESSURE, airpressure); sendTimePressure = millis(); // define last pressure send time watchdog = millis(); // set Watchdog Serial.print("Luftdruck = "); Serial.print(airpressure); Serial.println(" hPa"); } delay(100); // read seansor humidity humidity = bme.readHumidity()+3; if (humidity >= (oldhumidity + 1) || humidity <= (oldhumidity - 1)) { oldhumidity = humidity; result = knx.groupWrite2ByteFloat(KNX_WRITE_GROUPADRESS_HUMIDITY, humidity); sendTimeHumidity = millis(); // define last humidity send time watchdog = millis(); // set Watchdog Serial.print("Feuchte = "); Serial.print(humidity); Serial.println(" %"); } delay(100); // read seansor temperatur temp = bme.readTemperature()-2; if (temp >= (oldtemp + 0.2) || temp <= (oldtemp - 0.2)) { oldtemp = temp; result = knx.groupWrite2ByteFloat(KNX_WRITE_GROUPADRESS_TEMP, temp); sendTimeTemp = millis(); // define last temp send time watchdog = millis(); // set Watchdog Serial.print("Temperatur= "); Serial.print(temp); Serial.println(" *C"); } delay(100); } void reboot() { } void serialEvent() { //Get Serial Event KnxTpUartSerialEventType eType = knx.serialEvent(); //Check Serial Event Serial.print("check"); if (eType == KNX_TELEGRAM) { KnxTelegram* telegram = knx.getReceivedTelegram(); // Telegrammauswertung auf KNX (bei Empfang immer notwendig) String target = String(0 + telegram->getTargetMainGroup()) + "/" + String(0 + telegram->getTargetMiddleGroup()) + "/" + String(0 + telegram->getTargetSubGroup()); result = knx.groupWrite14ByteText("4/0/203", target ); // Nur test damit ich sehe das die Auswertung läuft! // Auswertung der Gruppenadresse des empfangenen Telegrammes und Zwischenspeicherung in Variable target if (telegram->getCommand() == KNX_COMMAND_READ) { if (target == KNX_WRITE_GROUPADRESS_PRESSURE) { airpressure = (bme.readPressure()/100.0F)+50; result = knx.groupAnswer2ByteFloat(KNX_WRITE_GROUPADRESS_PRESSURE, airpressure); oldairpressure = airpressure; sendTimePressure = millis(); // define last pressure send time watchdog = millis(); // set Watchdog } if (target == KNX_WRITE_GROUPADRESS_HUMIDITY) { humidity = bme.readHumidity()+3; result = knx.groupAnswer2ByteFloat(KNX_WRITE_GROUPADRESS_HUMIDITY, humidity); oldhumidity = humidity; sendTimeHumidity = millis(); // define last humidity send time watchdog = millis(); // set Watchdog } if (target == KNX_WRITE_GROUPADRESS_TEMP) { temp = bme.readTemperature()-2; result = knx.groupAnswer2ByteFloat(KNX_WRITE_GROUPADRESS_TEMP, temp); oldtemp = temp; sendTimeTemp = millis(); // define last Temp send time watchdog = millis(); // set Watchdog } } } }
2017-05-26 15_29_29-ETS5™ - Test Jung.png
Ich bin schwer begeistert. Vielen Dank für das Projekt und höchsten Respekt !Zuletzt geändert von WagoKlemme; 26.05.2017, 15:11.
- Likes 3
Einen Kommentar schreiben:
-
Hmm, müsste der Button nicht auf LOW abgefragt werden? Hängt per Pull-Up doch permanent auf HIGH...
Einen Kommentar schreiben:
-
Hallo xRay06,
herzlich willkommen.
Es liegt nicht an der Hardware und auch nicht an deinem Sketch, so viel steht fest.
Sehr komisch, zugegeben habe die Library mit dem Beispielsketch "GroupWrite" zum letzten Mal im Januar 2017 getestet.
Muss dies nachstellen ...
... ich kann dich beruhigen, du hast keinen Fehler gemacht, denn gleiches Verhalten bei mir.
Aha! Auslöser des Fehlverhalten gefunden. Library auf Ausgabestand Januar 2017 gebracht.
Nur zur Information:
Bitte im Moment keinerlei Änderungen in der Library an
oderCode:#define SERIAL_WRITE_DELAY_MS 100
durchführen!Code:#define SERIAL_READ_TIMEOUT_MS 0
https://bitbucket.org/thorstengehrig...forum/overview
Die Library Version (10.01.2017) wurde von mir am 24.05.2017 mit den Beispielsketchen " GroupRead" und "GroupWrite" und "ReceiveKNXTelegrams" und "ReplyToKNXRead" erfolgreich getestet.
Der Rücksprung auf diese Version (10.01.2017) der Library hat noch den "Fehler" Mehrfachausgabe von Telegrammen im "Serieller Monitor", obwohl nur ein einziges Telegramm empfangen wurde.
Nun viel Spaß dabei.
Zuletzt geändert von Mag Gyver; 24.05.2017, 20:05.
Einen Kommentar schreiben:
-
Hallo an die Profis,
ich bin ziemlicher Anfänger was Arduion angeht,
hab mich durch die ganzen Seite gelesen und finde das Projekt ziemlich genial.
Jetz hab ich den versucht einen kleinen Aufbau zu machen.
Es soll durch einen Taster einfach nur eine Gruppenadresse mit einem Wert gesendet werden.
Das funktioniert auch aber nur beim ersten drücken. Danach geht nix mehr.
Durch Reset des Arduion kann ich wieder einmal den Wert senden usw.
Board ist Arduino UNO.
Vieleicht kann mal jemand drüberschauen.
Grüsse Stefan
Code:#include <KnxTpUart.h> KnxTpUart knx(&Serial, "15.15.20"); // Initialize the KNX TP-UART library on the Serial port const int buttonPin1 = 12; // the number of the pushbutton pin const int ledPin1 = 13; // the number of the LED pin int WertKNX = 6; //KNX Wert der gesendet wird int buttonState1 = 0; // variable for reading the pushbutton status void setup() { pinMode(ledPin1, OUTPUT); // initialize the LED pin as an output: //digitalWrite(ledPin1, LOW); pinMode(buttonPin1, INPUT); // initialize the pushbutton pin as an input: //digitalWrite(buttonPin1, HIGH); // Turn on pullup Serial.begin(19200, SERIAL_8E1); knx.uartReset(); } void loop() { buttonState1 = digitalRead(buttonPin1); // read the state of the pushbutton value: // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState1 == HIGH) { // turn LED on: digitalWrite(ledPin1, HIGH); if (buttonState1 == HIGH) { knx.groupWrite2ByteInt("0/0/100", WertKNX); WertKNX = WertKNX*100; //WertKNX = !WertKNX; } else { // turn LED off: digitalWrite(ledPin1, LOW); } } }
Einen Kommentar schreiben:
-
Zur Info,
beide Versionen liegen überarbeitet auf "bitbucket" vor.
Änderungen:- Leseroutine angepasst, aufgrund mehrfacher Telegramme
- "Timeout" Leseroutine mit Min/Max-Wertebereich (10 bis 1000 Millisekunden)
- "Writedelay" Wartezeit zwischen dem Senden aufeinanderfolgender Telegramme zum Bus Min-Wert (100 Millisekunden), nach oben nur durch "unsigned long" begrenzt
- Ersetzen der Funktion "delay()"
- Beispiel GroupWrite angepasst, Anzeigefehler auf dem "Serieller Monitor"
Bei Fehlverhalten bitte melden. Danke im voraus. Dann leg ich nochmal nach.
Zuletzt geändert von Mag Gyver; 19.05.2017, 06:39.
Einen Kommentar schreiben:
-
Mag Gyver
Danke für die klärenden Worte.
Als Lib hatte ich schon die ThorstenGehrig/Mag Gyver Version ins Auge gefasst und damit entschieden. Und bzgl. Stromaufnahme, ich werde darauf achten.
Ich freue mich schon und arbeite mich gerne ein.
dreamy1
Welche Platine meinst Du ? Nein, hat Zeit. Ich wünsche dir einen schönen Urlaub.
Einen Pro Mini zu kaufen ist ja kein Problem.
Vielen Dank an Euch, dass ihr das Projekt weiter leben lässt. Ich finde das richtig super und das Projekt auch. Wenn meine Sachen laufen stelle ich sie hier vor, versprochen.
Einen Kommentar schreiben:
-
Ich habe gerade gestern einen Satz Platinen bekommen, da kannst Du direkt einen BME280 draufstecken und das Ganze an den bekannten Siemens Busankoppler stecken. Ich verwende allerdings den Pro Mini. Kleines TFT kann man auch mit unterbringen, wenn auch eine lokale Anzeige gewünscht ist. Alles nur über den Bus versorgt, also wirklich easy. Ist auch alles so vorbereitet, dass es in eine Standard 55er Blindabdeckung passt.
Dauert aber noch ein paar Tage bis ich das vorstelle...ich gehe jetzt erstmal in Urlaub und danch muss ich erstmal bestücken und sehen ob alles funzt :-)Zuletzt geändert von dreamy1; 16.05.2017, 20:16.
Einen Kommentar schreiben:
-
Hallo WagoKlemme,
gepflegt werden derzeit von ThorstenGehrig und mir zusammen die Library von ThorstenGehrig. Dann gab es dazu noch die Anfänge von tuxedo, bevor dieser KONNEKTING ins Leben gerufen hat. KONNEKTING basiert aber auf einer anderen Library, als die von ThorstenGehrig. Die Version von tuxedo habe ich angepasst und weiterentwickelt und wird etwas zeitversetzt zur Library von ThorstenGehrig aktualisiert.
Librarys:- ThorstenGehrig Version (DKA-Derivat)
- KONNEKTING (FM-Derivat)
- Optimierte Version (DKA-Derivat)
Konfus? Hoffe nicht. Aber alle drei Librarys bekommen deine Wünsche in den Griff. Nimm dir für die Einarbeitung etwas Zeit und "Probieren geht über studieren!". Beispielsketche sind überall hinterlegt, die warten nur darauf von dir ausprobiert zu werden.
Das mit dem Setup ohne Hilfsspannung funktioniert nur dann, wenn du die Grenzen der Stromaufnahme deines Setups (Hardware) mit der jeweiligen EIB/KNX-Anschaltung (Busankoppler) vergleichst. Bedenke hierzu, dass der Busankoppler auch den Arduino und deine Sensoren mit Strom versorgen muss + etwas Puffer.
Sollte es nicht ohne Hilfsspannung gehen, dann galvanische Trennung zwischen Busankoppler und dem Rest herstellen.
Zuletzt geändert von Mag Gyver; 18.05.2017, 17:36.
Einen Kommentar schreiben:


Einen Kommentar schreiben: