Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Was ist ein Mikrocontroller?

Ein Mikrocontroller (auch MCU oder µC) ist ein elektronisches Halbleiterelement, welches auf einem einzigen Chip mehrere Elemente, wie eine CPU, eine Uhr, Timer, I/O Ports und Speicher zur Verfügung stellt. Mikrocontroller werden heute in vielfältiger Art und Weise eingesetzt. Elektronische Produkte besitzen fast immer einen Mikrocontroller, welcher für die “Logik” der Produkte verantwortlich ist. Dabei verarbeitet er Eingaben von Sensorenund reagiert in dem er die Stellung oder Anzeige von Aktuatoren verändert.

Eine Besonderheit von Mikrocontrollern ist es, dass sch die Logik durch Programmierung verändern lässt. In diesem Workshop werden wir Arduino benutzen – eine Mikrocontroller Plattform welche am Interaction Design Institute Ivrea speziell für Interaction Design Studenten entwickelt wurde. Arduino besteht aus einem Mikrocontroller Board, sowie einer eigenen Integrierten Entwicklungsumgebung (IDE) welche es möglich macht, das Board via USB zu programmieren.

Hier gibt es eine Dokumentation zur Entstehungsgeschichte und Bedeutung des Arduino
 

Übersicht über C/C++

Für Arduino werden wir in C/C++ programmieren. Da Arduino auf Processing aufbaut sieht die Oberfläche und die Syntax beider Programme sehr ähnlich aus. Es gibt jedoch einige Unterschiede, welche wir im Laufe des Workshops beleuchten werden. Ihr solltet schon über einige Grundkenntnisse der Programmierung verfügen. Trotzdem gibt es hier eine kleine Wiederholung. Eine Komplette Referenz für Arduino erhaltet ihr hier.

Übersicht:

 

1
2
3
4
5
6
7
8
9
10
11
// Hier werden globale Variablen deklariert
 
void setup()
{
  // Die Setup Funktion wird genau einmal am Anfang ausgeführt
}
 
void loop()
{
  // Die Funktion Loop wird permanent ausgeführt
}

 

Variablen:

int (byte, int, uint, long, ulong)
Ganzzahlige Variablen
z.B. int x = 22;
float (double)
Fliesskomma Variablen
z.B. int y = 1.234;
char
Zeichen
z.B. char z = “a”;
String
Abfolgen von Zeichen
z.B. String testString = “Arduino”;
boolean
Schaltvariable
z.B. boolean state = false;

Operatoren:

Arithmetische Operatoren (+,-,*,/,=,%)
x = 3+2; // x = 5
y = 2-1; // y = 1
z = 5*2; // z = 10
i = 10/2; // i = 5
r = 9%5; // r = 4

Vergleichende Operatoren (,=,==,!=)

 

1
2
3
4
if(x<120) // Bedingung
{
  // Auszuführende Aktion
}

 

Boolsche Operatoren (&&,||,!)

 

1
2
3
4
if(digitalRead(2) == HIGH) // Bedingung
{
  // Auszuführende Aktion
}

 

Zusammengesetzte Operatoren (++,–,+=,-=,*=,/=)
x++ // x um eins erhöhen
y– // y um eins verringern
z+=2 // z um zwei erhöhen
i-=5 // i um fünf verringern

Kontroller:

if…

 

1
2
3
4
if(x>120)
{
  // Aktion wenn x grösser als 120
}

 

if…else

 

1
2
3
4
5
6
7
8
if(x>120)
{
  // Aktion wenn x grösser als 120
}
else
{
  // Aktion wenn x kleiner als, oder genau 120
}

 

for

 

1
2
3
4
for(int i=0; i<=255; i++)
{
  // Setzt i von 0 bis 255
}

 

switch case

 

1
2
3
4
5
6
7
8
9
10
11
switch(var)
{
case 1:
  // Aktion wenn var 1 entspricht
  break;
case 2:
  // Aktion wenn var 2 entspricht
  break;
default:
  // Aktion wenn var weder 1 noch 2 entspricht
}

 

while

 

1
2
3
4
5
6
var = 0;
while(var<120)
{
  // Aktion welche sich 120 Mal wiederholt
  var++;
}

 

break

 

1
2
3
4
5
6
7
8
9
10
11
for(int i=0; i<200; i++)
{
  digitalWrite(5,i);
  sensorWert = analogRead(0);
  if(sensorWert>200)
  {
    i = 0; // Schleife verlassen
    break;
  }
  delay(100);
}

 

return

 

1
2
3
4
5
6
7
8
9
10
11
int checkSensor()
{
  if(analogRead>200)
  {
    return 1; // checkSensor ist nun 1
  }
  else
  {
    return 0; // checkSensor ist nun 0
  }
}

 

Spezielle Funktionen:

pinMode(PIN)
Definiert ob ein PIN als Eingang oder Ausgang benutz wird
digitalRead(PIN)
Liesst den Wert an einem digitalen PIN (vorher als Eingang definiert)
digitalWrite(PIN, Wert)
Setzt einen Wert für einen PIN (vorher als Ausgang definiert)

analogRead(PIN)
Liesst den Wert eines analogen PIN
analogWrite(PIN, Wert)
Setzt den PWM Wert eines digitalen PIN (PWM = Pulse Width Modulation)

delay(Wert)
Pausiert das aktuelle Programm für eine definierte Zeit (Zeit wird in Millisekunden angegeben)

Übersicht Arduino Board

Aufgaben:

1. Nutz das Blink Beispiel (Exampels/Basic/Blink) und erweitere es um eine zweite LED.
2. Öffne das BlinkWithout Delay Beispiel (Exampels/Digital/BlinkWithoutDelay) und verstehe das Konzept.
3. Programmiere ein Lauflicht mit 3 LEDs, welches sich von einer zur anderen Seite bewegt.
4. Definiert eine eigene Funktion void blinkLED(int _Pin, int _duration) welche es ermöglicht unterschiedliche LEDs mit unterschiedlichen Geschwindigkeiten blinken zu lassen.

Weitere Informationen

Getting Started with Arduino – Massimo Banzi (2008)
Arduino – Die Arduino Website. Bitte anschauen…
Microcontroller – Was ist ein Mikrokontroller?

Reflektion

Mikrocontroller

In der ersten Lektion haben wir uns mit dem Mikrocontroller und dessen Schaltung und Programmierung vertraut gemacht. Folgende Inhalte waren dabei wichtig:
- Ein Mikrocontroller ist eine programmierbare elektronische Komponente.
- Wir verwenden die Arduino IDE, welche auf C/C++ basiert ist.

Bauteile

Des weiteren haben wir schon unterschiedliche elektronische Bauteile und Gesetzmässigkeiten angewandt. Dazu zählen:
- Wiederstand
- LED
- Kondensator

Hier zunächst weitere Informationen zu den betreffenden Bauteilen:
Make Presents: The Resistor
Make Presents: The LED
Make Presents: The Capacitor

Funktionen

setup(): Wird nur einmal zum Beginn des Programms aufgerufen. Hier werden weitere Funktionen aufgerufen (z.B. pinMode()).

loop(): Der Loop beinhaltet das eigentliche Programm und wird permanent ausgeführt. Die Geschwindigkeit, mit der das Programm aufgerufen wird hängt dabei von der Taktfrequenz des Prozessors und den Funktionen ab, die aufgerufen werden.

pinMode(): Definiert ob ein digitaler Pin als Input oder Output genutzt wird.

digitalWrite(): Schreibt einen Wert auf einen Pin (zunächst nur HIGH oder LOW).

delay(): Hält das Programm für eine definierbare Zeit an. Diese Funktion ist nicht so effektiv, wie die Nutzung von millis().

millis(): Hier wird die Aktuelle Systemzeit (in Millisekunden) zurückgegeben.