Freitag, 11. Oktober 2013

RGB_LED mit Tastatur ansteuern

Ich habe den Code fertiggestellt mit dem man die Tastatur an den Arduino schließen kann und dann die LED-Stripe ansteuert.
Mein Arduino hat aktuell also folgende Funktionen auf den Verschiedenen Tasten:

Taste              Funktion
ESC              Schalltet LEDs aus
1                   Beginn von Programm 1
2                   Beginn von Programm 2
G                  Schaltet LEDs auf Grün
B                  Schaltet LEDs auf Blau
R                  Schaltet LEDs auf Rot
L                  Schaltet LEDs auf Lila

Den Code könnt ihr hier herunterladen.

Wie immer könnt ihr mir bei Fragen an pilot.arduino@gmail.com schreiben.

Donnerstag, 10. Oktober 2013

PS2 Tastatur an Arduino anschließen

Bevor ich mit meinem nächsten Projekt weiter mache wollte ich noch eine kleine aber nützliche Funktion vorstellen. Damit meine ich das verwenden von einer PS2-Tastatur als Eingabegerät. Zum verbinden von einer PS2-Tastatur mit dem Arduino gibt es mit dem Arduino gibt es hier eine Anleitung. 

Da die Seite auf Englisch ist schreibe ich mal eine kurze Anleitung zum importieren von Librarys. Als Beispiel benutze ich die PS2Kayboard Library.

Alls erstes müsst ihr die PS2Kayboard.zip herunterladen (falls der Link nicht funktioniert findet ihr die Datei auch unter dem oben genannten Link). Als nächstes müsst ihr die Datei entpacken. Dies geht unter Win7 in dem ihr einen rechts klick auf die Datei macht und die Option "Alles extrahieren..." auswählt. Danach geht ein Fenster auf und ihr könnt hier den Ort bestimmen in dem die Datei extrahiert werden soll. Nun müsst ihr das aktuelle Verzeichnis beibehalten und auf "Extrahieren" klicken. Jetzt sollte in dem Ordner in dem auch die zip-Datei liegt ein neuer Ordner mit dem Namen "PS2Kayboard" entstanden sein. Als nächstes müsst ihr das Verzeichnis suchen in dem ihr Arduino installiert habt, z.B. C:\Program Files (x86)\Arduino hier gibt es einen Ordner der "libraries" heißt. In diesen Ordner wird nun der Ordner "PS2Kayboard" kopiert. Daraufhin muss noch die Arduino IDE (Integrated Development Environment oder auch Entwicklungsumgebung) neugestartet werden. Wenn man nun in der Arduino IDE unter Datei > Beispiele geht und die Option PS2Kayboard angezeigt wird, war die Installation erfolgreich.

Nun da Ihr die Library installiert habt erkläre ich noch einige neue Befehle. Die ersten vier Befehle sind unabhängig von der Library.

Serial.begin(9600); 

Hier wird die USB Schnittstelle geöffnet. Die in der Klammer stehenden Zahl steht für die Geschwindigkeit in diesem Beispiel 9600 Bits die Sekunde.

Serial.println(val);
Serial.print(val); 

Mit den beiden Befehlen kann man, dass was in den Klammen steht, über die USB Schnittstelle schicken. in diesem Beispiel ist dies die Variable val.Bei Serial.println() wird nach der Information die in der Klammer steht ein Zeilenumbruch gemacht, bei Serial.print(val) wird dieser Weggelassen. In der Arduino IDE kann man sich die Informationen die an den Rechner geschickt werden mit Hilfe des Serial Monitor Anzeigen lassen. Der Serial Monitor kann unter Tools gefunden werden.
  
#include <PS2Keyboard.h>
 
Mit diesem Befehl #include wird eine Library geladen, in diesem Beispiel die Library PS2Keyboard.h.

So jetzt beginne ich mit den Speziellen PS2Keyboard Befehlen.

PS2Keyboard keyboard; 

