In diesem Tutorial möchte ich gerne ein weiteres Multifunktionales Shield vorstellen.
In dem Tutorial Arduino Lektion 36: Multifunktionales Shield habe ich bereits ein Multifunktionales Shield vorgestellt. Dieses mir nun vorliegende Modell hat jedoch einige andere Sensoren & Aktoren, welche mich zum Kaufen verleitet haben.
Auf dem Shield ist neben der Bezeichnung des Bauelementes auch der jeweilige Pin aufgedruckt, welcher benutzt werden muss. Dieses finde ich sehr gut und macht dieses Shield auch gleich für Anfänger (wohl die eigentliche Zielgruppe) interessanter.
Bezug
Das Shield kann Bsp. bei ebay.de* für ca. 7 € bezogen werden.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Sensoren & Aktoren
Auf dem Shield sind folgende Sensoren & Aktoren verbaut
- DHT11 (Temperatur, Luftfeuchtigkeit),
- LM35DZ,
- Piezo Buzzer,
- IR Sensor,
- Fotowiderstand,
- RGB LED,
- rote LED,
- blaue LED,
- Drehpotentiometer,
- 2 Taster
Montage auf dem Mikrocontroller
Das Shield wird auf den Mikrocontroller gesteckt, dabei werden alle Pins vom Shield verdeckt. Jedoch sind auf dem Shield mehrere Pins hinausgeführt und somit können zusätzliche Sensoren & Aktoren angeschlossen werden.
Was mir jedoch aufgefallen ist, dass bei der Bezeichnung VCC nicht dabei steht, ob diese 3,3V oder 5V ist und dieses kann bei bestimmten Sensoren schon entscheidend sein.
Nach einem kurzen durchmessen der Pins habe ich festgestellt das alle VCC Pins 5V haben.
Betrieb am Arduino
Wie eingangs erwähnt wird das Board auf den Mikrocontroller gesteckt, dieses ist kompatibel mit dem Arduino UNO, Leonardo, Mega. Um das Board mit dem Nano oder Micro zu verbinden muss hier mit entsprechenden Breadboardkabeln arbeiten. In diesem Tutorial möchte ich mich jedoch auf den Arduino UNO und Leonardo beschränken.
Wenn man dieses Board am Arduino UNO betrieben möchte, muss man darauf achten, dass die Kontakte des Tasters SW2 nicht auf dem Gehäuse der USB Buchse aufliegen.
Aufgrund dieses “Problems” verwende ich auch bei diesem Multifunktionalem Shield den Arduino Lenoard, denn dieser besitzt eine Mini USB Buchse und somit besteht keine Möglichkeit zum Kurzschluss.
Wenn man keinen Arduino Lenoardo zur Hand hat, so kann man die USB Buchse auch mit etwas Isolierband gegen Kurzschluss isolieren.
Quellcode für die Sensoren & Aktoren
Nachfolgend möchte ich nun kurz einen Sketch vorstellen in welchem der Sensor bzw. Aktor betrieben wird.
Die meisten der Sensoren und Aktoren habe ich bereits in separaten Tutorials beschrieben, diese werde ich dann an den Stellen verlinken.
Digitale Bauelemente
Temperatur & Luftfeuchtigkeitssensor DHT11
Den Temperatur & Luftfeuchtigkeitssensor DHT11 habe ich bereits in einem Tutorial behandelt.
Technische Daten
- Messbereich der relativen Luftfeuchtigkeit 20 % bis 90 %
- Toleranz des Messbereiches für die relative Luftfeuchtigkeit ±5 %
- Messbereich der Temperatur 0 bis 60 °C
- Toleranz des Messbereiches für die Temperatur ±2 °C
#include "DHT.h" #define DHT11PIN 4 #define DHT11TYPE DHT11 DHT dht11(DHT11PIN, DHT11TYPE); void setup(){ Serial.begin(9600); dht11.begin(); } void loop(){ float humidyDHT11 = dht11.readHumidity(); //relative Luftfeuchtigkeit vom Sensor DHT11 lesen float tempDHT11 = dht11.readTemperature(); //Temperatur vom Sensor DHT11 lesen if (isnan(humidyDHT11) || isnan(tempDHT11)) { Serial.println("DHT11 konnte nicht ausgelesen werden"); } else { printValues("DHT11",humidyDHT11, tempDHT11); } delay(2500); //2,5 sek. Warten, der DHT11 Sensor stellt alle 2 sek. neue Werte bereit. } void printValues(String sensor, float humidy, float temp){ Serial.print(sensor); Serial.print("\t"); Serial.print("Luftfeuchte: "); Serial.print(humidy); Serial.print(" %\t"); Serial.print("Temperatur: "); Serial.print(temp); Serial.println(" C"); }
RGB LED
In dem von mir erworbenen Shield war leider die RGB LED defekt. Sobald ich ein neues vorliegen habe, werde ich diesen Teil des Tutorials befüllen.
LEDs & Taster
Die Taster SW1 & SW2 sind über den digitalen Pins D2 sowie D3 erreichbar. In folgendem Sketch schalte ich die blaue LED und die rote LED jeweils an bzw. aus, wenn einer der Taster betätigt wird.
#define SW1 2 // digitaler Pin D2 #define SW2 3 // digitaler Pin D3 #define LED_ROT 12 //LED - rot am digitalen Pin D12 #define LED_BLAU 13 //LED - blau am digitalen Pin D13 void setup() { pinMode(SW1, INPUT); pinMode(SW2, INPUT); pinMode(LED_ROT, OUTPUT); pinMode(LED_BLAU, OUTPUT); } void loop() { //Wenn der Taster SW1 gedrückt wird dann soll die blaue LED aufleuchten. digitalWrite(LED_BLAU,digitalRead(SW1)==HIGH?LOW:HIGH); //Wenn der Taster SW2 gedrückt wird dann soll die rote LED aufleuchten. digitalWrite(LED_ROT,digitalRead(SW2)==HIGH?LOW:HIGH); }
Infrarot Empfänger
Der Empfang eines IR Signals wird auf dem Multifunktionalem Shield mit dem Aufleuchten einer kleinen SMD LED quittiert, welche hinter dem IR Empfänger sitzt.
Für den Betrieb des IR Empfängers wird die Bibliothek “IRremote.h” benötigt, welche vom GitHub Repository von z3t0 geladen werden kann. Wie man eine Bibliothek in der Arduino IDE installiert habe ich bereits im gleichnamigen Tutorial Arduino IDE, Einbinden einer Bibliothek erläutert.
#include <IRremote.h> int irPin = 6; //IR LED int led1Pin = 13; //LED 1 (blau) int led2Pin = 12; //LED 2 (rot) boolean led1Status = false; boolean led2Status = false; IRrecv irrecv(irPin); //Objekt initialisieren für die IR Übertragung decode_results results; void setup() { pinMode(irPin, INPUT); //Den IR Pin als Eingang deklarieren. irrecv.enableIRIn(); //Den IR Pin aktivieren Serial.begin(9600); //Serielle kommunikation mit 9600 Baud beginnen. } void loop(){ if (irrecv.decode(&results)) { //Wenn etwas gelesen wurde dann... //Ausgabe des Wertes auf die Serielle Schnittstelle. Serial.println(value, DEC); int value = results.value; switch (value){ case 26775 : //Taste 1 led1Status = !led1Status; //umkehren des Status für die LED 1 if(led1Status == true){ digitalWrite (led1Pin, HIGH); //LED anschalten } else { digitalWrite (led1Pin, LOW); //LED ausschalten } break; case -26521 : //Taste 2 led2Status = !led2Status; //umkehren des Status für die LED 2 if(led2Status == true){ digitalWrite (led2Pin, HIGH); //LED anschalten } else { digitalWrite (led2Pin, LOW); //LED ausschalten } break; } irrecv.resume(); // auf den nächsten Wert warten delay(250); // kurze Pause von 250ms damit die LED aufleuchten kann. } }
Je nach verwendeter IR Fernbedienung können die Werte für die Taste 1 & Taste 2 abweichen. Daher gebe ich in diesem Sketch zusätzlich den Wert auf dem seriellen Monitor der Arduino IDE aus.
Buzzer
#define BUZZER 5 int minValue = 100; int maxValue = 1500; void setup() { pinMode(BUZZER, OUTPUT); } void loop() { //von der Frequenz minValue bis maxValue for(int i = minValue;i<maxValue;i++){ playTone(i); } //von der Frequenz maxValue bis minValue for(int i = maxValue;i>minValue;i--){ playTone(i); } } void playTone(int freq){ //gibt einen Ton auf dem Buzzer wieder mit der Frequenz freq und //einer dauer von 25ms. tone(BUZZER, freq,25); //kleine Pause von 2ms. delay(2); }
analoge Bauelemente
Temperatursensor LM35DZ
In dem von mir erworbenen Shield war leider der Temperatursensor LM35DZ defekt. Sobald ich ein neues vorliegen habe, werde ich diesen Teil des Tutorials befüllen.
Fotowiderstand
Der Fotowiderstand ist am analogen Pin A1 angeschlossen und wird mit dem Befehl “analogRead(A1)” ausgelesen.
void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(A1)); }
Drehpotentiometer
Der Drehpotentiometer ist am analogen Pin A0 angeschlossen und kann mit nur einer Zeile Code ausgelesen werden. Der mögliche Wertebereich ist 0 bis 1023.
void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(A0)); }
Fazit
Ein schönes Shield und für den Anfänger ist auch viel Brauchbares dabei, bedauerlicherweise war bei meinem die RGB LED sowie der analoge Temperatursensor LM35DZ defekt.
Was diesem Shield guttun würde wäre eine digitale LCD Anzeige für die Temperaturwerte, diese kann man jedoch auch bequem über die Stiftleisten anschließen, welche auf dem Shield vorhanden sind.
Des Weiteren sind nur die 5V nach außen gelegt, hier könnte man noch die 3,3V des Mikrocontrollers anbieten.