Entwicklung eines Innenraumsensors /Steuerung mit ESP32 und Nextion Display 7"

Begonnen von Tobias, 03 März 2014, 09:00:12

Vorheriges Thema - Nächstes Thema

Tobias

fidel hat Recht, es ist ein Luftgütesensor drauf, plus ein CO2-Sensor und damit Rauchmeldertauglich
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

PeMue

Hallo zusammen,

das ist zumindest die Theorie. Da die Rauchmelder ein relativ schnelles Ansprechverhalten haben müssen, müsste man die entsprechenden Ansprechzeiten für die Luftgütesensoren prüfen. Wenn diese zu langsam sind, geht die Funktion "Rauchmelder" damit nicht. Irgendwo habe ich noch einen Artikel von test, in dem die Messbedingungen beschrieben sind ...

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Tobias

ICh hatte den TGS2600 (VOC-Sensor) auf dem Breadboard an einem DS2450 drauf. Den Sensor angehaucht und es war sofort eine Änderung messbar.
Ich denke es ist also nur eine Frage der Firmware wioft der Sensor ausgelesen wird und bei Änderung > Threshold wird sofort eine Message an FHEM gesendet. Analog zum Lichtsensor der bei starker Lichtveränderung auch in Interrupt ausgibt auf den man reagieren kann.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

kurzer Zwischenstand: Das Layout ist fertig. Leider komme ich gerade nicht dazu potentielle Fehler im Layout zu finden bzw die Fehlerliste durchzugehen. Dummerweise habe ich bei einer Standard-Aura von 0.3mm Probleme mit dem ATMEGA2561, der hat nämlich seine Beinchen enger :( Und dadurch eine ellenlange Fehlerliste :(

Gerade viel Stress im Job... Die Kinder tun Ihr übriges... Jetzt bin ich erstmal auf Dienstreise nach Indien, komme erst wieder frühestens Anfang Dez. dazu...

Wer an diesem Projekt Interessiert ist und Target3001 Erfahrung hat, der kann gerne die "Nacharbeit" im 4-Augenprinzip erledigen :)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

#274
Endlich fertig. Hier das finale Layout... die nächsten Tage werde ich die Platinen bestellen.
@Andre, konntest du am Sketch schon etwas anpassen? Für dich sicherlich wichtig wie die finale Verschlatung ist?

Wichtig ist für den Sketch, das wenn nur der ATMEGA (nichts(!) weiter) auf dem Board ist, schon die ersten Debugmeldungen auf der seriellen konsole durchrauschen sollten bzgl. Status des Ladens der Einzelkomponenten. Wichtig für die Fehlersuche.
Deshalb gibt es hier auch dem ISP auch einen Seriellen Anschluss.
Weiterhin für Debugging-und Statusmeldungen habe ich dem Board 3 statt nur 1 LowCurrent-LED gegönnt: Rot/Gelb/Grün

Achso, wer kein Fan vom Panstamp ist, kann mit einem entsprechendem Asksin-Sketch daraus auch ein HomeMatic-Sensor machen :)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Bjoern777

Hallo Tobias,
bestellst du erstmal Prototypen zum Test oder schon für den produktiven Einsatz?

Ich hätte auch Bedarf. ;)

Gruß Björn

Tobias

Alles noch Protoypen zum Test... BIs jetzt läuft alles mit einem Panstamp nur bei JustMe1968.
Sobald die PLatinen da sind kann der erste Test mit dem ATMEGA2561 laufen. Spannend wird sicherlich das auflöten des ATMEGA2561 werden ;)

Einer meiner persönlichen Anwendungsfälle ist die Integration in meine Alarmanlage. Deswegen ist zum Schluss noch der PIR und der Soundsensor drauf gekommen.
Je nach Anwendungsfall kann man die benötigten Module aufstecken, oder eben nicht... So ist der Plan....
Ich teste das Layout nochmal mit den Hinweisen von UweH und dann gehts in die Bestellung - zusammen mit 1wire Umweltsensor/Panstamp-Umweltsensor und 1wire Temp/Luftfeuchtesensor.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

SpenZerX

#277
Hallo,

Gibt es da schon Erfahrungen mit dem TGS4161? Schon auf dem Breadboard am laufen?

10 Jahre Betriebsdauer ist ja schon ganz ok bei dem Preis.

Kann man ihn direkt am ADC betreiben bei einem ADC 0-1 Volt 10Bit? Oder macht das nur Sinn  mit Versträrker?  (Habe gelesen: Sensitivity: EMF= 44-72mV (EMF 350ppm - EMF 2500ppm)

Ist die Signalverarbeitung eher so einfach wie hier im Beispiel oder sind Probleme zu erwarten? (Vermutlich darf beim ADC-Auslesen der Funksender nicht senden)


CO2_cal = 0.38;  //varied from 0.22 - 0.49
float ppm_last;

void GetCO2()
{
for (int i = 0; i < 4; i++)
{
  senCO2 = ADC_Read;
  delay(20);
}
  CO2val = (CO2_cal)*(1024.0/5.0);
  CO2val = (CO2val - senCO2) * (5.0/1024.0)*1000.0;
  CO2ppm = pow(10, ((CO2val + 158.631)/62.877));
  CO2ppm = (0.95 * ppm_last + (1.0 - 0.95) * CO2ppm);
  ppm_last = CO2ppm;
  delay(30);
}



vlast3k

Zitat von: SpenZerX am 17 Februar 2015, 11:09:06
Gibt es da schon Erfahrungen mit dem TGS4161? Schon auf dem Breadboard am laufen?

Hallo,
Ich habe die letzten 2 Monaten verbracht um diesen sensor zu analysieren. Meine Erfarung ist auf diese Seite compiliert:
https://www.hackster.io/vlast3k/tgs4161-co2-research

Ich hoffe das wird euch nutzlich sein :)
Gruesse, Vladimir

Mickoeck

Hallo Vladimir!

Vielen Dank für deine ausführliche Beschreibung, sehr interessant!
Trotz deiner guten Erläuterungen habe ich nochmal ein paar konkrete Fragen, da ich gerade selbst an einer solchen Implementierung bin (jedoch in Zusammenhang mit einem Raspberry PI):

1.) Sollt sich bei Erhöhung der CO2-Konzentration die Ausgangsspannung erhöhen oder vermindern? Ich habe hierzu schon verschiedene Aussagen im Netz gefunden und aus dem Datenblatt werde ich auch nicht 100% schlau.

2.) Ich betreibe den Sensor ebenfalls mit dem Verstärker TLC271 in Kombination mit einem MCP3008 AD-Wandler. Somit schicke ich die geringe Ausgangsspannung des TGS4161 in meinen (nicht invertierenden) TLC271, wo ich ca. eine Verstärkung von 9 eingestellt habe (die Wiederstandwerte sind 2,7k und 21,8k). Zusätzlich habe ich noch einen 27pF Kondensator parallel auf den 21,8k  Wiederstand geschalten (soll anscheinend helfen, damit das Signal besser wird...). Mit dem verstärkten Signal gehts dann in den AD-Wandler (und dann schulssendlich in den Raspi) und hier habe ich (auch von dir beschrieben) ein Problem. Nämlich pendeln wie Werte wie wild herum (so um die +- 0,3 Volt).  Hast du hier eine Idee, wie ich das Pendeln besser in den Griff bekommen könnte? An einer instabilen Versorgungsspannung liegts glaub ich nicht, weil ich auch anderen Sensoren (z.B. den TGS2600 VOC-Sensor) korrekt betreiben kann.
Oder muss hier wirklich ein der Mittelwert genommen werden...klingt irgendwie nicht recht optimal für mich.

3.) Wenn ich auf den Figaro von oben drauf schaue und das kleine Füßchen nach Norden schaut, wie sind deiner Meinung nach die Pins angeordnet? Im Datenblatt gibt es nämlich eine "Bottom View", aber heißt das nun, dass der Sensor direkt von unten betrachtet wird oder nur schematisch von oben auf die unten Pins geschaut wird? Oder einfacher gesagt: befindet sich der Pin 1 links oder rechts vom Füßchen, wenn ich von oben auf dem Sensor schaue?

4.) Hast du auch ein Schaltbild, welches du zur Verfügung stellen könntest?

Danke Vorab für deine Antworten und sorry für die paar Basic-Fragen (bin noch nicht recht bewandert im Aufbau solcher Schaltungen)

Danke und LG
Michael

eldrik