Dies ist der erste Befehl und muss unbedingt ausgeführt werden. Hier wird ein Objekt
für die Library erstellt. Mann könnte mehrere Objekte erschaffen aber die Library unterstützt nur eine angeschlossene PS2 Tastatur.

keyboard.begin(DataPin, IRQpin)

Beginnt damit die Tastatur Signale aufzunehmen. In der Klammer stehen die Beiden Pinne an den man die Tastatur angeschlossen hat. Der DataPin ist für die Tastatur Daten da und der IRQpin für die Clook-Signale. Die beiden Pinne werden am Anfang des Programmes den Variablen zugeordnet. Den IRQpin darf man nicht einen X beliebigen Pin zuordnen, welcher der richtige ist hängt mit dem Arduinoboard zusammen. Hier ist eine Liste:

Arduino Uno:    2, 3
Arduino Due:    Alle pins, ausnahme 13 (LED)
Arduino Mega: 2, 3, 18, 19, 20, 21
Teensy 2.0:      Alle pins, ausnahme 13 (LED)
Teensy 2.0:      5, 6, 7, 8
Teensy 1.0:      0, 1, 2, 3, 4, 6, 7, 16
Teensy++ 2.0:  0, 1, 2, 3, 18, 19, 36, 37
Teensy++ 1.0:  0, 1, 2, 3, 18, 19, 36, 37
Sanguino:        2, 10, 11


Diese Liste findet man auch oben im Beispiel Programm. 

keyboard.available() 

Prüft ob ein Tastendruck empfangen wird, wenn ja gibt er TRUE aus wenn nein ein FALSE.

keyboard.read()

Liest den nächsten Tastendruck und gibt ihn als ASCII Zeichen heraus. Dazu wird eine Variable in die Klammer geschrieben. Der Daten Typ der Variable lautet char, dieser ist für Schriftzeichen.

Mein Ziel ist es mit Hilfe dieser Funktion, es zu erreichen das man zwichen mehreren Programmen für die RGB LEDs wechseln kan.

Bei Fragen und Anregungen gilt wie immer, einfach das Kintaktformula benutzen oder diereckt ein E-Mail schreiben an pilot.arduino@gmail.com.





Freitag, 16. August 2013

Datentypen

Auf eine Anfrage eines Nutzers möchte ich mich dem Thema Datentypen zuwenden. Es gibt verschiedene Datentypen für Zeichen oder Zahlen aber auch für TRUE oder FALSE (richtig oder falsch) abfragen.

Boolean

Der kleinste Datentyp bei Arduino ist der Type boolean dieser kann nur zwischen 1 und 0 unterscheiden also TRUE oder FALSE. Dieser Datentype benutzt nur 1 Bit des Speichers.

Byte

Byte speichert einen 8-Bit numerischen, ganzzahligen Wert ohne Dezimalkomma. Der Wert kann zwischen 0 und 255 liegen. Ein Byte entspricht 8 Bit auf dem Speicher.

Integer

Ein Integer oder auch INT genannt ist die am meisten benutzte Variante um Ganzzahlen ohne Dezimalkomma zu Speichern. Der Wertebereich liegt von -32.767 bis 32.768. Diese werden in einem Wort gespeichert, ein Wort entspricht 2 Byts. Also nimmt eine INT variable 16 Bits des Speichers in Anspruch.

Long

Ist wie ein Integer nur das er für einen Zahlenbereich von -2,147,483,648 bis 2,147,483,647 gedacht ist. Diesen erreicht er durch seine doppelte Größe 2 Wort, also 32 Bits auf dem Speicher.

Float

Float wird benutzt wenn die Werte eine höhere Auflösung besitzen sollen. Dies wird durch eine Fließkommazahl erreicht. Der Zahlenbereich geht von -3.4028235E+38 bis 3.4028235E+38. Der Speicher wird hier ebenfalls mit 2 Wort belastet also 32 Bits. Die Berechnung in diesem Datentyp hat das Problem das es deutlich langsamer ist als der Integer

