Für dieses Tutorial Brauchst du folgende Komponenten:

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);
}



DHT11 / DHT22 mit dem Arduino UNO auslesen Anleitung
In diesem kurzen Tutorial zeigen wir dir, wie einfach du die Temperatur und Luftfeuchtigkeit mit einem DHT11 Sensor und einem Arduino UNO auslesen kan...
UDS – Ugly Drum Smoker Bauanleitung
In diesem Tutorial möchte ich euch zeigen wie ich meinen UDS – Ugly Drum Smoker gebaut habe. Die Bauanleitung für den Smoker Grill ist in diesem Blog ...
1 Bemerkungen
Nath
Nath
Saturday 11. June 2016

Hallo, Warum brauchts du einen Logik Level converter? Das Arduino Uno hat doch einen 3.3V Ausgang. Ev. weil du das LCD und den Sensor über I2C betreibst? Ich habe noch eine andere Frage: Ich habe genau das gleiche LCD wie du hier, ich habe es aber bis jetzt noch nie geschafft das ich etwas auf die zweite Zeile geschrieben bekomme! Falls ich es mal schaffen sollte, das überhaupt etwas Text auf dem LCD erscheint. Ich habe div Librerys ausprobiert, verschiedene Beispiel-Codes ausprobiert und selber schon versucht etwas zusammen zu basteln. Bist jetzt ohne Erfolg, was mich zimmlich frustriert :-S. Hast du mir vielleicht einen Tipp, etwas das besonders beachtet werden sollte oder so? Gruss Nath

Philippe
Philippe
Saturday 11. June 2016

Hallo Nath, Man könnte den SI7021 auch über den 3V Anschluss vom Arduino speisen. Jedoch ist die Logik Spannung der I2C Schnittstelle vom Arduino immer noch 5V. Ich habe einen Sensor wegen diesen 5V zerstört, daher setze ich den Logic Level Converter ein. Das I2C Modul vom Display braucht jedoch 5V Pegel, daher gehe ich vom Arduino I2C zuerst auf das Display und erst dann via Logic Level Converter auf den SI7021. Kannst du auf die erste Zeile schreiben oder funktioniert das auch nicht? Was für eine Library benutzt du? Was für eine Hardware? Hast du auf dem Display auch ein I2C Adapter? Du kannst mir sonst auch mal den Code schicken. Gruess Philippe

Zeige 1 bis 1 von 1 (1 Seite(n))
Einen Kommentar hinterlassen
Anmerkung: HTML wird nicht unterstützt!