Arduino luftfuktighet og temperaturmåler I2C


Reklame - Artikkelen inneholder annonselenker

HDC1080 SensorEn liten (15,5 x 15,5mm) luftfuktighetsmåler og temperaturmåler som baserer seg på I2C (IIC) kommunikasjon. Det betyr at det er en bus-løsning som kun trenger to ledere i tillegg til + og -. Med en slik bus-løsning kan flere sensorer kobles på de samme to ledningene SDA og SCL..

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 :

 



Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *