Forum: Mikrocontroller und Digitale Elektronik IAQ2000 / Engine am Raspberry pi


von Frank (Gast)


Lesenswert?

Hallo,
ich habe einen VOC Sensor bekommen, hierbei handelt es sich um einen IAQ 
Engine (ähnlich dem IAQ2000) Der hängt auch schon am Pi Ic2 und wird von 
der Adressierung erkannt. Ich habe aber leider nichts gefunden womit ich 
den Sensor ansprechen/auslesen kann, wobei die Engine wohl im Gegensatz 
nicht beschrieben werden darf sondern nur gelesen. Hat jemand den den 
IAQ 2000 oder besser noch die Engine laufen und könnte mir ein File 
zukommen lassen damit ich weiterkomme. Leider bin ich in C völlig 
talentfrei vielleicht kann mir jemand helfen ? Vielen dank schonmal.

Gruß

Frank

: Verschoben durch User
von Dominik S. (dasd)


Lesenswert?

Hast du die Suche benutzt?
Es gibt direkt hier im Wiki einen Eintrag dazu...
http://www.mikrocontroller.net/articles/IAQ-2000

von Frank (Gast)


Lesenswert?

Jep, habe ich gelesen aber nur kann ich damit nichts anfangen. Ich 
benötige ein Programm / Script, oder was auch immer das den Sensor 
abfragt. Ich kann das nicht selbst deshalb frage ich hier um Hilfe.

von Dominik S. (dasd)


Lesenswert?

Frank schrieb:
> Jep, habe ich gelesen aber nur kann ich damit nichts anfangen. Ich
> benötige ein Programm / Script, oder was auch immer das den Sensor
> abfragt. Ich kann das nicht selbst deshalb frage ich hier um Hilfe.

Sorry, aber dann beschäftige dich damit, dann kannst du das ganze in 
absehbarer Zeit auch umsetzen.
Hier ohne Eigenleistung nach fertigen Lösungen zu fragen stößt nicht 
gerade auf freudige Gesichter, ist einfach nicht sehr höflich...

Warum willst du unbedingt etwas selbst machen, wenn du es eigentlich 
nicht kannst?
Wenn ich unbedingt eine Torte haben möchte dann lern ich eben backen 
oder geh in den Laden und kauf eine fertige.

Nicht böse gemeint, aber ein bisschen Eigeninitiative schadet nicht...

Du weißt doch schon, dass man den Sensor per I2C anspricht. Dann liegt 
es doch nahe sich mal etwas in I2C einzulesen.
Dannach wirst du vermutlich mit den Angaben im verlinkten Artikel was 
anfangen können.

Des weiteren bin ich mir sicher, dass es fertige I2C-Tools für den RPi 
gibt, die du nur noch benutzen musst.

Es ist ja beim besten willen nicht so, dass dir hier keiner helfen will, 
aber alles vorkauen will eben auch keiner.
Wenn du selbst was probiert hast und dann noch spezifischere Fragen hast 
werden die dir dann sicherlich gerne beantwortet.

von Frank (Gast)


Lesenswert?

Hallo,

nun ja, es ist halt unheimlich schwer, wenn man so etwas noch nie 
gemacht hat. Aber ich gebe dir ja recht, und ich habe mich in den 
letzten Tagen etwas eingelesen und versuche nun, das selbst umzusetzen. 
Aber wie gesagt ich würde immer noch sagen, dass ich keine Ahnung davon 
habe, aber du sagtest ja das ich Hilfe bekommen könnte :-)
Wenn ich das richtig verstanden habe läuft das Ganze wohl so ab :

Der I2C Bus wird in der Startkondition von SDA High auf Low gesetzt und 
SCL bleibt auf High. Damit kann der Sensor ausgelesen werden.

Dann werden die Adressbereiche MSB ( Byte 1 ) und LSB ( Byte 2 ) 
ausgelesen, wobei der Wert MSB mit 256 multipliziert wird und mit dem 
Wert LSB addiert wird.

Das Ergebnis wäre dann der Wert der Luftbelastung in ppm.
Ich hoffe ich habe das richtig verstanden. Da ich nun in C oder 
sonstigem völlig talentfrei bin versuche ich mich mal in Pyhton, nicht 
das ich mich da auskenne, aber ich versuche es mal:

 #!/usr/bin/python

import smbus
import time
import math
import RPi.GPIO as GPIO

#Adresse Ic2
IAQENGINE = 0xB5

# I2C Bus 0 oeffnen
Bus = smbus.SMBus(0)

# Signed Integer auslesen
def ReadSInt(Device, Adresse):

  # Auslesen der beiden Bytewerte
  MSB = Bus.read_byte_data(Device, Adresse)
  LSB = Bus.read_byte_data(Device, Adresse + 1)

# Wert MSB mit 256 multipli.
  Data = (MSB *256):
    MSB = MSB * 256

  # Datenbytes zusammenfuegen
  Data = (MSB << 8) + LSB

  return Data

# Ausgabe
  print "----------------------------------------"
  print "Luftbelastung " + Data + " ppm"
  print "----------------------------------------"

  Bus.close()

  time.sleep(1)

Könnte das so funktionieren, vor allem unter dem Aspekt das ich den 
Sensor nicht schreiben darf da er sich dann verabschieden kann. Schonmal 
vielen Dank für eure Hilfe.

Gruß

Frank

von Robert B. (robertb)


Lesenswert?

von http://kampis-elektroecke.de/?page_id=4303 zusammenkopiert? auch 
verstanden?

von Frank (Gast)


Lesenswert?

Dominik S. schrieb:
> Es ist ja beim besten willen nicht so, dass dir hier keiner helfen will,
> aber alles vorkauen will eben auch keiner.
> Wenn du selbst was probiert hast und dann noch spezifischere Fragen hast
> werden die dir dann sicherlich gerne beantwortet

Hallo Robert,

vielen Dank für deine Hilfe das bringt mich wirklich weiter. Aber wie du 
schon gesehen hast habe ich mich mit dem Thema beschäftigt und ich 
glaube ich weiß auch wie es gehen könnte, wobei es mit der Umsetzung 
noch etwas hapert.
Was ist falsch daran Vorlagen als Beispiel zu nutzen und es seinen 
Bedürfnissen anzupassen ?  Ich bin mir ganz sicher, dass Daniel das 
genau so sieht. Vielleicht meldet er sich ja hier noch zu Wort.

schöne Grüße

Frank

von Dominik S. (dasd)


Lesenswert?

Frank schrieb:
> Könnte das so funktionieren, vor allem unter dem Aspekt das ich den
> Sensor nicht schreiben darf da er sich dann verabschieden kann.

Naja, beschreiben wirst du ihn nicht, so lange du keine Funktion 
aufrufst die ein "write" oder ähnliches enthält :)
Ich denke die Gefahr das Teil kaputt zu machen ist eher überschaubar.

Funktionieren wird das so nicht. Habe zwar noch nie was mit Python 
gemacht aber im obigen Beispiel würdest du beispielsweise

>> MSB = Bus.read_byte_data(Device, Adresse)

aufrufen, ohne "Device" und "Adresse" jemals definiert zu haben.
Des weiteren scheint das zwischen "def" und "return Data" eine 
Funktionsdefinition zu sein - dieses Fkt rufst du aber auch niemals auf.
Wenn du noch nie was mit P. gemacht hast würde ich mal an anderer Stelle 
ansetzen.

Im Wiki 
(http://www.mikrocontroller.net/articles/Raspberry_Pi#Der_I2C-Bus) wird 
von "i2c-tools" gesprochen, die du per Kommandozeile nutzen kannst.

Aufgrund obiger Aussage

>> Der hängt auch schon am Pi Ic2 und wird von
>> der Adressierung erkannt.

kennst du die ja vielleicht auch schon.
An deiner Stelle würde ich erstmal versuchen mit diesen Tools das / die 
entsprechenden Register auszulesen.

Das ganze in ein Skript verpacken kannst du immer noch, wenn du merkst, 
dass du es schaffst an einen brauchbaren Wert zu kommen.

: Bearbeitet durch User
von Frank (Gast)


Lesenswert?

Ich habe den Sensor mal mit i2cget -y 1 0xB5 bzw i2cdump angesprochen 
und nun reagiert er nicht mehr. Mit ic2deteckt -y 1 ist er auch nicht 
mehr zu finden. Das war es dann wohl oder ?

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
Noch kein Account? Hier anmelden.