China Post – Arduino Multi Function Shield

Arduino Multi Function Shield
Arduino Multi Function Shield

Einfaches Test Shield für den Arduino

Es gibt leider nur wenige und meist recht teure Arduino Shields mit einer LED 7-Segmentanzeige. Bei diesem Multi Function Shield ist wenigsten eine kleine Anzeige dabei und teuer ist es auch nicht. Daneben bietet es noch weitere Features.
Eigentlich sind 7-Segmentanzeige günstig und in diversen Ausführungen enthalten. Das verdrahten einer mehrstelligen Anzeige macht aber nicht so richtig Spaß.
Das Shield bekommt man ab 5€ bei eBay. Da neben der Anzeige noch weitere Funktionen integriert sind bietet es die Möglichkeit viele Funktionen des Arduinos auszuprobieren, ohne das zusätzliche Bauteile oder Verdrahtungsaufwand erforderlich ist.

Funktionen des Arduino Multi Function Shield

  • 4 digit 7-segment LED Display mit 2x 74HC595 Schieberegister
  • 4x LED
  • 10K Potentiometer als analoger Eingang
  • 3 x Taster
  • Piezo Buzzer
  • Sockel für DS18B20 Temperature Sensor
  • Sockel für Infrarot Empfänger
  • Sockel für BT Modul



Anbei ein kleines Programm um einige Funktionen zu testen:

[code lang=”arduino” title=”Testprogramm Multi Function Shield”]
//*******************************************************************************
//*******************************************************************************/
// LED D1 … D4
#define LED1 10
#define LED2 11
#define LED3 12
#define LED4 13
int LEDS[] = {10,11,12,13};

// Taster
#define KEY1 A1
#define KEY2 A2
#define KEY3 A3
unsigned char KEYS[] = {A1, A2, A3};

// Potentiometer
#define Poti A0
int Spannung = 0;

// Schieberegister für 7-Segment
int latchPin = 4;
int clockPin = 7;
int dataPin = 8;

// Buzzer
#define Buz 3

// 7-Segment
unsigned char Dis_table[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90}; // Ziffern 0 bis 7
unsigned char Dis_buf[] = {0xF1,0xF2,0xF4,0xF8}; // Schaltet die Segmente
unsigned char disbuff[] = {0, 0, 0, 0};

int SUM = 0;
int Flag_up = 1;
int Flag_up1 = 1;

void setup ()
{

// LED D1 … D4
for(int i=10; i<=13; i++)
{
pinMode(i, OUTPUT);
digitalWrite(i,HIGH);
}

// Taster A1 bis A3
for(int i=0; i<=2; i++)
{
pinMode(KEYS[i],INPUT);
//pinMode(KEYS[i],INPUT_PULLUP);
}

// Potentiometer
//pinMode(Poti,INPUT);

// Buzzer
pinMode(Buz,OUTPUT);
digitalWrite(Buz,HIGH);

// 7-Segment
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);

// Anzeige ausschalten
for(char i=0; i<=3; i++)
{
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,0xFF);
shiftOut(dataPin,clockPin,MSBFIRST,Dis_buf[i] );
digitalWrite(latchPin,HIGH);
delay(2);
}

Serial.begin(9600);

}

void led()
{
for(int i=0; i<=3; i++)
{
digitalWrite(LEDS[i],HIGH);
delay(1000);
digitalWrite(LEDS[i],LOW);
delay(1000);
}
}

void taster ()
{
for(int i=0; i<=2; i++)
{
if(digitalRead(KEYS[i]) == LOW)
{
delay(20);
if(digitalRead(KEYS[i]) == LOW)
{
digitalWrite(LEDS[i],LOW);
while(digitalRead(KEYS[i]) == LOW);
}
}
digitalWrite(LEDS[i],HIGH);
}
}

void analog()
{
Spannung = analogRead(Poti);
Spannung = map(Spannung, 0, 1023, 0, 5000);
Serial.print("Spannung = ");
Serial.println(Spannung);
delay(500);
}

void pwm ()
{
analogWrite(LED1,analogRead(Poti));
}

void buzzer ()
{
digitalWrite(Buz,LOW);
delay(10);
digitalWrite(Buz,HIGH);
delay(100);
}

void display1(void)
{
for(char i=0; i<=3; i++)
{
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,Dis_table[disbuff[i]]);
shiftOut(dataPin,clockPin,MSBFIRST,Dis_buf[i] );
digitalWrite(latchPin,HIGH);
delay(2);
}
}

void display()

{
for(int i=0; i<=3; i++)

{
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,Dis_table[disbuff[i]]);
shiftOut(dataPin,clockPin,MSBFIRST,Dis_buf[i] );
digitalWrite(latchPin,HIGH);
delay(2);
/*
Serial.print("Index Ziffer: ");
Serial.print("Dezimal= ");
Serial.print(Dis_buf[i]);
Serial.print("Binaer= ");
Serial.print(Dis_buf[i],BIN);
Serial.print(" Ziffer – dezimal: ");
Serial.print(Dis_table[disbuff[i]]);
Serial.print(" Binear: ");
Serial.println(Dis_table[disbuff[i]],BIN);
*/
}

}

void no_multiplex ()
{

for(char i=0; i<=3; i++)
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,0b1111111);
shiftOut(dataPin,clockPin,MSBFIRST,0B11111111 );
digitalWrite(latchPin,HIGH);
delay(2);

delay(1000);
}

void counter ()
{
SUM++;
disbuff[0]=SUM/1000;
disbuff[1]=SUM%1000/100;
disbuff[2]=SUM%100/10;
disbuff[3]=SUM%10;
}

void loop()
{
//taster ();
//led();
//display();
//counter();
//analog();
//pwm();
//buzzer();
}
[/code]

Arduino für Einsteiger mit dem blinkenlight shield

Wer die ersten Schritte mit dem Arduino machen möchte, für den könnte das blinkenlight shield von Franzis eine echte Hilfe sein.
Diese Platine für den Arduino ähnelt den üblichen Prototyp Shields, welche man für eine Schaltungen einsetzt. Ist aber mit 20 LED´s bestückt. Für sämtliche Anschlüsse ist aber auch noch ein Lötanschluss vorhanden.

Das blinkenlight shield ist ab 20€ Amazon zu haben. Ich habe überlegt selber eins zu löten. Aber es lohnt sich nicht richtig. Ein Prototyp Shield für den Arduino kostet mindestens 7€, dazu die 20 LED´s und Vorwiderstände, verbleiben noch ca. 10€. Wenn man jetzt noch die Arbeitszeit hinzurechnet, ist diese evtl. besser in eigene Programmierversuche angelegt.

Ein Kröte muss man allerdings bei diesem Preis schlucken:

Es ist kein Handbuch dabei.
Die gesamte Dokumentation inkl. Hardware und zahlreichen Programmbeispielen liegt im WEB unter blog.blinkenlight.net . Die Site ist auf englisch.
Die einfacheren Programm Beispiele bedürfen eigentlich keiner Erklärung.

Aber es gibt ja vielleicht auch eigene Projekte, für die ein Shield mit 20 LED als Anzeigemedium geeignet ist. Ich halte das Shield, insbesondere für Anfänger die mal ein Paar Schleifen programmieren und dies visual ausgeben möchten, für sehr geeignet.

Fazit:
Eine preiswerte LED Platine für den Arduino, für Leute die nicht gleicht Löten möchten.
Die umfangreiche WEB Doku bietet viel Anregung zum Lernen und Experimentieren.

Alternative 1 zu blinkenlight shield

Eine Mischung aus Arduino und dem blinkenlight shield in einem Stück. Inklusiv Handbuch.

Ich würde diese Summe eher in einen Arduino, Shield und ein gutes Handbuch investieren.
Für mich ist “Die elektronische Welt mit Arduino entdecken” eins der besten deutschen Bücher zum Thema Arduino

Alternative 2 zu blinkenlight shield

Ein weitere Alternative ist gleich ein komplexes LoL (Lot of  LED) Shield mit 126 einzelnen LED´s. Diese sind in Form einer Matrix angeordnet. Für die Programmierung steht eine Library zur Verfügung. Es lassen sich sehr schöne optische Effekte damit umsetzen. Vom Verständnis eher was für Fortgeschrittene.

Von der Firma Olimex gibt es zum Beispiel eine Vielzahl von Ausführungen, welche sich in LED Größe und Farbe unterscheiden.

Olimex  Led SHIELD-LOL matrix
Olimex Led SHIELD-LOL matrix

Alternative 3 zu blinkenlight shield

Wie schon erwähnt ein Arduino Prototyp Shield und 20 LED´s plus 20 Vorwiderstände. Wenn man es besonders schön haben will kann man auch LED Bargraph Anzeigen verwenden.