#280
Zitat von: Mickoeck am 10 Mai 2015, 14:24:35
3.) Wenn ich auf den Figaro von oben drauf schaue und das kleine Füßchen nach Norden schaut, wie sind deiner Meinung nach die Pins angeordnet? Im Datenblatt gibt es nämlich eine "Bottom View", aber heißt das nun, dass der Sensor direkt von unten betrachtet wird oder nur schematisch von oben auf die unten Pins geschaut wird? Oder einfacher gesagt: befindet sich der Pin 1 links oder rechts vom Füßchen, wenn ich von oben auf dem Sensor schaue?

Das PDF des Herstellers zeigt doch die Nase am Gehäuse zur besseren Orientierung, welche Pins gemeint sind!

1 4
2 3

Zum TGS2600 erfasst du die Daten auch in Fhem? Wenn ja welche und welche Spannungswerte hast du hier? Ich betreibe gerade testweise (GästeWC) einen TGS2602 mit 10kOhm über GND an 5V und die Werte liegen um die 0,38V - 0,50V diese sind meiner Meinung nach aber nicht aussagekräftig genug, um in Abhängigkeit davon den Badlüfter zu schalten...

Greetz
Eldrik

Mickoeck

Hallo Eldrik!

Du hast schon recht, dass die Nase die Richtung angibt. Aber es ist ein Unteschied, ob bei der Ansicht, die Pins nach oben schauen oder ich quasi von oben (also wo das Gitter angebracht ist) auf die Pins schaue. Wie interpretierst du die Ansicht? Wenn du also wirklich von der Bodenansicht auf die Pins schaust (also du schaust direkt auf die Pins drauf), welche Pin-Anordnung ist deiner meiner nach die korrekte Anordnung?

Die Daten vom TGS2600 erfasse ich auch in FHEM, aber ich schicke diese per Telnet Anweisung von einem externen Programm an FHEM. Die Daten erfasse ich nur über einige wenige Stufen, also nicht über irgendwelche komplizierten mathematischen Berechnungen (da hatte ich auch meine Schwierigkeiten und bin nicht weiter gekommen).

Also hier mal der Sourcecode (ist in Pyhton für den Raspi geschrieben und hat auch gleich den Codes des AD-Wandlers inkludiert) des externen Programmes (die letzte Zeile ist dann die Telnet-Anweisung, welche FHEM mit Daten füttert):

# Reading data from the Figaro TGS-2600
# Interpreting values: 1=Fresh; 0,9=Clean; 0,8+0,7=Normal; 0,6+0,5=Foul; 0,4+0,3+0,2+0,1+0=Pollute

import time
import RPi.GPIO as GPIO
from math import pow, log
import os

GPIO.setmode(GPIO.BCM)

HIGH = True  # HIGH-Pegel
LOW  = False # LOW-Pegel

debug = 0

# Funktionsdefinition
def readAnalogData(adcChannel, SCLKPin, MOSIPin, MISOPin, CSPin):
# Pegel vorbereiten
GPIO.output(CSPin,   HIGH)   
GPIO.output(CSPin,   LOW)
GPIO.output(SCLKPin, LOW)
       
sendcmd = adcChannel
sendcmd |= 0b00011000 # Entspricht 0x18 (1:Startbit, 1:Single/ended)

# Senden der Bitkombination (Es finden nur 5 Bits Beruecksichtigung)
for i in range(5):
if (sendcmd & 0x10): # (Bit an Position 4 pruefen. Zaehlung beginnt bei 0)
GPIO.output(MOSIPin, HIGH)
else:
GPIO.output(MOSIPin, LOW)

# Negative Flanke des Clocksignals generieren   
        GPIO.output(SCLKPin, HIGH)
        GPIO.output(SCLKPin, LOW)
        sendcmd <<= 1 # Bitfolge eine Position nach links schieben
           
# Empfangen der Daten des ADC
adcvalue = 0 # Ruecksetzen des gelesenen Wertes
for i in range(11):
GPIO.output(SCLKPin, HIGH)
GPIO.output(SCLKPin, LOW)
# print GPIO.input(MISOPin)
adcvalue <<= 1 # 1 Postition nach links schieben
if(GPIO.input(MISOPin)):
adcvalue |= 0x01
time.sleep(0.5)
return adcvalue

# Variablendefinition
ADC_Channel = 1  # Analog/Digital-Channel
SCLK        = 18 # Serial-Clock
MOSI        = 23 # Master-Out-Slave-In
MISO        = 24 # Master-In-Slave-Out
CS          = 25 # Chip-Select

