Hallo, ich habe einen STBTECH 12V LED Touch Dimmer Schalter von Amazon, den ich über einen ESP8266 auswerten möchte. Als Versorgungsspannung des Sensors (Anschlüsse rot(+) und schwarz(-)) benutze ich die 3,3V des ESP. Diese werden bei Berührung an dem Ausgang (Anschlüsse blau(+) und grün(-)) dann langsam - so über 1 bis 2 sec lang - bereit gestellt bzw. nach erneuter Berührung auf ca. 0.5V reduziert. Ich wollte nun den Vorgang auswerten, indem ich den Ausgang blau auf den Pin D1 des ESP und den Ausgang grün auf Masse gelegt habe. Leider wird in diesem Fall keine Spannung mehr am Ausgang ausgegeben. Mit dem Spannungsmesser kann ich nur bei direktem Anschluss an das Messgerät zwischen blau und grün Spannung messen (also ohne Masseverbindung von grün). Gibt es hier für mich eine Lösung? Ich hoffe, ich konnte mich verständlich ausdrücken. Viele Grüße
Erwin K. schrieb: > Diese werden bei Berührung an dem Ausgang > (Anschlüsse blau(+) und grün(-)) dann langsam - so über 1 bis 2 sec lang > - bereit gestellt bzw. nach erneuter Berührung auf ca. 0.5V reduziert. Wenn das ein LED-Dimmer ist, dann kommt da zu 99.9% PWM raus und keine analoge Spannung. Da musst du schon ein wenig mehr Aufwand betreiben.
Erwin K. schrieb: > Ich wollte nun den Vorgang auswerten, indem ich den Ausgang blau auf den > Pin D1 des ESP und den Ausgang grün auf Masse gelegt habe. Leider wird > in diesem Fall keine Spannung mehr am Ausgang ausgegeben. Da wird wohl ein N-Kanal Mosfet verbaut sein - es wird Minus geschaltet
@sebastian_r569 Wow, das ging ja fix. Danke für die Info. Das übersteigt dann wohl meine doch recht beschränkten Fähigkeiten. Schade. Könnte ich mit einem ESP8266 einen "anderen" Berührungssensor auswerten? Falls ja, wonach müsste ich suchen? P.S. Muss hier ne halbe Stunde warten, bevor ich antworten darf. Skurille Regel :-( @heijz Bin (s.o.) eher der Laie. @alecxs Nix. Der ESP soll per WLAN einfach nur ein Item in Openhab setzen.
:
Bearbeitet durch User
Erwin K. schrieb: > Könnte ich mit einem ESP8266 einen "anderen" Berührungssensor auswerten? > Falls ja, wonach müsste ich suchen? Du könntest statt einem ESP8266 einen ESP32 nehmen - der hat schon 8 Touchsensoren integriert Falls Du fertige Software suchst - schau mal z.B. hier: https://espeasy.readthedocs.io/en/latest/Plugin/P097.html
Du beziehst den Strom aus dem AMS1117 des ESP? Hängt überhaupt eine Last an? Du könntest natürlich Minus (grün) auf den Pin legen und mit pulseIn() auswerten.
:
Bearbeitet durch User
Super Infos. Danke. Da ich den ESP8266 schon habe, fange ich erstmal mit dem von alecxs an :-)
Ein N-Kanal Mosfet benötigt natürlich irgendeine Last. Häng mal einen 1- 10k dran damit Du ein sauberes PWM Eingangssignal erhältst. Hier mal ein Beispiel Code wie du das PWM Signal messen könntest:
1 | #define pulse_ip GPIO_NUM_5
|
2 | int ontime,offtime,duty; |
3 | float freq,period; |
4 | |
5 | void setup() |
6 | {
|
7 | pinMode(pulse_ip,INPUT); |
8 | Serial.begin(); |
9 | }
|
10 | |
11 | void loop() |
12 | {
|
13 | ontime = pulseIn(pulse_ip,HIGH); |
14 | offtime = pulseIn(pulse_ip,LOW); |
15 | period = ontime+offtime; |
16 | freq = 1000000.0/period; |
17 | duty = (ontime/period)*100; |
18 | |
19 | Serial.println(duty); |
20 | delay(1000); |
21 | }
|
Quelle: https://projecthub.arduino.cc/ambhatt/frequency-and-duty-cycle-measurement-using-arduino-20fbfb
:
Bearbeitet durch User
Danke für den Code, aber wo hänge ich den 10K "dran"? Zwischen Pin 5 und Masse? Und zusätzlich an Pin 5 den grünen Sensorausgang? Und was ist mit dem blauen?
Du hast noch nicht geantwortet wo die Stromversorgung her kommt. Wenn Vin+ (rot) = Vout+ (blau) = 3.3 V dann ist ein Lastwiderstand an Vout+ (blau) / Minus- (grün) dasselbe, wie ein Pull-up Widerstand an Vin+ (rot) / Pin D1. Vout+ (blau) kannst Du auch weg lassen. Wenn es mehr als 3.3 V sind müsste man sich über einen Spannungsteiler Gedanken machen. Zeichne doch bitte einen Schaltplan.
:
Bearbeitet durch User
Die Stromversorgung des ESP erfolgt über ein USB-Netzteil, also 5V. Der Sensor wird wie am Anfang beschrieben über den ESP mit 3,3V betrieben. Die Abb. zeigt meinen ursprünglichen Plan.
:
Bearbeitet durch User
Versuchs mal ohne Widerstand vielleicht reicht das schon. Sieht so aus als wäre da ein LED Treiber drin.
Erwin K. schrieb: > ich habe einen STBTECH 12V LED Touch Dimmer Schalter von Amazon, den ich > über einen ESP8266 auswerten möchte. Ist das dieser hier? https://www.amazon.de/STBTECH-Ber%C3%BChrungsschalter-Sensorschalter-Lichtleiste-erforderlich/dp/B0BX65MG58 Ist bei deinem intern Rot mit Blau oder Grün mit Schwarz verbunden?
Erwin K. schrieb: > Also einfach den Grünen an Pin5 und den blauen frei lassen? genau so. auf einem von beiden muss ja das PWM ankommen.
:
Bearbeitet durch User
Grrr. Muss wieder warten. @alecxs Da tut sich was. Handauflegen (so 1 sec) ändert den Wert auf ca. 0-60 bzw. größer 2100000000. Ein kurzes Antippen reicht leider nicht, ist aber okay so. Das hat mein Problem gelöst. Vielen vielen Dank! @rawi Meiner ist dieser https://www.amazon.de/dp/B0BX66ZR34?ref=ppx_yo2ov_dt_b_product_details&th=1 Weiß nicht, ob die gleich sind. Und aufmachen wollte ich meinen nicht.
Der 3,3V Regler auf dem Wemos Modul reicht gerade eben für das Modul selbst aus. Er eignet sich nicht zur Versorgung weiterer Lasten. Mit dem Aufbau ist kein stabiler Betrieb zu erwarten.
Danke für den Hinweis. Hatte eben auch schon einen Aussetzer beobachtet. Wäre die Situation bei einem ESP32 besser?
Erwin K. schrieb: > Wäre die Situation bei einem ESP32 besser? Der nimmt noch mehr Strom auf. Entscheidend ist der verbaute Spannungsregler, seine Kühlung, der Innenwiderstand des USB Kabels und der Zustand der Steckverbinder. Für beide ESP Chips empfiehlt der Hersteller eine Stromversorgung, die mindestens 500mA liefern kann - sonstige Bauteile drumherum kommen noch dazu. Wie viel Strom nimmt denn dein Sensor auf?
Erwin K. schrieb: > Handauflegen (so 1 sec) ändert den Wert auf ca. 0-60 bzw. größer > 2100000000. Da ist ein Überlauf. ändere mal auf unsigned long und mache einen typecast auf float
1 | unsigned long ontime,offtime,period; |
2 | ...
|
3 | duty = (int)((float)ontime/period*100); |
:
Bearbeitet durch User
@roehrmond Vielleicht war ich zu ungenau oben. Der ESP wird über ein USB-Steckernetzteil mit 1A versorgt. Die Aufnahme sollte also nicht das Problem sein. Ich dachte, du meintest, der 3,3V Anschluss hätte nicht genug Power für meinen Sensor. Wenn ich mein einfaches Vielfach-Messgerät anschließe, funktioniert die Schaltung nicht mehr. @alecxs Danke für die Ergänzung, aber mit ihr funktioniert es nicht mehr so gut wie vorher. Die Daten variieren jetzt zwischen 0 und 90, liegen aber oft auch in der Mitte, so dass keine "0" oder "1" gefunden werden kann. Die "Ausreißer" größer 2 000 000 000 kommen trotzdem vor. @Forenbetreiber Ich bin sehr glücklich, dass mir hier so schnell und kompetent geholfen wird, aber wenn ich auf einen Beitrag oft erst mit 30 Min. Verzögerung reagieren kann, ist das sehr frustrierend. So etwas habe ich noch in keinem anderen Forum erlebt.
Erwin K. schrieb: > Die Daten variieren jetzt zwischen 0 und 90, liegen aber oft auch in der > Mitte, so dass keine "0" oder "1" gefunden werden kann. Es wird der Tastgrad (duty cycle) des PWM ausgegeben in Prozent, also 0 - 100% ist schon richtig. Du musst Dir dafür schon selbst die Grenze ziehen was für Dich an oder aus ist (z.B. 20 % Prozent) und das in eine neue Variable schreiben:
1 | out = (duty < 20) ? 0 : 1; |
Wenn es immer noch unsauber ist, verwende einen Pull-up Widerstand. Erwin K. schrieb: > Die "Ausreißer" größer 2 000 000 000 kommen trotzdem vor. Dann liegt es wohl am fehlenden Timeout wenn kein PWM mehr gemessen wird. Füge mal ein Timeout hinzu, dann kannst Du die vorherigen Änderungen verwerfen.
1 | ontime = pulseIn(pulse_ip, HIGH, 50000); |
:
Bearbeitet durch User
Dank dir für die weiteren Infos. Probiere ich morgen weiter ... Bez. "Grenze ziehen" ist leider nicht so einfach, wenn 50 gleichermaßen für Low wie für High vorkommen kann.
Ach Quatsch, das ist ganz einfach. Schließe einfach eine LED an und entscheide, ab welcher Dimmstufe die für Deinen Geschmack "aus" ist. Im Zweifel nimm halt alles größer 0 % als "ein" an. P.S. Es kann sein dass der LED Treiber zu hochfrequent ist, maximal 50 kHz lassen sich sauber mit pulseIn() messen. Dazu müsste man aber mal ins Datenblatt des ICs schauen. Und dazu brauchen wir ein Foto von dem Aufdruck.
:
Bearbeitet durch User
Alexander schrieb: > P.S. Es kann sein dass der LED Treiber zu hochfrequent ist, maximal 50 > kHz lassen sich sauber mit pulseIn() messen. man könnte wohl auch einen Elko nebst Widerstand nehmen - dann einfach mit dem ADC auswerten? Aber es wohl auch ein selbst erschaffenes Problem - eigentlich soll ja kein bauseitig vorhandener und nicht änderbarer Touchsensor ausgewertet werden - es geht rein um die Erfassung eines Touchimpulses
:
Bearbeitet durch User
Ja das hatte ich auch im Sinn. Manche Bausteine können 1 MHz da würde mit pulseIn() natürlich nur Quatsch rauskommen. Trotzdem kann ein Blick ins Datenblatt nicht schaden. @Erwin K. (kaloschke) https://www.mikrocontroller.net/articles/Pulsweitenmodulation#DA-Wandlung_mit_PWM
:
Bearbeitet durch User
Alexander schrieb: > Manche Bausteine können 1 MHz da würde ... 1 MHz für einen LED-Dimmer? Das macht die Sache nur unnötig teuer, weil ausreichende EMV nicht vom Himmel fällt, ganz abgesehen von der Kühlung.
Wobei alles unter 100 Hz schon in den sichtbaren Bereich fiele. Du hast ja die Frequenz schon da, musst sie nur mal mit Serial.print() mit ausgeben.
Erwin K. schrieb: > Wenn ich mein einfaches Vielfach-Messgerät anschließe, funktioniert die > Schaltung nicht mehr. Mit welcher Einstellung hast du es wo angeschlossen? Zeichne das in den Schaltplan ein.
Erwin K. schrieb: > Der ESP wird über ein USB-Steckernetzteil mit 1A versorgt. OK. Dennoch kann das an schlechten Kabeln oder Steckverbindern scheitern. > Die Aufnahme sollte also nicht das Problem sein. Was für eine Aufnahme? > Ich dachte, du meintest, der 3,3V Anschluss hätte > nicht genug Power für meinen Sensor Kann sein. Kommt drauf an, wie vie Strom der Sensor aufnimmt. 10mA werden wohl gehen, 100mA sind sicher zu viel.
@alecxs Habe nun einen Pull-Up Widerstand (10k) dazu genommen und den von dir vorgeschlagenen Timeout. In jedem Fall kommen die Ausreißer IMMER, wenn der Duty cycle sinkt. Und nur dann. Hast du noch eine Idee?
Wo liegt denn die Frequenz? Schwankt die ebenfalls oder ist da eine eindeutige Frequenz messbar?
Du meinst den Wert für "freq" in deinem Code? Der schwankt so zwischen so zwischen 4000 und 5000.
Dann musst Du wohl leider zu Plan B übergehen, da die tatsächliche Frequenz anscheinend nicht erfasst wird. Hat der ESP8266 einen Analogeingang?
Dann geht's hier weiter. Schau mal ob Du irgendeinen Kondensator findest zum glätten, und dann berechne einen halbwegs passenden Widerstand. Alexander schrieb: > https://www.mikrocontroller.net/articles/Pulsweitenmodulation#DA-Wandlung_mit_PWM
Hmm. Das überfordert mich wahrscheinlich ... Wenn die Grenzfrequenz in deinem Link meiner obigen von 4000 bis 5000 Hz entspricht, könnte ich das Beispiel ja ungefähr so nehmen. Habe hier einen 10nF (auch 47nF) und einen 100k. Dann schließe ich "grün" vom Sensor an R1 an und U_Gleich an den Analogeingang?
Okay, dann mal herzlichen Dank an alle hier, besonders natürlich an alecxs!
Dir ist aber klar das Du einen Mega-Aufwand für ein eigentlich ganz einfaches Problem machst? Du willst wennich es recht verstehe einfach nur einen Berührungssensor haben? Denk vielleicht doch mal über einen ESP32 nach....
Beitrag #7651047 wurde vom Autor gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.