Det som er kjempeviktig med denne sensoren er at den kun skal ha 3.3v.
Koble opp slik:
Kort | 3.3v | GND | SCL | SDA |
UNO | 3.3v | GND | A5 | A4 |
Mega | 3.3v | GND | 21 | 20 |
Nano | 3.3v | GND | A5 | A4 |
Se denne siden for hvor du kan kjøpe delene.
Her er kildekoden til et enkelt program:
/* www.hushagehobby.no * Måling av luftfuktighet og temperatur - I2C * 3/5-2017 * * Test Arduino Mega - HDC1080 */ #include <Wire.h> #define Adr_luftfukt 0x40 //adressen til luftfuktighetsmåleren #define Adr_temp 0x00 // underadresse for å hente ut temperatur #define Adr_fukt 0x01 // underadresse for å hente ut luftfukt #define Adr_config 0x02 // underadresse ved konfigurering av annet en standard #define Adr_SN1 0xFB // underadresse for del en av s/n #define Adr_SN2 0xFC // underadresse for del to av s/n #define Adr_SN3 0xFD // underadresse for del tre av s/n #define Adr_ProdID 0xFE // underadresse for produsent ID #define Adr_SensID 0xFF // underadresse for sensortype int Verdi; //Verdien som leses av I2C sub-adressen void setup() { Serial.begin(9600); Serial.println("Starter opp Luftfuktighetsmåler"); Wire.begin(); Wire.beginTransmission(Adr_luftfukt); Wire.endTransmission(); Serial.print("Produsent nr:"); lesSensor8(Adr_ProdID,Verdi); //Les sensor - Produsent ID (8bit) Serial.println(Verdi,HEX); //konverterer desimaltall til Hexadesimal Serial.print("Type:"); lesSensor8(Adr_SensID,Verdi); // Les sensor - Type Serial.println(Verdi,HEX); //konverterer desimaltall til Hexadesimal Serial.print("S/N:"); lesSensor8(Adr_SN1,Verdi); // Les sensor - Første del av S/N Serial.print(Verdi,HEX); //konverterer desimaltall til Hexadesimal lesSensor8(Adr_SN2,Verdi);// Les sensor - Andre del av S/N Serial.print(Verdi,HEX); //konverterer desimaltall til Hexadesimal lesSensor8(Adr_SN3,Verdi);// Les sensor - Tredje del av S/N Serial.println(Verdi,HEX); //konverterer desimaltall til Hexadesimal Serial.println(""); Serial.println("****************************************************************************************************"); Serial.println(""); } void loop() { lesSensor8(Adr_temp,Verdi); Serial.print("Temp: "); float temp_C = (Verdi); temp_C /= 65536; // Utregning i henhold til datablad temp_C *= 165; temp_C -= 40; Serial.print(temp_C); Serial.println("*C"); lesSensor8(Adr_fukt,Verdi); Serial.print("Luftfuktighet: "); float humidity = (Verdi); humidity /= 65536; // Utregning i henhold til datablad humidity *= 100; Serial.print(humidity); Serial.println("%"); delay(1000); } void lesSensor8(int subAdresse, int& r){ Wire.beginTransmission(Adr_luftfukt); // Begynn kommunikasjon med sensors Wire.write(subAdresse); // Be om informasjon fra en sub-adresse Wire.endTransmission(); // Sier man er ferdig med å be om informasjon delay(70); // vent litt slik sensor får klargjør seg Wire.requestFrom(Adr_luftfukt,2); //to bytes r = Wire.read(); r <<= 8; // Bit shift - endrer hvilken bit i en byte som skal ha tilgang til. << *(venstre) indikerer hvilken vei (>> høyre) r |= Wire.read(); // slå sammen på bit nivå }
Det som kan avleses i «Seriell Overvåker» er da :