Hallo
Ich habe den Bewegungsmelder nachgebaut. Soweit funktioniert er auch. Zusätzlich habe ich jetzt den Helligkeitssensor TSL2561 angeschlossen. SDA an A4 und SCL an A5 leider wird mir aber keine Helligkeit in Homematic angezeigt. Kann es sein das der Sketch falsch ist? Hier nun der Sketch den ich Hochgeladen habe:
//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------
// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER
#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>
// uncomment the following 2 lines if you have a TSL2561 connected at address 0x29
#include <Wire.h>
#include <sensors/Tsl2561.h>
#include <MultiChannelDevice.h>
#include <Motion.h>
// we use a Pro Mini
// Arduino pin for the LED
// D4 == PIN 4 on Pro Mini
#define LED_PIN 4
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8
// Arduino pin for the PIR
// A0 == PIN 14 on Pro Mini
#define PIR_PIN 14
// number of available peers per channel
#define PEERS_PER_CHANNEL 6
// all library classes are placed in the namespace 'as'
using namespace as;
// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
{0x56,0x78,0x90}, // Device ID
"papa222222", // Device Serial
{0x00,0x4a}, // Device Model
0x16, // Firmware Version
as::DeviceType::MotionDetector, // Device Type
{0x01,0x00} // Info Bytes
};
/**
* Configure the used hardware
*/
typedef AvrSPI<10,11,12,13> SPIType;
typedef Radio<SPIType,2> RadioType;
typedef StatusLed<LED_PIN> LedType;
typedef AskSin<LedType,BatterySensor,RadioType> BaseHal;
class Hal : public BaseHal {
public:
void init (const HMID& id) {
BaseHal::init(id);
// set low voltage to 2.2V
// measure battery every 1h
battery.init(seconds2ticks(60UL*60),sysclock);
battery.low(22);
battery.critical(19);
}
} hal;
#ifdef _TSL2561_H_
typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0,Tsl2561<TSL2561_ADDR_FLOAT> > MChannel;
#else
typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0> MChannel;
#endif
typedef MultiChannelDevice<Hal,MChannel,1> MotionType;
MotionType sdev(devinfo,0x20);
ConfigButton<MotionType> cfgBtn(sdev);
void setup () {
DINIT(57600,ASKSIN_PLUS_PLUS_IDENTIFIER);
sdev.init(hal);
buttonISR(cfgBtn,CONFIG_BUTTON_PIN);
motionISR(sdev,1,PIR_PIN);
sdev.initDone();
}
void loop() {
bool worked = hal.runready();
bool poll = sdev.pollRadio();
if( worked == false && poll == false ) {
// deep discharge protection
// if we drop below critical battery level - switch off all and sleep forever
if( hal.battery.critical() ) {
// this call will never return
hal.activity.sleepForever(hal);
}
// if nothing to do - go sleep
hal.activity.savePower<Sleep<>>(hal);
}
}
Was ist denn auf der seriellen Console zu sehen ?
Wie ist der Aufbau genau? Sind die Pullup Widerstände am I2C vorhanden ?
Ich weis zwar wo ich den seriellen Monitor finde habe aber damit noch nicht gearbeitet.
Ich habe den Arduino Pro mini auf einer Lochrasterplanine gebaut. Die Pullup Widerstände sind am I2C nicht vorhanden. Wie groß sollten sie denn sein. Ich betreibe den Arduino mit 3V Batteriespannung.
Zeig mal Deine Schaltung. Dann sehen wir weiter.
Die seriellen Ausgaben sind wichtig, um eventuelle Fehler zu finden. Bitte stelle sicher, dass Du die Debugausgaben in der IDE sehen kannst.
So sieht meine Schaltung aus (siehe Bild im Anhang) Gelb und Grün gehen zum TSL2561.
Und wie sieht der TSL2561 aus ?
So sieht mein Sensor TSL2561 aus Vcc an +, GND an -, SDA an A4, SCL an A5, L (L-Adresse) mit GND gebrückt und im Sketch in Zeile 67 LOW eingefügt. Funktioniert aber leider nicht.
Ok - die I2c-Pullups sind auf dem Breakout-Board drauf. Wie sieht es mit den seriellen Ausgaben aus ? Hast Du da schon was ?
Das hat er mir gesendet:
AskSin++ V3.1.5 (Feb 25 2019 19:37:18)
Address Space: 32 - 76
CC init1
CC Version: 14
- ready
Bat: 33
Motion
<- 0D 01 A2 41 567890 55C73E 01 01 00 40 - 839
-> 0A 01 80 02 55C73E 567890 00 - 1097
waitAck: 01
minInterval End
Motion
<- 0D 02 A2 41 567890 55C73E 01 02 00 40 - 2041
-> 0A 02 80 02 55C73E 567890 00 - 2297
waitAck: 01
minInterval End
Motion
<- 0D 03 A2 41 567890 55C73E 01 03 00 40 - 3241
-> 0A 03 80 02 55C73E 567890 00 - 3500
waitAck: 01
minInterval End
Motion
<- 0D 04 A2 41 567890 55C73E 01 04 00 40 - 4444
-> 0A 04 80 02 55C73E 567890 00 - 4700
waitAck: 01
minInterval End
Motion
<- 0D 05 A2 41 567890 55C73E 01 05 00 40 - 5644
-> 0A 05 80 02 55C73E 567890 00 - 5900
waitAck: 01
minInterval End
Motion
<- 0D 06 A2 41 567890 55C73E 01 06 00 40 - 6844
-> 0A 06 80 02 55C73E 567890 00 - 7102
waitAck: 01
minInterval End
Motion
<- 0D 07 A2 41 567890 55C73E 01 07 00 40 - 8048
-> 0A 07 80 02 55C73E 567890 00 - 8304
waitAck: 01
minInterval End
Motion
<- 0D 08 A2 41 567890 55C73E 01 08 00 40 - 9256
-> 0F 6E 86 10 3C4BA9 000000 0A 98 C8 0F 0E 40 - 9342
-> 0A 08 80 02 55C73E 567890 00 - 9508
waitAck: 01
minInterval End
Motion
<- 0D 09 A2 41 567890 55C73E 01 09 00 40 - 10457
-> 0A 09 80 02 55C73E 567890 00 - 10715
waitAck: 01
ignore 0F 25 86 10 63A293 000000 0A 9C CE 0C 00 40 - 10885
minInterval End
Motion
<- 0D 0A A2 41 567890 55C73E 01 0A 00 40 - 11659
-> 0A 0A 80 02 55C73E 567890 00 - 11915
waitAck: 01
minInterval End
Motion
<- 0D 0B A2 41 567890 55C73E 01 0B 00 40 - 12861
-> 0A 0B 80 02 55C73E 567890 00 - 13119
waitAck: 01
minInterval End
Motion
<- 0D 0C A2 41 567890 55C73E 01 0C 00 40 - 14073
-> 0A 0C 80 02 55C73E 567890 00 - 14329
waitAck: 01
Hm - sieht so aus, als würde der Sensor nicht eingebunden. Ändere mal
#ifdef _TSL2561_H_
typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0,Tsl2561<TSL2561_ADDR_FLOAT> > MChannel;
#else
typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0> MChannel;
#endif
in
typedef MotionChannel<Hal,PEERS_PER_CHANNEL,List0,Tsl2561<TSL2561_ADDR_LOW> > MChannel;
um.
Das hatte ich schon geändert von FLOAT in LOW habe den Sketch nochmal Hochgeladen sieht immer noch so aus:
AskSin++ V3.1.5 (Mar 2 2019 11:23:23)
Address Space: 32 - 76
CC init1
CC Version: 14
- ready
Bat: 33
Motion
<- 0D 01 A2 41 567890 55C73E 01 01 00 40 - 843
-> 0A 01 80 02 55C73E 567890 00 - 1099
waitAck: 01
minInterval End
Motion
<- 0D 02 A2 41 567890 55C73E 01 02 00 40 - 2048
-> 0A 02 80 02 55C73E 567890 00 - 2304
waitAck: 01
minInterval End
Motion
<- 0D 03 A2 41 567890 55C73E 01 03 00 40 - 3258
-> 0A 03 80 02 55C73E 567890 00 - 3514
waitAck: 01
minInterval End
Motion
<- 0D 04 A2 41 567890 55C73E 01 04 00 40 - 4468
-> 0A 04 80 02 55C73E 567890 00 - 4724
waitAck: 01
minInterval End
Motion
<- 0D 05 A2 41 567890 55C73E 01 05 00 40 - 5677
-> 0A 05 80 02 55C73E 567890 00 - 5933
waitAck: 01
minInterval End
Motion
Nein - nicht nur das LOW. Alle 4 Zeilen durch die eine ersetzen.
Ich habe den Sketch geändert und neu Hochgeladen. Jetzt sieht es so aus:
AskSin++ V3.1.5 (Mar 2 2019 14:10:25)
Address Space: 32 - 76
CC init1
CC Version: 14
- ready
Bat: 33
Motion
<- 0D 01 A2 41 567890 55C73E 01 01 00 40 - 843
-> 0A 01 80 02 55C73E 567890 00 - 1099
waitAck: 01
minInterval End
Motion
<- 0D 02 A2 41 567890 55C73E 01 02 00 40 - 2054
-> 0A 02 80 02 55C73E 567890 00 - 2312
waitAck: 01
minInterval End
Motion
<- 0D 03 A2 41 567890 55C73E 01 03 00 40 - 3268
-> 0A 03 80 02 55C73E 567890 00 - 3524
waitAck: 01
minInterval End
Motion
<- 0D 04 A2 41 567890 55C73E 01 04 00 40 - 4478
-> 0A 04 80 02 55C73E 567890 00 - 4734
waitAck: 01
minInterval End
Motion
<- 0D 05 A2 41 567890 55C73E 01 05 00 40 - 5687
-> 0A 05 80 02 55C73E 567890 00 - 5943
waitAck: 01
minInterval End
Motion
<- 0D 06 A2 41 567890 55C73E 01 06 00 40 - 6897
-> 0A 06 80 02 55C73E 567890 00 - 7155
waitAck: 01
minInterval End
Motion
<- 0D 07 A2 41 567890 55C73E 01 07 00 40 - 8108
-> 0A 07 80 02 55C73E 567890 00 - 8366
waitAck: 01
minInterval End
Motion
<- 0D 08 A2 41 567890 55C73E 01 08 00 40 - 9320
-> 0A 08 80 02 55C73E 567890 00 - 9576
waitAck: 01
minInterval End
Motion
<- 0D 09 A2 41 567890 55C73E 01 09 00 40 - 10532
-> 0A 09 80 02 55C73E 567890 00 - 10790
waitAck: 01
ignore 0F E7 86 10 569B1B 000000 0A 9C D4 09 00 00 - 11059
minInterval End
Motion
<- 0D 0A A2 41 567890 55C73E 01 0A 00 40 - 11741
-> 0A 0A 80 02 55C73E 567890 00 - 11999
waitAck: 01
minInterval End
Motion
<- 0D 0B A2 41 567890 55C73E 01 0B 00 40 - 12955
-> 0A 0B 80 02 55C73E 567890 00 - 13211
waitAck: 01
minInterval End
Motion
<- 0D 0C A2 41 567890 55C73E 01 0C 00 40 - 14163
-> 0A 0C 80 02 55C73E 567890 00 - 14419
waitAck: 01
minInterval End
Motion
<- 0D 0D A2 41 567890 55C73E 01 0D 00 40 - 15376
-> 0A 0D 80 02 55C73E 567890 00 - 15632
waitAck: 01
minInterval End
Motion
<- 0D 0E A2 41 567890 55C73E 01 0E 00 40 - 16584
-> 0A 0E 80 02 55C73E 567890 00 - 16840
waitAck: 01
minInterval End
Motion
<- 0D 0F A2 41 567890 55C73E 01 0F 00 40 - 17795
-> 0A 0F 80 02 55C73E 567890 00 - 18053
waitAck: 01
ignore 0D C0 A6 10 580E24 55C73E 06 01 00 00 - 18544
minInterval End
Motion
<- 0D 10 A2 41 567890 55C73E 01 10 00 40 - 19009
-> 0A 10 80 02 55C73E 567890 00 - 19265
waitAck: 01
minInterval End
Motion
<- 0D 11 A2 41 567890 55C73E 01 11 00 40 - 20219
-> 0A 11 80 02 55C73E 567890 00 - 20475
waitAck: 01
minInterval End
Motion
<- 0D 12 A2 41 567890 55C73E 01 12 00 40 - 21428
-> 0A 12 80 02 55C73E 567890 00 - 21684
waitAck: 01
minInterval End
Motion
<- 0D 13 A2 41 567890 55C73E 01 13 00 40 - 22638
-> 0A 13 80 02 55C73E 567890 00 - 22896
waitAck: 01
Hm, da kommt irgendwie nichts. Hast Du mal einen Beispiel-Sketch der TSL2561-Library probiert ?
Ich hab mal ein Test durchlaufen lassen:
Starting Tsl2561 testing loop
Testing Tsl2561 at address 29: found
Chip has type 50 and revision 0
Chip is a T, FN or CL type package
Chip powered on at 6
New gain = 0, exposure = 0x02
Got luminosity after 790 ms. Full spectrum is 75 and IR only is 21
Chip powered on at 800
New gain = 1, exposure = 0x02
Got luminosity after 789 ms. Full spectrum is 1130 and IR only is 316
Chip powered on at 1593
New gain = 0, exposure = 0x01
Got luminosity after 207 ms. Full spectrum is 20 and IR only is 5
Chip powered on at 1802
New gain = 1, exposure = 0x01
Got luminosity after 207 ms. Full spectrum is 282 and IR only is 79
Chip powered on at 2011
New gain = 0, exposure = 0x00
Got luminosity after 37 ms. Full spectrum is 5 and IR only is 1
Chip powered on at 2050
New gain = 1, exposure = 0x00
Got luminosity after 36 ms. Full spectrum is 36 and IR only is 10
Kann man da was sehen?
Na zumindest kommen da Werte. Also ist die Hardware schon mal i.O.
Kannst Du mal eine Ausgabe in den Tsl2561-Klasse <sensors/Tsl2561.h> einbauen. Am besten im init() und im measure().
Der Sketch ist schon ziemlich alt - sollte aber auf jeden Fall funktionieren. Ich muss mal Hardware zusammen suchen.
Ist damit diese Zeile gemeint: #include <sensors/Tsl2561.h> ? Und was soll da eingetragen werden. Kenne mich damit leider noch nicht aus
Nein - die Datei. Aber dann lass mal. Ich versuche die Tage mal was aufzubauen und zu checken.
Vielen Dank...
Also bei mir geht es. Ich habe mal ein paar Ausgaben in die Tsl2561 Klasse eingebaut.
Außerdem war in Beispiel noch das Include falsch. Das hattes Du aber schon geändert.
Vielen Dank für die mühe.... Wo finde ich denn den neuen Sketch
Im Master.Branch im GitHub https://github.com/pa-pa/AskSinPP
Du musst die Library aktualisieren.
Ich bin schon etwas weiter gekommen der TSL2561 wird erkannt zeigt aber noch keine Helligkeit an. Ich habe 2 Stück aus China bekommen sollen die beide defekt sein? Ober kann das eventuell noch an eine nicht passende Bibliothek liegen. Vielleicht hat ja jemand noch eine Idee.
Der Sensor hat ja mit dem Example funktioniert. Welche Version der TSL2561 Library verwendest Du ?
Diese beiden TSL2561 Library sind bei mir installiert.
KÖnnte das die falsche sein ? Wir haben diese hier: https://github.com/adafruit/TSL2561-Arduino-Library
Habe die Library installiert das hat aber leider auch nicht zum Erfolg geführt. Bestelle mir gerade einen neuen TSL2561. Habe die Vermutung das ich eine 5Volt variante erwischt habe.
Melde mich dann nochmal...
Hallo Zusammen,
ich habe jetzt nochmal einen neu bestellten Tsl2561 angeschlossen aber leider hat sich nichts geändert. Der TSL wird an der Adresse zwar erkannt zeigt aber keine Helligkeit an. Die Bibliotheken habe ich auch nochmal kontrolliert kann aber keinen Fehler finden. Kann mir eventuell noch jemand helfen? Folgende Libraries habe ich installiert: EnableInterrupt-master,
Low-Power-master, TSL2561 Arduino-Library-master, Wire-master und natürlich die AskSinPP-master.
Kannst Du das Example von der TSL Library noch mal probieren. Letztens hattes Du ja noch eine andere Library.
Jetzt sagt er mir Sensor überlastet??
Welche Sketch hast Du denn jetzt da drauf. Irgendwie habe ich das Gefühl, Du vermischt hier unterschiedliche Libraries.
Mach mal bitte das Example von hier drauf.
https://github.com/adafruit/TSL2561-Arduino-Library/tree/master/examples/tsl2561
Das gehört zu der Lib.
Du hast recht jetzt wird mir immer 703 Lux angezeigt:
Hi,
das Problem scheint mit der
TSL2561_INTEGRATIONTIME_402MS zusammenzuhängen (https://forums.adafruit.com/viewtopic.php?f=19&t=32845).
ZitatHowever, running the demo code with the low-light integration time setting (402ms) option, the sensor reads zero for IR, full, and lux regardless of the intensity of the light source or use of 16x gain.
Wenn ich in der
sensors/Tsl2561.h die INTEGRATIONTIME auf 101MS oder 13MS setze, werden auch Werte ermittelt.
Der example-Sketch der TSL-Arduino-Lib nutzt default die
TSL2561_INTEGRATIONTIME_13MS. Wählt man dort
TSL2561_INTEGRATIONTIME_402MS, dann werden auch beim Beispielsketch keine Werte mehr ausgegeben.
Guten Abend,
vielen Dank für die Info. Da ich aber nicht tief genug in der Thematik stecke weiß ich nicht wo ich das einstellen kann.
Über einen Tipp währe ich Dankbar.
https://github.com/pa-pa/AskSinPP/blob/20db0aa9a3952183aec798efeb1b20a93a3f3932/sensors/Tsl2561.h#L25
Aus TSL2561_INTEGRATIONTIME_402MS mach TSL2561_INTEGRATIONTIME_101MS
Ist aber wirklich nur ein kurzfristiger Workaround.
Letztendlich muss es auch mit den 402MS gehen... es scheint ja einige TSL2561 zu geben, bei denen das funktioniert.
Vielleicht liegt es an billigen China Clones... Ich hab keine Ahnung.
Hab ich gerade eingecheckt. Einfach die AskSinPP aktualisieren.
Danke Jermoe
Zitat von: jp112sdl am 11 März 2019, 19:54:39
https://github.com/pa-pa/AskSinPP/blob/20db0aa9a3952183aec798efeb1b20a93a3f3932/sensors/Tsl2561.h#L25
Aus TSL2561_INTEGRATIONTIME_402MS mach TSL2561_INTEGRATIONTIME_101MS
Ist aber wirklich nur ein kurzfristiger Workaround.
Letztendlich muss es auch mit den 402MS gehen... es scheint ja einige TSL2561 zu geben, bei denen das funktioniert.
Vielleicht liegt es an billigen China Clones... Ich hab keine Ahnung.
ich hatte deswegen mal eine Art Autoranging bei meinem Unisensor mit TSL2561 gemacht
https://github.com/TomMajor/AskSinPP_Examples/blob/master/HB-UNI-Sensor1/Sensors/Sens_TSL2561.h#L92 (https://github.com/TomMajor/AskSinPP_Examples/blob/master/HB-UNI-Sensor1/Sensors/Sens_TSL2561.h#L92)
Das half bedingt, aber nicht bei voller Sonne, deswegen dann der MAX44009.
Zitat von: Tom Major am 12 März 2019, 01:31:20
ich hatte deswegen mal eine Art Autoranging bei meinem Unisensor mit TSL2561 gemacht
Wobei auch da beim Setzen des Timing Registers auf 0x02 nur 0-Werte kommen dürften.
Ja, das TSL2561 Thema hatten wir damals tiefgründig erörtert. :)
Im Innenbereich,
beim Bewegungsmelder 'innen' , sollte der TSL2561 jedoch gut funktionieren
Funktioniert leider immer noch nicht. Ich hatte mir zum Probieren den Adafruit TSL2561 bestellt vielleicht war das ja auch ein Modell was nicht funktioniert. Könnt ihr mir vielleicht ein Modell empfehlen?
Ich werde ansonsten den Bewegungsmelder ohne den Helligkeitssensor in Betrieb nehmen müssen.
Was sagen den jetzt die Debug Ausgaben des Adafruit Examples für den neuen Original TSL2561 von Adafruit?
https://github.com/adafruit/TSL2561-Arduino-Library/tree/master/examples/tsl2561 (https://github.com/adafruit/TSL2561-Arduino-Library/tree/master/examples/tsl2561)
Moin, hier ist die Ausgabe des Adafruit Examples:
und so sieht die Ausgabe mit dem Sketch HM-SEC-MDIR aus:
Zitat von: Billy3 am 14 März 2019, 17:28:43
Moin, hier ist die Ausgabe des Adafruit Examples:
Das war nicht zufällig bei direktem Sonnenlicht nehme ich an sondern indoor?
Ändere mal das Adafruit Example so dass tsl.setGain 0 aktiviert wird und nicht 16, Zeile 28/29. Wie sieht dann die Debugausgabe aus?
Bei tsl.setGain 0 aktiviert und Indoor zeigt er mir 488 Lux an:
Nur zur Erklärung, wenn die beiden Werte IR und Full 65535 anzeigen sind diese an der oberen Grenze/Übersteuerung, eine Berechnung von Visible ergibt dann 0 und der Lux-Wert keinen Sinn.
siehe auch meine Messungen hier
https://github.com/TomMajor/AskSinPP_Examples/blob/master/HB-UNI-Sensor1/Sensors/Sens_TSL2561.h#L139 (https://github.com/TomMajor/AskSinPP_Examples/blob/master/HB-UNI-Sensor1/Sensors/Sens_TSL2561.h#L139)
Du könntest noch mal die beiden anderen Integrationszeiten bei Gain 0 im Example sketch testen. Wenn du dann auch die 65535 siehst würde ich auch auf einen China fake sensor tippen, eine andere Erklärung fällt mir gerade nicht ein da der Sensor ja über seine I2C Addr korrekt gefunden wird.
Ich habe beide Integrationszeiten probiert hier ist das Ergebnis sieht wohl nicht so gut aus. Vielen Dank für deine Hilfe.
Ich werde noch einen Versuch starten und mir nochmal ein TSL2561 bestellen. Gibt es eventuell eine sichere Quelle das man keinen Fake bekommt?
Dieser hier kam aus Deutschland.
Aber hier https://forum.fhem.de/index.php/topic,97964.msg913795.html#msg913795 kammen doch schon mal andere Werte
Das habe ich auch nicht verstanden, ev. war das ein anderer Sensor?
Am Besten nochmal indoor mit Original Adafruit example sketch alle 3 Integrationszeiten bei Gain0 durchlaufen lassen. Gibt es da einen chip der nicht 65535/65535 bei Full/IR hat?