# Pin-Programmierung
GPIO.setup(SCLK, GPIO.OUT)
GPIO.setup(MOSI, GPIO.OUT)
GPIO.setup(MISO, GPIO.IN)
GPIO.setup(CS,   GPIO.OUT)

# TGS-2600 Definition
Vc = 5
RL = 700 #in Ohm
Ro = 24000 #in Ohm

#Debug-Mode
if (debug == 1):
while True:
# Berechnung Volt
volts = (readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS) * 3.3) / float(1023)
#volts = round(volts,5)
print "Volt: ",volts
   
# Berechnung Rs von TGS-2600
Rs = ((Vc*RL)/volts)-RL
print "RS: ", Rs

# Berechnung aktueller Luftwert (Rs) zum Frischluftwert (Ro)
Rs_Ro = Rs / Ro
Rs_Ro = round(Rs_Ro,2)
print "Rs_Ro: ", Rs_Ro
else:
# Berechnung Volt
volts = (readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS) * 3.3) / float(1023)

# Berechnung Rs von TGS-2600
Rs = ((Vc*RL)/volts)-RL

# Berechnung aktueller Luftwert (Rs) zum Frischluftwert (Ro)
Rs_Ro = Rs / Ro
Rs_Ro = round(Rs_Ro,2)

# Uebergabe Rs_Ro-Wertes an FHEM
shell_string = "echo 'setreading WZ.air_quality_tgs_2600 state %s;quit\n' | nc localhost 7072" % Rs_Ro
os.system(shell_string)

# Umwandlung des Rs_Ro-Wertes in Kategorien
if Rs_Ro >= 1:
Rs_Ro_stage = "Frischluft"
elif Rs_Ro < 1 and Rs_Ro >= 0.9:
Rs_Ro_stage = "saubere Luft"
elif Rs_Ro < 0.9 and Rs_Ro >= 0.7:
Rs_Ro_stage = "normale Luft"
elif Rs_Ro < 0.7 and Rs_Ro >= 0.5:
Rs_Ro_stage = "schlechte Luft"
elif Rs_Ro < 0.5:
Rs_Ro_stage = "verschmutze Luft"

# Uebergabe der Rs_Ro-Kategorien an FHEM
shell_string = "echo 'setreading WZ.air_quality_tgs_2600 VOC %s;quit\n' | nc localhost 7072" % Rs_Ro_stage
os.system(shell_string)


Hier auch noch ein einfacher Verdrahtungsplan: siehe Bildanhang

Falls jemand ein Verbesserungspotential sieht, nur her damit ;-)

So, und jetzt muss nur noch der TGS4161 rund laufen und dann kann ich endlich wieder mal durchschlafen ;-)

LG, Michael



eldrik

dank dir für die Infos!

Ich hatte meine Sicht auf die Pins extra abgebildet wie ich diese auf deine Frage unter 3. interpretiere.

Greetz
Eldrik


PeMue

Zitat von: vlast3k am 10 Mai 2015, 07:57:34
Hallo,
Ich hoffe das wird euch nutzlich sein :)
Gruesse, Vladimir
Hello Vladimir,

I change to english, because I think, this will be more convenient to you.
First of all, thanks for sharing your investigations.

On top I have several questions:
- Can you provide a schematics of your setup? I am quite sure, that the amplifiers do an offset and a gain adjustment. Also they might affect the accuracy of the sensor.
- Which max. range did you use for the amplifier? I think, the accuracy can be increased by spreading the range over the whole ADC range.
- How do you plan the initial calibration of the gas sensor? Will you do it with the reference of the K30?

Thanks and regards.

PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Tobias

Ich hatte vor 2 Jahren TEsts mit dem TGS1600 und einem 10k gemacht. Diese waren annähernd gleich dem des Velux VOC USB-Sensors. Deswegen habe ich exakt diese Konstellation auf dem Board verwendet.
Die fertigen Platinen liegen schon vor mir, ich kommt gerade nur noch nicht dazu da ich den Umweltsensor erst beenden möchte. Dann kann ich mich endlich diesem Projekt wieder wittmen. Ich denke Andre/Justme ist auch noch nicht soweit für eine erste ATMEGA2561 Sketch Variante..
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter