Luftfeuchtesensor AM2320
Der Luftfeuchtesensor AM2320 von AOSONG gibt die gemessene Luftfeuchte und die Umgebungstemperatur als Rohwerte aus. Der Sensor kann über I2C- oder OneWire-Schnittstelle angesprochen werde. Bisher habe ich das nur über die I2C-Schnittstelle getan.
Die I2C-Adresse ist mit 0xB8 fix vorgegeben und muss, da die Wire-Library nur 7-Bit-Adressen benötigt, um 1 Stelle nach rechts geshiftet werden (0xB8 >> 1). Die I2C-Übertragungsrate ist mit 100 kHz begrenzt. Auch hat die I2C-Schnittstelle und/oder der Sensor ein paar Eigenheiten. So muss z.B. der Sensor durch Ansprechen mittels Wire.beginTransmission(I2CAdd) und Wire.endTransmission() sozusagen "geweckt" werden, bevor er dann neuerlich mit beginTransmission die Übertragung von Funktion und Adressen beginnen kann. Und auch die Kommunikation mittels Wire-Library unterscheidet sich etwas vom Standard.
Testaufbau:
Verwendete Bauteile:
- 1 Arduino Uno
- 1 Luftfeuchtesensor AM2320
- 2 Widerstände 10 kOhm
Library MyAM2320I2C:
Ich habe, vorerst nur für Arduino, eine Library mit den nachfolgenden Funktionen geschrieben. Mit dem Attiny habe ich derzeit das Problem, dass die Datenauslesung aus dem AM2320 mit der TinyWireM-Library nicht richtig funktioniert. Hat da jemand Erfahrung damit?
- Abfrage, ob I2C-Schnittstelle ansprechbar ist
- Ermitteln der Rohwerte für Luftfeuchte und Temperatur
- Ermittlung der Luftfeuchte
- Ermittlung der Temperatur
Laut Datenblatt dürfen die Rohwerte (Library-Funktion: readRaw()) aus Sensorgründen nicht in kürzeren Zeitabständen als 2 Sekunden abgefragt werden, was ja bei Luftfeuchtigkeit und Umgebungstemperatur auch nicht wirklich Sinn macht. In der Library ist trotzdem ein entsprechender Schutz eingebaut, der ein zwei- oder mehrmaliges Auslesen innerhalb von 2 Sekunden verhindert. Die Ermittlung der Luftfeuchte und Temperatur erfolgt in diesem Fall mit den "alten" Rohwerten.
Die Library kann hier heruntergeladen werden:
Sollte die Library jemand verwenden oder testen, würde ich mich über eine Rückmeldung sehr freuen!
Verison 1.3
Leider kann ich hier keine "cpp"- oder "h"-Files hochladen, daher zum Verwenden der Library das Suffix ".txt" aus diesen Dateinamen entfernen und in einem neuen Verzeichnis mit dem Namen "MyAM2320I2C" im Sketchbook-Ordner im Ordner "libraries" speichern.
Zur Auflistung der Funktionen der Library geht es hier: Funktionen
Programmbeispiel MyAM2320I2C:
//Testprogramm für Luftfeuchte-Sensor AM2320
//Code fuer Arduino
//Author Retian
//Version 1.0
#include <MyAM2320I2C.h>
MyAM2320I2C MyAM(0xB8 >> 1); // I2C-Adresse um eine Stelle nach rechts shiften
float luftFeuchte, luftTemp;
void setup()
{
Serial.begin(115200);
if (MyAM.isReady()) Serial.println("AM2323 OK"); //Prüfen ob I2C-Schnittstelle ansprechbar
else
{
Serial.println("AM2323 Fehler");
while(1); //Im Fehlerfall geht's hier nicht weiter!
}
}
void loop()
{
MyAM.readRaw(); //Ermittlung der Rohwerte für Feuchte und Temperatur
luftFeuchte = MyAM.readHumidity(); //Ermittlung der Luftfeuchte
luftTemp = MyAM.readTemp(); //Ermittlung der Temperatur
Serial.print("Luftfeuchte: ");
Serial.print(luftFeuchte);
Serial.println(" %");
Serial.print("Lufttemperatur: ");
Serial.print(luftTemp);
Serial.println(" Grad C");
Serial.println();
delay(5000);
}