Char

Der char Datentyp wird benutzt um einzelne ASCII Zeichen zu Speichern. Ein Char ist ein Byte groß also 8 Bits. Dies geschieht in dem man einer bestimmten Zahl einen Buchstaben zugeordnet hat, z.B. für das 'A' die Zahl 65. eine genau Liste gibt es Hier. diese Zahlenwerte gehen von -128 bis 128. Ein Char ist immer nur ein Buchstabe. Mann erkennt einen Char daran der er in einfache Anführungsstriche gesetzt wird, z.B. 'A'.

Array

Ein Array ist kein direkter Datentype man kann ihn dazubenutzen unter einem Variablen Namen mehrere z.B. INT Werte abzulegen. Wie das geht zeige ich am besten an Hand eines Beispiels:

int myArray[] = {wert0, wert1, wert2...};

Hier sieht man nun wie ein Array deklariert wird. Wie bei einer Normalen Variabele kommt zu erst der Datentyp int danach der Name myArray. Jetzt kommt die Eckige klammer in die wird reingeschrieben wie viele Werte benötigt werden + 1 Wert dieser steht für die Null. In dem Unteren Beispiel habe ich die Zahl 2 benutzt und also gebe ich drei Werte an Wert 0 = 5, Wert 1 = 8 und Wert 3 = 6.

int myArray[2] = { 5, 8, 6 };
x = myArray[1];

Mit dem Befehl  myArray[1] kann man nun auch einen Wert auslesen hier den Wert 1 dieser beträgt 8. Das heißt in dem oben gezeigten Beispiel wird der Wert 8 der Variable x zugewiesen.

String

Ein String ist wenn man es genau sieht nichts anderes als ein Array. Ein String ist ein Array mit dem Datentyp char. Das heißt für jeden Buchstaben wird ein Byte genutzt. Ein String wird in der Arduino IDE immer mit doppelte Anführungszeichen benutzt z.B. "ABC" für dieses ABC würde der Code wie folgt lauten:

char String[2] = {'A', 'B', 'C'};

Oder man benutzt die leichter Variante:

char String[2] = "ABC";

Das war es auch schon zu dem Thema Datentypen falls Ihr weitere Fragen habt oder ich einen Datentyp vergessen habe schreibt mich einfach an pilot.arduino@gmail.com 

Und noch ein nützlicher Link, dort gibt es zu vielen Themen eine genaue Beschreibung. Die Seiten sind zum größtenteil noch auf Englisch aber werden fortlaufend ins Deutsche übersetzt.


Es wird noch etwas dauern bis der Umbau von meinem Projekt fertig ist... Es fehlen noch einige Teile.








Sonntag, 14. Juli 2013

Steuerung von RGB LED strip

Also wie versprochen kommt nun mit meinem zweiten Post, eine Anleitung um mit dem Arduino eine 12V GRB-LED zu betreiben.

Der Aufbau

 

Benötigte Bauteile 

 

Für den Aufbau braucht man folgende Bauteile:

  3x Transistor MOSFET IRL540N (Conrad)
  3x Diode 1N4007 (Conrad)
  1x RGB-Strip (z.B. Conrad mann kan auch eine längere Strip benutzen)
  1x 12V Netzteil (Conrad ich benutze ein altes Computernetzteil)
  1x Taster (Schließer)
  1x Widerstand 10kΩ
  1x Arduino Board (bei mir Arduino UNO)

Außerdem sollte man ein Steckboard besitzen (Conrad) da man so ohne zu Löten Schaltungen aufbauen kann. Desweiteren benötigt man einer Leitung, dafür eignet sich am besten Klingeldraht (Conrad).


Der Stromlaufplan

Der Stromlaufplan sieht wie folgt aus:
 
Stromlaufplan

Wie schließe ich den Transistor richtig an?

In dem nächsten Bild wird gezeigt wo man das Gate [G], Drain [D] und Source [S] findet:
Transistor
Bei Fragen wie ein MOSFET Transistor funktioniert kann ich diesen Artikel empfehlen.

Was ist eine RGB-Strip

Am besten fange ich damit an was eine RGB-LED ist. Bei dieser LED handelt es sich im Grunde um drei LEDs in einer, nämlich eine Rote, eine Grüne und eine Blaue. Diese drei LEDs besitzen in der RGB-LED gemeinsame +12V. Folglich hat einer RGB-LED 4 Pinne einen für +12V, einen für die Rote LED, eine für die Grüne LED und einen für die Blaue LED. Eine RGB-Strip ist nichts anderes als, einige RGB-LEDs die auf einem Band hintereinander Gelötet wurden. Diese haben die Anschlüsse +12V, Rot [R], Grün [G] und Blau[B]. die Vorwiederstände für die LEDs sind bereits draufgelötet.

So sieht mein Aufbau der Schaltung aus:


Der Code

Ich hab zwei Programme hochgeladen. Siehe hier. Bei beiden Programmen habe ich einen neuen Befehlverwendet.

analogWrite(LED_R, DIM_R);

Denn digitalWritr() Befehl habe ich ja schon vorgestellt. Diesen Benutzt man um einen Pin auf HIGH oder LOW zu schalten also 5V oder 0V. Arduino besitzt auch Analogeausgänge, diese werden mit diesem Zeichen ~ gekennzeichnet und stehen vor der Pin Nummer, z.B. ~11. Das besondere an Analogenausgängen ist diese einen Wert zwischen HIGH und LOW annehmen können also einen Wert zwischen 5V und 0V. Bei Arduino beträgt die Stückelung 255, dass bedeutet das die 5V durch 255 geteilt wurden. Mann kann deshalb mit dem analogWrite() eine Zahl zwischen 255 und 0 ausgeben, bei der Zahl 200 würden so ca. 3,9V am Ausgang anliegen. In dem oben gezeigten Beispiel steht das LED_R für den Pin der als Ausgang fungieren soll. Bei DIM_R handelt es sich um eine Variable die den Wert enthält der ausgegeben werden soll.

Ich hoffe ihr könnt die Programme verstehen ansonsten schickt mir einfach eure Fragen mit dem Kontaktformular oder direkt an pilot.arduino@gmail.com

In meinem Nächsten Beitrag werde ich zeigen wie ich die Bauteile auf eine Platine Löte und diese dann in ein altes PC-Gehäuse einbaue.

Samstag, 6. Juli 2013

Wie alles begann

Während meiner Ausbildung zum EAT (Elektroniker für Automatisierungstechnik) kam ich das erste Mal mit Arduino in Kontakt. Meine Aufgabe lautete damals, dass ich 3 Analogwerte von Sensoren (ein Fotowiderstand für Helligkeit, ein Feuchtigkeitssensor und ein Wärmesensor) auswerten soll, um dann ein Signal an eine SPS (Speicherprogrammierbare Steuerung) zu schicken.


Bei der Ausbildung Kamm ich auch mit Homeautomatisierung zusammen, nur diese finde ich einfach zu teuer. So bin ich dann auf die Idee gekommen mit einem Arduino dieses Problem zu lösen. Als Erstes habe ich mir das Set "Arduino Starterset" bei SEGOR electronics GmbH bestellt, den Link gibt es Hier. Ich habe mich für dieses Set entschieden, weil es viele verschiedene Elektrobauteile enthält. Ein weiterer Grund war das Buch "Arduino für Einsteiger" von Massimo Banzi das dem Set beiliegt. In dem Buch wird die Grundliegende Programmierung von Arduino beschrieben. Das Buch ist wirklich sehr einfach gehalten und jemand der Erfahrung in Elektrotechnik und anderen Programmiersprachen hat wird sich schnell unterfordert füllen. Aber für Einsteiger ist es genau das richtige Buch. Ich würde den Kauf allein wegen der Elektrobauteile jedoch nicht bereuen.


Das erste Projekt


Ich möchte bei meinem ersten Post auch die reckt ein Projekt mit Liefern.
In dem Projekt geht es nur darum mithilfe eines Tasters NO (normally open das heißt es ist ein Schließer) eine LED ein und aus zu schalten.

Als Erstes braucht Ihr die Arduino Software, diese könnt Ihr unter diesem Link herunterladen. Als Nächstes braucht ihr den Anschlussplan und den Code dies findet ihr hier, des Weiteren ein Bild von meinem Aufbau.


Code

Zu beginn werden die Variablen zugewiesen.

const int LED = 13;

Hier wird eine Konstante (const) Integer (int) Variable erzeugt die LED heißt und den Wert 13 zugewiesen bekommt. Das Zeichen " ; " ist sehr wichtig und bedeutet das mein Befehl hier aufhört, z.B. wie bei einem Satz der Punkt.

int VAL = 0;

 
Hier wird eine Variable des Typs Integer (int) erzeugt (diese ist nicht konstant) die den Name VAL trägt ihr Wert ist 0.


void setup() {
   pinMode(LED, OUTPUT);
   pinMode(SCHALTER, INPUT);
}


Nach void setup() { beginnt das Programm. Der Teil, der zwischen den geschweiften Klammern steht, wird nur einmal durchlaufen. Durch pinMode() wird ein PIN als Eingang oder Ausgang festgelegt. LED steht für eine Variable, die zugeordnet werden soll. OUTPUT und INPUT stehen dafür ob es ein Ausgang oder ein Eingang sein Soll. 


void loop() {
...
}


Hier beginnt das Hauptprogramm. Alles was nach void loop() {...} in den geschweiften Klammern steht wird immer wiederholt.

VAL =digitalRead(SCHALTER);

Hier wird nun der Wert von SCHALTER (PIN 12) ausgelesen (digitalRead) und in die Variable VAL geschrieben.


if ((VAL == HIGH) && (VAL_old == LOW)) {
   STATE = 1 - STATE;
   delay(10);
   }
VAL_old = VAL


Hier passirt nichts anderes als das wenn der Schalter betätigt wird die Variabele STATE den Wert 1 bekommt. Wird der Schalter losgelassen bleibt der Wert von STATE auf 1. Wird der Schalter ein weiteres Mal betätigt erhält STATE den wert 0. Nun wird der Schalter losgelassen bleibt der wert auf 0. Für alle die wissen wollen wie genau dies funktioniert habe ich hier eine Anleitung.


if (STATE == 1) {
   digitalWrite(LED, HIGH);
   {
   else {
   digitalWrite(LED, LOW);
   }


Wenn STATE == 1 ist dann schreibe LED also Pin 13 auf HIGH. Wenn STATE keine 1 hat dann schreibe LED also Pin 13 auf LOW. Mit dem Befehl digitalWrite() kann nur HIGH oder LOW schreiben also +5V oder 0V.


delay();

Zum Abschluss möchte ich noch kurz den delay Befehl erklären. Dabei wird das Programm für eine Zeit unterbrochen, diese Zeit steht in Millisekunden in der Klammer. Zum Beispiel bei einer 10 wird erst nach 10ms der nächste Befehl bearbeitet.



So das war dann auch schon mein erstes Postieg auf diesem Blog ich hoffe das liest auch der ein oder andere. Mein nächstes Projekt besteht darin eine RGB-LED Strippe in verschiedenen Farben zum Leuchten zu bringen.

Bis dahin könnt Ihr ja mit dem heute gelernten Rumspielen z.B. mithilfe des delay Befehls eine LED zum Blinken zu bewegen.

Bei Fragen benutzt einfach das Kontaktformular oder schreibt direkt eine E-Mail an pilot.arduino@gmail.com