Digitales Thermometer mit Hygrometer Bauanleitung für Arduino mit Si7021

Für dieses Tutorial Brauchst du folgende Komponenten:

  • I2C Schnittstelle für LCD Display
  • Breadboard / Lochraster-Steckplatine Fullsize
  • Jumperkabel Dupont Set 10cm 60 Stk.
  • 16x2 Character LCD Display Blau 5V 1602
  • Arduino UNO kompatibles Board Atmega 328
  • Logic Level Converter 2-Kanal 5V/3.3V
  • Micro USB Kabel schwarz  1m

Beschreibung:

In diesem Tutorial möchte ich dir zeigen, wie du die Temperatur und die Luftfeuchtigkeit eines Si7021 Sensors auslesen kannst und die Werte anschliessend auf einem LCD Display anzeigen kannst. Der Aufbau der Schaltung sieht eigentlich recht einfach aus, aber es gab einige Probleme die wir etwas komplizierter lösen müssen. Das grosse Problem ist der SI7021 der nur mit 3.3V betrieben werden darf. Das Breakoutboard hat zwar auf der Speisung (VIN) einen Spannungsregler verbaut, jedoch auf der Logik der I2C Schnittstelle nicht. Bei meinem ersten Versuch habe ich den Sensor zerstört, als ich ihn auf dem Arduino UNO mit 5V ansteuerten wollte. Um den zweiten SI7020 nicht auch noch zu zerstören, habe ich einen Logik Level Konverter zusätzlich in die Schaltung integriert. Der Logiklevel Konverter konvertiert die 5V Spannung vom Arduino Uno auf 3.3V und umgekehrt. Die I2C Schnittstelle des LCD Displays hat mir leider auch noch etwas ärger gemacht. Nach langem Suchen habe ich jedoch die Fehler gefunden. Der erste Fehler ist mir unterlaufen, als ich das Display immer mit der falschen Adresse ansteuern wollte, die richtige Adresse des Displays ist 0x3F. Falls du dir mit der I2C Adresse nicht sicher bist, kannst du einfach mal nach einem «I2C Scanner Arduino» suchen und das Scanner Programm auf dein Arduino laden. Der Scanner führt dir alle Adressen auf, die auf der I2C Schnittstelle gefunden werden. Nachdem ich die richtige Adresse eingestellt hatte, gab es Probleme mit der «LiquidCrystal_I2C» Library, die ich über den Library Manager installiert habe. Problem war das auf dem Display immer nur das erste Zeichen angezeigt wurde. Nach einer längeren Durch recherchieren habe ich herausgefunden, dass ich die «LiquidCrystal_I2C» Version 1.1.1 installiert habe, jedoch ist das gemäss Library Manager die neuste Version. Auf GitHub ist jedoch eine neuere Version 1.1.3 verfügbar. Falls du also dasselbe Problem wie ich hast, einfach die neuste Version bei GitHub herunterladen und installieren. Nun habe ich genug über meine Probleme gejammert und legen wir mal los.


Zuerst installieren wir die «Wire» Library falls du diese noch nicht installiert hast. Um die Libary zu installieren gehst du in der Arduino Software auf «Sketch/Bibliothek einbinden/Bibliotheken verwalten», in der Suche gibst du «Wire» ein. Du wirst unter dem ersten Suchresultat die Arduino Wire Bibliothek finden die du auch gleich installierst. 



Nun brauchst du noch zwei Bibliotheken die du dir bei GitHub herunterlädst. Du findest sie unter folgendem Link:

Bei der LiquidCrystal_I2C musst du darauf achten, dass du die letzte Version auswählst:

SI7021 Library:


Um die Libary zu installieren, gehst du in der Arduino Software auf «Sketch/Bibliothek einbinden/.ZIP Bibliotheken einbinden». Anschliessend kannst du das ZIP der Bibliothek die du installieren willst anwählen. Achte darauf das du nicht zwei gleiche Bibliotheken installiert hast, sonst wirst du beim Laden der Programme Probleme haben. Falls dies der Fall ist, musst du die Bibliothek manuell aus der Ordner Struktur löschen.

Jetzt wo du alle Bibliotheken installiert hast kannst du dir den folgenden Sketch auf dein Arduino laden. Wenn du alles richtig verkabelt hast, solltest du nun ein funktionierendes Thermometer mit Hygrometer Funktion haben! Du kannst dir natürlich den Angezeigten Text beliebig abändern. Falls du auf dem Display nichts ablesen kannst, kann es auch sein, dass der Kontrast nicht gut eingestellt ist. Dazu musst du auf dem Potentiometer von der Display I2C Schnittstelle drehen, bis der Kontrast gut eingestellt ist.

/*******************************************************************************************
 *******************************************************************************************
 **                                www.bastelgarage.ch                                    **    
 ** Der Onlineshop mit Videoanleitungen und kompletten Bausätzen für Anfänger und Profis! **  
 *******************************************************************************************
 *******************************************************************************************
 ** Programm Beispiel zum ansteuern eines LCD Display über eine I2C Schnittstelle und     **
 ** Auslesen eines Si7021 Luftfeuchtigkeitssensor über denselben I2C Bus. Wichtig ist hier** 
 ** zu beachten das der Si7021 nicht 5V tolerant ist und nur mit 3.3 V Betreiben werden   **
 ** darf. Da ich den Sensor an einem Arduino UNO Betriebe setze ich einen Logik Level     **
 ** converter ein damit ich den Sensor mit 3.3V anschliessen kann.                        **
 **                                                                                       **
 ** Autor: Philippe Keller                                                                **
 ** Datum: April 2016                                                                     **
 ** Version: 1.0                                                                          **
 * *****************************************************************************************
*/
/************************( Importieren der genutzten Bibliotheken )************************/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SI7021.h>
/******************************( Definieren der LCD Symbolen )*****************************/
byte thermometer[8] = //Icon für Thermometer
{
  B00100,
  B01010,
  B01010,
  B01110,
  B01110,
  B11111,
  B11111,
  B01110
};
byte tropfen[8] = //Icon für Wassertropf
{
  B00100,
  B00100,
  B01010,
  B01010,
  B10001,
  B10001,
  B10001,
  B01110,
};
/********************************( Definieren der Objekte )********************************/
// Einstellen der I2C Adresse des Displays auf 0x3F für
// Character Display mit zwei Linien und 16 Zeichen
LiquidCrystal_I2C lcd(0x3F, 16, 2);
SI7021 sensor;
/****************************( Definieren der Globale Variablen )**************************/
float temperature;
int humidity;
void setup() {
  lcd.init();       // LCD Initialisieren
  lcd.backlight();  // LCD Hintergrundbeleuchtung ein
  lcd.clear();      // LCD Anzeige Löschen
  
  // Thermometersymbol auf LCD Speichern
  lcd.createChar(1, thermometer); 
  // Wassertropfensymbol auf LCD Speichern
  lcd.createChar(2, tropfen);
}
/***********************(Funktion um Sensor Werte zu aktualisieren)************************/
void sensorAktualisieren() {
  temperature = sensor.getCelsiusHundredths();
  temperature = temperature/100;
  humidity = sensor.getHumidityPercent();
}
/***********************(Funktion um Daten auf das LCD zu Schreiben)***********************/
void lcdSchreiben(){
  lcd.setCursor(0,0);
  lcd.print("bastelgarage.ch");
  lcd.setCursor(0, 1);
  lcd.write(1);               //Thermometer
  lcd.setCursor(2, 1);
  lcd.print(temperature,1);
  lcd.print((char)223);       //Gradzeichen
  lcd.print("C");
  lcd.setCursor(10, 1);
  lcd.write(2);               //Wassertropfen
  lcd.setCursor(12, 1);
  lcd.print(humidity);
  lcd.print("%");
}
void loop() {
  sensorAktualisieren();
  lcdSchreiben();
  delay(500);
}



Verbundene Suchwörter

Si7021 Temperatur Arduino I2C Luftfeuchtigkeit LCD Tutorial Anleitung Elektro Code Programm Beispiel

Kommentare

Hinweis: HTML ist nicht verfügbar!

Im Beitrag erwähnte Produkte

Digitales Profi Multimeter mit Autorange UT136B

Digitales Profi Multimeter mit Autorange UT136B

Das preiswerte UT136B von Uni-T ist ein kompaktes digital Multimeter, das sich perfekt für Hobbyanwe..

39,00CHF

Arduino UNO kompatibles Board Atmega328

Arduino UNO kompatibles Board Atmega328

Dieses Arduino UNO kompatible Board ist sehr gut verarbeitet und auch qualitativ hochstehend. Dieses..

12,90CHF

Si7021 hochgenauer Temperatur und Luftfeuchtigkeitssensor mit I2C

Si7021 hochgenauer Temperatur und Luftfeuchtigkeitssensor mit I2C

Mit diesem hochgenauen Luftfeuchtigkeitssensor kannst du dank der I2C Schnittstelle auf einfacheweis..

11,90CHF

Logic Level Converter 2-Kanal 5V / 3.3V

Logic Level Converter 2-Kanal 5V / 3.3V

Mit diesem Modul kannst du Controller mit unterschiedlichen Logik Spannungen verbinden. Zum Beispiel..

1,60CHF

Character LCD Display 16x2 Blau 5V 1602

Character LCD Display 16x2 Blau 5V 1602

Dieses super Display eignet sich perfekt für die ersten Versuche, um ein Display mit einem Arduino a..

8,90CHF

I2C Schnittstelle PCF8574 für LCD Display

I2C Schnittstelle PCF8574 für LCD Display

Das I2C Schnittstellen Modul vereinfacht die Ansteuerung der LCD Displays 1602 und 2004 erheblich. N..

4,50CHF

Jumperkabel Dupont Set 10cm 60 Stk.

Jumperkabel Dupont Set 10cm 60 Stk.

Dupont Kabel dienen zum schnellen verbinden von Bauteilen. In der Umgangssprache werden Dupont Kabel..

4,90CHF

Micro USB Kabel schwarz 1m

Micro USB Kabel schwarz 1m

Dieses Micro USB Kabel eignet sich hervorragend zum Programmieren unserer Boards. Du kannst es auch ..

3,00CHF

Breadboard / Lochraster Steckplatine Fullsize

Breadboard / Lochraster Steckplatine Fullsize

Ein Breadboard, auch Steckplatine oder Steckboard in der Umgangssprache, wird zum Aufbauen von Elekt..

8,50CHF

Lötstation 936 / 45 Watt / 200 bis 480 Grad

Lötstation 936 / 45 Watt / 200 bis 480 Grad

Diese preiswerte Lötstation eignet sich perfekt im Hobbybereich. Die Lötstation hat eine s..

49,00CHF