Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 520

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 535

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 542

Deprecated: Assigning the return value of new by reference is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 578

Deprecated: Function set_magic_quotes_runtime() is deprecated in /www/htdocs/w009f8cd/blog/wp-settings.php on line 18

Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1244

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/classes.php on line 1442

Strict Standards: Redefining already defined constructor for class wpdb in /www/htdocs/w009f8cd/blog/wp-includes/wp-db.php on line 306

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /www/htdocs/w009f8cd/blog/wp-includes/cache.php on line 431

Strict Standards: Declaration of Walker_Comment::start_lvl() should be compatible with Walker::start_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::end_lvl() should be compatible with Walker::end_lvl(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::start_el() should be compatible with Walker::start_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::end_el() should be compatible with Walker::end_el(&$output) in /www/htdocs/w009f8cd/blog/wp-includes/comment-template.php on line 1266

Strict Standards: Redefining already defined constructor for class WP_Dependencies in /www/htdocs/w009f8cd/blog/wp-includes/class.wp-dependencies.php on line 31

Strict Standards: Redefining already defined constructor for class WP_Http in /www/htdocs/w009f8cd/blog/wp-includes/http.php on line 61
Physical Computing

Relais

Ein Relais ist ein Elektromagnet mit einem angebauten Schalter. Legt man eine Spannung an den Elektromagneten an, schaltet sich der Schalter um. Da der integrierte Schalter nicht elektrisch mit dem Elektromagneten verbunden ist, kann man mit dem Relais externe Stromkreise steuern. Beispiele sind z.B. Handytasten und Tasten von Digitalkameras.

Weil Arduino nicht genug Strom zur Verfügung stellen kann, um das Relais zu steuern, muss man den Schaltstrom aus dem Output-Pin mit einem Transistor vorverstärken.

Wichtig: Beim Abschalten eines Elektromagneten entsteht ein Rückflussstrom. Dieser ist genau umgedreht gerichtet, wie der Schaltstrom. Damit dieser Rückflussstrom keinen Schaden am Arduino-Board oder dem Transistor verursacht, muss er mit einer Diode (D) abgefangen werden. Die Diode muss in Sperrrichtung über das Relais geschalten werden.

Videolink zur Funktionsweise.

Wikipedia: Relais, Diode.

Transistoren

Transistoren werden zur Verstärkung und zum Schalten von Signalen (Strömen) benutzt. Will man Schaltkreise mit größerem Strombedarf kontrollieren, muss man den Strom, den das Arduino-Board liefert verstärken.

Einen typischen npn-Transistor hat drei Beinchen. Hält man ihn mit den Beinchen nach unten und der flachen Seite nach vorn, werden die Beinchen von links nach rechts Emitter, Basis und Kollektor genannt. Der Kollektor wird mit dem GND verbunden. Wird der Transistor über ein HIGH-Signal (+) an der Basis eingeschalten, kann Strom vom Kollektor zum Emitter fließen. Hier kann man nun den Schaltkreis, den man Steuern will anschließen (z.B. 5 LEDs parallel und ein Widerstand in Reihe dazu).

Wichtig ist, dass die Basis des Transistors durch einen großen Widerstand (1-10 kOhm) geschützt wird.

Mehr über Transistoren gibt es bei Wikipedia.

Parallelschaltung

Schaltet man mehrere Verbraucher (z.B. LEDs) parallel, also nebeneinander, teilen sich die Bauteile den zur Verfügung stehenden Strom. Die Eingangsspannung liegt auch bei allen Verbrauchern an – ändert sich also nicht. Schaltet man zwei LEDs á 20 mA in Reihe, beträgt die Gesamtstromaufnahme der Schaltung 40 mA. Ein Kanal des Arduino-Boards kann zwischen 60 und 80 mA zur Verfügung stellen.

Der Widerstand (R) der Schaltung ergibt sich aus: 1/Rges=1/R1 + 1/R2.

Benötigt man höhere Ströme muss die Schaltung durch Transistoren oder Schaltrelais verstärkt werden.www.physical-computing.de

Reihenschaltung

Reihenschaltung

Schaltet man mehrere Verbraucher (z.B. LEDs) in Reihe, also hintereinander, teilen sich die einzelnen Bauteile die zur Verfügung stehende Spannung. Liegt der Wert der eingehenden Spannung bei 5 V und schaltet man zwei baugleiche LEDs hintereinander, so liegt bei jeder LED jeweils eine Spannung von 2,5 V an. Handelt es sich um vier LEDs, so liegt bei jeder LED eine Spannung von 1,25 V an, d.h., dass die LEDs nur sehr dunkel leuchten werden, da die Spannung für die volle Leuchtkraft nicht ausreicht.

Der Strom in der Schaltung ändert sich nicht. Wenn eine LED eine Stromaufnahme von 20 mA hat, so hat eine Reihenschaltung aus vielen LEDs immer noch eine Stromaufnahme von 20 mA.

Der Widerstand (R) der Schaltung ergibt sich aus Rges=R1+R2.

Spannung und Strom

Elektronen, die durch einen Leiter fließen können Arbeit verrichten (LEDs können leuchten, Motoren können sich drehen). Man spricht von elektrischer Energie. Damit sich Elektronen bewegen ist ein Potentialunterschied nötig. Auf der einen Seite muss ein Elektronenüberschuss (GND oder Minus-Pos), auf der anderen Seite ein Elektronenmangel (5V+ oder Plus-Pol) vorliegen.

Der Elektrische Strom (I) bezeichnet die Anzahl der Elektronen, die durch den Leiter fließen, die Spannung (V) gibt Aussage über die Geschwindigkeit der Elektronen.

Der elektrische Widerstand (R) bezeichnet den Grad, in dem die Elektronen am Durchfluss behindert werden. Er ergibt sich aus: R=U/I. Der Widerstand wird in Ohm, der Strom in Ampere bzw. Milliampere und die Spannung in Volt angegeben.

Analoge Ein- und Ausgabe

Fritzing Sketch Analog Input Output

Fritzing Sketch Analog Input Output

In diesem Beispiel wird eine LED über ein Potentiometer an- und ausgedimmt. Das Potentiometer ist auf der einen Seite mit dem 5V+ und auf der anderen Seite mit dem GND verbunden. Das mittlere Beinchen des Potentiometers ist mit dem Analog In 3 verbunden.

Wichtig hier bei ist, dass eine analoge Ausgabe nur auf PWM-Kanälen funktionieren kann (Digital Pins 3,5,6,9,10 oder 11)

/* Grundlagen analoge Ein- und Ausgabe
Autor: Stefan Hermann
URL: www.physical-computing.de */

int ledPin1=3; // wichtig ist, dass PWM-Pins benutzt werden (Pins: 3,5,6,9,10,11)
int potiPin=3; // Analog In
int val; // Speichert den aktuellen Sensorwert zwischen

void setup(){
pinMode(ledPin1,OUTPUT); // deklariert den Pin von LED1 als Ausgang
}

void loop(){
val=analogRead(potiPin); // der aktuelle Poti-Wert wird eingelesen. es können Werte zwischen 0 und 1023 entstehen
// die Analoge Ausgabe erfolgt auf digitalen Pins. Werte zwischen 0 und 255 können angegeben werden
analogWrite(ledPin1,val/4); // val/4 ergibt Werte zwischen 0 und 255
}

Analoger Input - einfache Sensoren

Die Möglichkeit mit Mikrokontrollern analoge Signale auszulesen, eröffnet uns sehr spannende Anwendungen, doch bevor wir uns in das nächste Beispiel vertiefen, noch ein paar Worte zur Natur der analogen Signale.

Wir hatten gelernt, dass digitale Signale entweder an oder aus sind, d.h. in einem Stromkreis mit 5V Versorgungsspannung ist ein digitales Signal entweder 0V oder 5V.
Ein analoges Signal verhält sich etwas anders, da sich hier die Spannung verändert. In oben genanntem Stromkreis könnte ein analoges Signal jeden Wert zwischen 0V und 5V einnehmen. Anders ausgedrückt: Über die Spannung wird ein Wert übertragen. Wie die Spannung so verändert werden kann, werden wir in einem späteren Artikel zu Spannungsteilern sicher mal erklären, jetzt wollen wir jedoch erstmal eine Anwendung mit dem Lichtsensor vorstellen.

Dazu brauchen wir: 1 Arduino, 1 Breadboard, 1 Lichtsensor, 1 Widerstand (Größe muss erst bestimmt werden), 1 Multimeter

Um herauszufinden wie groß der Referezwiderstand für den Lichtsensor sein muss, benutzen wir die Axel-Benz-Formel - in dem entsprechenden Artikel ist auch erklärt was man mit dem Multimeter machen muss.

Anschließend bauen wir die Schaltung auf: GND führt zum Widerstand, Widerstand wird mit Sensor verbunden, Sensor mit +5V. Zwischen Widerstand und Sensor kommt noch die Verbindung zum Pin.

Schaltung für analogen Input vom Lichtsensor Fritzing Sketch

Dann muss nur noch der Code aufs Arduino übertragen werden und schon sind wir fertig. Hier habe ich wieder eine angepasste Version von einem Beispiel aus der Arduino Bibliothek. Die Brenndauer der LED wird hier durch die Helligkeit im Raum bestimmt.


/*
* AnalogInput
* by DojoDave <http://www.0j0.org>
*
* Turns on and off a light emitting diode(LED) connected to digital
* pin 13. The amount of time the LED will be on and off depends on
* the value obtained by analogRead(). In the easiest case we connect
* a potentiometer to analog pin 0.
*
* http://www.arduino.cc/en/Tutorial/AnalogInput
*/

int potPin = 0;    // select the input pin for the potentiometer
int ledPin = 13;   // select the pin for the LED
int val = 0;       // variable to store the value coming from the sensor

void setup() {
pinMode(ledPin, OUTPUT);  // declare the ledPin as an OUTPUT
}

void loop() {
val = analogRead(potPin);    // read the value from the sensor
digitalWrite(ledPin, HIGH);  // turn the ledPin on
delay(val);                  // stop the program for some time
digitalWrite(ledPin, LOW);   // turn the ledPin off
delay(val);                  // stop the program for some time
}

Jetzt ist es an euch, andere Anwendungen zu entdecken und auszuprobieren. Wir freuen uns übrigens sehr, wenn ihr von euren Erfahrungen in den Kommentaren berichtet.

Noch ein Tip: Exakt die gleiche Schaltung kann man auch für einen FSR-Sensor benutzen (der z.B. messen kann, wie stark man mit dem Finger drauf drückt).

Axel-Benz-Formel

Hallo liebe Leute,

auch wenn wir versuchen, die Grundlagen des Physical-Computings so einfach und unproblematisch wie möglich zu gestalten, braucht man leider doch hin und wieder auch eine Formel, wie z. B. diese Axel-Benz-Formel:

Axel-Benz-Formel

Diese Formel hilft einem, den passenden Referenzwiderstand zu einem analogen Sensor zu finden. Ich werde Euch am Beispiel eines Lichtsensors kurz erklären, wie das funktioniert.

Dazu brauchen wir zuerst ein Multimeter, bzw. ein Messgerät mit dem man den Widerstand eines Bauteils bestimmen kann und den Lichtsensor. Dann messen wir den Widerstand des Sensors einmal wenn er voll zugehalten ist (dunkel) und einmal bei den maximalen Lichtbedingungen in denen er funktionieren soll (hell). Der Dunkel-Wert sollte irgendwo im Mega-Ohm-Bereich liegen und der Hell-Wert sollte relativ klein sein, daher die Bezeichnungen Rmax und Rmin.

Die gemessenen Werte werden also nun multipliziert und aus dem Ergebnis wird die Wurzel gezogen und schon haben wir den passenden Referenzwiderstand für die Schaltung. Apropos Schaltung, ein Beispiel für die Schaltung und den Code eines analogen Sensors haben wir natürlich auch für euch.

Warum ist das so wichtig und was macht dieser Referenzwiderstand eigentlich?

Der Referenzwiderstand funktioniert ähnlich wie ein Pull-Up bzw. Pull-Down Widerstand für einen Taster und regelt wieviel Spannung am Pin des Arduino-Boards ankommt im Verhältnis zum Messwert des Sensors. Man nennt diese Konstruktion auch Spannungsteiler.

Benutzt man einen falschen Referenzwiderstand, kann es passieren, dass man mit Arduino nicht das volle Spektrum des Sensors auslesen kann. Normalerweise kann das Arduino-Board Messwerte von 0 … 1023 an einem analogen Eingang auslesen, aber mit einem falschen Referenzwiderstand kann es sein, dass nur Werte von 0 … 300 oder 450 … 800 oder anderweitig eingeschränkt ausgelesen werden, was effektiv eine Verringerung der Sensor-Genauigkeit bedeutet.

Man könnte auch sagen, dass der Widerstand benutzt wird um den Sensor zu eichen.

Der Name der Formel geht übrigens auf einen der ersten Lehrer im Fach Physical Computing an der FH Potsdam zurück, Dr. Axel Benz.

Ampel mit Arduino

Eine Ampel mit Arduino bauen ist relativ Simpel. Man benötigt fünf Widerstände mit ca. 220 Ohm, einen weiteren Widerstand mit ca. 1 Kiloohm, fünf LEDs (2x rot, 2x grün, 1x gelb) und einen Taster.

Verschalten werden die Komponenten wie im Bild verdeutlicht. Nun muss nur noch der Code auf das Arduino-Board geladen werden und fertig ist die Arduampel mit Fussgängerbutton.

Arduinocode für Ampelschaltung

Digitaler Input - Schalter auslesen

Zunächst nochmal kurz geklärt, was ist digitaler Input in Vergleich zu allem anderen? In der Welt der Mikrokontroller bedeutet ein digitales Signal im Wesentlichen: Entweder fließt Strom oder eben nicht.

Das einfachste Beispiel für digitalen Input ist ein Schaltkreis mit einem Mikrotaster (oder sonstigem Schalter). Wird der Taster gedrückt, dann schließt er den Schaltkreis und der Strom fließt, ist er nicht gedrückt dann ist der Stromkreis offen und es fließt kein Strom. Soviel also zur Theorie.

Um das auch praktisch auszuprobieren, machen wir jetzt eine kleine Übung. Ihr braucht dazu 1 Arduino, 1 Breadboard, 1 Mikrotaster, 1 Widerstand (ca. 1-2 kOhm) und ein paar Kabel.

Die Schaltung wird so aufgebaut, dass der Mikrotaster auf der einen Seite (je 2 Pins sind intern verbunden und somit 1 Seite) mit GND verbunden wird und auf der anderen Seite mit dem Widerstand. Vom Widerstand gehts dann weiter zu +5V und zwischen Schalter und Widerstand wird eine Verbindung zu Pin 8 hergestellt. Ich hab das ganze mal in Fritzing vorbereitet, wer will kann sich auch das Sketch runterladen.

Fritzing Sketch Button

Fritzing Sketch Button

Einige von euch, die schon mit elektrischen Kreisen zu tun hatten, werden sich jetzt vermutlich fragen, wozu der Widerstand und die Verbindung zu Plus und zu Minus gut sind. Würde man nur die Verbindung GND zu Pin oder +5V zu Pin herstellen und diese durch den Schalter unterbrechen, fließt kein Strom. Dummerweise kann Arduino mit dieser Situation nichts anfangen, denn wo kein Strom fließt kann der Mikrokontroller auch nichts feststellen und sich sozusagen nicht entscheiden welches Signal er empfängt. Liest man einen nicht verbundenen Pin aus, ist es rein zufällig welchen Wert man bekommt.
Damit das nicht passiert, setzen wir eine 2. Verbindung über den Widerstand, den man übrigens auch als Pull-Up bzw. Pull-Down Widerstand bezeichnet, je nachdem ob er am Plus- oder Minus-Pol angeschlossen ist. Ist der Schalter jetzt nicht gedrückt, fließt also ein sehr geringer Strom über den Plus-Kontakt und Arduino kann immerhin einen Wert bestimmen. Wird aber der Taster gedrückt, fließt der Strom über den Minus-Pol, da elektrischer Strom immer den Weg des geringsten Widerstands geht und dieser führt hier durch den Taster. Dadurch bekommt Arduino dann eindeutig ein anderes Signal und diesen Unterschied können wir dann auch im Programm auslesen.

Apropos Programm, was jetzt natürlich noch fehlt ist der Quelltext für unser kleines Programm. Glücklicherweise versorgt uns die Arduino IDE auch hier mit einem Beispiel-Code, den wir bequem nutzen können, siehe Examples > Digital > Button. Die einzige Änderung die ich vorgenommen habe ist in der Zeile 12, wo ich die Variable inputPin auf den von uns genutzten Pin 8 umgestellt habe.


/*
* Button
* by DojoDave
*
* Turns on and off a light emitting diode(LED) connected to digital
* pin 13, when pressing a pushbutton attached to pin 7.
*
* http://www.arduino.cc/en/Tutorial/Button
*/

int ledPin = 13;                // choose the pin for the LED
int inputPin = 8;               // choose the input pin (for a pushbutton)
int val = 0;                    // variable for reading the pin status

void setup() {
pinMode(ledPin, OUTPUT);      // declare LED as output
pinMode(inputPin, INPUT);     // declare pushbutton as input
}

void loop(){
val = digitalRead(inputPin);  // read input value
if (val == HIGH) {            // check if the input is HIGH
digitalWrite(ledPin, LOW);  // turn LED OFF
}
else {
digitalWrite(ledPin, HIGH); // turn LED ON
}
}

Ist die Schaltung fertig aufgebaut und der Code aufs Arduino überspielt, könnt ihr jetzt mit dem Schalter die LED auf dem Arduino-Board ein- bzw. ausschalten.
Viel Spass beim Ausprobieren! Wenns noch Fragen oder Probleme gibt, immer rein in die Kommentare.