Arduino - 101

Begonnen von Gryndal Styrkaarson, September 06, 2012, 20:54:46

Vorheriges Thema - Nächstes Thema

Gryndal Styrkaarson

Hallo,

Ich möchte euch hier die Grundfunktionen von Arduino erklären und euch Fragen beantworten.
Die Fragen versuche ich immer am Anfang des Thread zu Aktualisieren, sodas man schnell einen Überblick hat.

Einleitung:
Was ist Arduino?
Arduino ist eine Platine mit ein paar Anschlüssen und einem Microprozessor.
Das erspart einem das Verbinden des Microprozessors mit den anschlüssen und man kann sofort loslegen.
Problem ist das es in etwa so groß ist wie eine Checkkarte und mit Kabeln auch 2,5cm hoch ist.

Was ist ein Microprozessor?
Der Microprozessor erlaubt euch aufbasis verschiedener Events(also geschehnisse) etwas zu tuhen.
zb. Wenn schalter 1 Gedrückt ist dann mach LED 1 an.

Das jetzt nix besonderes das kann man ganz einfach ohne Microprozessor bauen.
Kompliziert wird es wenn ich sage:
Wenn ich schalter 1 Gedrückt halte dann erhöhe die Helligkeit um 1/255 pro Sekunde.
Wenn ich schalter 2 Drucke dann verringere die Helligkeit um 1/255 pro Sekunde.

Das wir ohne Microprozessor sehr schwer :-)

Was brauche ich?
Also einfach ein Arduino Starter Set bei Amazon Bestellen hab ich auch gemacht :D
Aber im Detail:
1 Arduino Board
1 USB a zu USB b kabel
Kabel

Der Rest hängt davon ab was ihr machen wollt. Helfe euch bei Material listen gerne.

Wenn ihr das Board zuhause habt dann geht ihr auf
http://arduino.cc/en/Main/Software
und ladet euch das Programm entsprechend eurem Betriebssystem herrunter.

Anfangen:
Wenn ihr das programm dann herunnter geladen habt sucht nach der "Arduino.exe" und startet diese.

Es wird ein Programm geöffnet worin ihr eure "Programme" für Arduino schreiben könnt.

Allgemein ist es ab diesem Punkt ganz gut rudimentär Programmieren zu können... aber wenn ihr "Wenn /Dann" abfragen in EXCEL machen könnt reicht das auch schon fast :D

Wir öffnen ein Neues Projekt(Arduino Intern "Scetch" genannt) mit STRG+N.
So wir haben nun ein Leeres Dokument vor uns.

Ein jedes Arduino Programm sollte aus mindestens zwei Teilen bestehen.
1) das Setup:
Als erstes schreiben wir in unser Programm
void setup()  {
}


Dort werden Grundeinstellungen vorgenommen wie zb: Auf Pin13 möchte ich ein Digitales(also nur AN oder AUS) Signal ausgeben.
Alle Pins (Stecker) des Board die man benutzen will muss man im Setup  definieren.
Für unser Beispiel wollen wir Pin13 nutzen.

Also erweitern wir das ganze auf:

void setup() {               
  pinMode(13, OUTPUT);
}


Kurz Erklärt:
pinMode => Zeigt an das ich einen Pin eine Aufgabe zu teilen möchte)
13 => ist die Pinnummer (steht klein am Pin auf dem Board)
OUTPUT => Sagt das hier ein Signal ausgegeben wird .. INPUT wäre das gegenteil ;-)

so und nun zum "Kern" eines jeden Arduino Programmes der auch ein bisschen "besonders" ist:
void loop() {
}


Arduino führt das was dort drin steht immer und immer und immer wieder aus. Es ist also eine ENDLOSSCHLEIFE.
Das sollte man beim planen im Kopfbehalten. Änderungen werden also immer nur pro Schleifen Durchlauf ausgeführt. Ein Schleifendurchgang dauert ein paar Milisekunden ;)

Wir wollen zum Testen ein Programm schreiben was die LED einen zufällige Zeit zwischen 50 millisekunden und 100 Milisekunden zum leuchten zubringen und dann für 10 bis 200 Milisekunden die LED ausschaltet.

void loop() {
  if(status == 0)
  {
   delay(random(10,200));
   digitalWrite(13, HIGH);
   status = 1;
  }
  else
  {
    delay(random(50,100));
    digitalWrite(13, LOW);
    status = 0;
  }
}



So erklären wir dan mal genauer:
"if(status == 0)" => ist die variable "status" gerade 0 oder nicht? Wenn sie 0 ist wird das was in den folgenden 2 {} ausgeführt. Wenn sie nicht 0 ist wir das nach dem "else" teil ausgeführt.
"delay(random(10,200));" => delay lässt das Programm anhalten und zwar für die Zeit (in millisekunden) die in den Klammern dahinter steht. In unserem Fall steht da aber "random(10,200)". random sucht sich eine zufällige zahl aus, die zwischen den beiden in den Klammern angegebenen Werten liegt. Also bedeutet diese ganze Zeile "Warte zwischen 10 und 200 Millisekunden und mache dann weiter".
"digitalWrite(13, HIGH);" => Nutze den digital ausgang 13 und setzte den Strom dort auf "Hoch"(also "An") -> unsere LED leuchtet.
"status = 1;" => Setzt die variable "status" auf 1.

Der "else" Teil ist ja genau so aufgebaut nur das dort "LOW" statt "HIGH" gesetzt wird was die LED entsprechend ausschaltet.

Das Programm würde so aber nicht  funktionieren, weil wir die Variable "status" nicht initialisiert, ihr also einen "Anfangswert" gegeben haben.

Also schreiben wir noch vor unser "void setup(){}" :
int status = 0;
Erklärung:
Variablen müssen vor allem anderen definiert werden wenn sie ihren wert nicht für jeden schleifen durchgang neu gesetzt bekommen sollen.
In unserem fall sagt das "int" aus das die variable eine Zahl(ohne Kommas) beinhalten wird. 'status' ist der Name und könnte freigewählt werden, dann müssten wir den Namen aber entsprechend überall anpassen. Und das ' = 0" legt die Zahl 0 in die variable, sodass beim ersten durchlauf die "if" abfrage direkt weiß "aha die variable ist 0 ich weiß was ich machen muss".

Komplet sieht das programm nun so aus:

int status = 0; 
void setup() {               
  pinMode(13, OUTPUT);
}

void loop() {
  if(status == 0)
  {
   delay(random(10,200));
   digitalWrite(13, HIGH);
   status = 1;
  }
  else
  {
    delay(random(50,100));
    digitalWrite(13, LOW);
    status = 0;
  }
}


So unser Programm ist fertig.

Jetzts chließen wir das Arduino Board mit seinem USB Kabel an unseren PC an.
Windows wird nun nach traibern suchen und diese entweder alleine finden, ODER sie im Ordner finden wo auch eure Arduino.exe liegt.

nach dem das ganze installiert ist geht ihr im Arduino Programm auf den Pfeil nach rechts, das das zweite symbol in der Symbol leiste und ist mit "Upload" gekennzeichnet.
Damit ladet ihr das programm auf euer Ardunio Board, was nun auch sofort wie doof leuchten düfte.

Glückwunsch ihr habt euer erstes Programm geschrieben :-)

Die Stromversorgung geschieht im Moment über das USB kabel. Wenn ihr es ohne PC mit strom versorgen wollt holt euch einfach einen Arduino 9V Adapter dann läuft das Board auf einem 9V Block, der jenach angeschlossenen LED und kram recht lang hält.

So ich hoffe man versteht meine wirren gedanken Gänge, wenn irgend was nicht klar ist einfach Frage stellen ich beantworte dann oder schreibe deutlicher. Rechtschreibfehler gerne per PM damit hier nur das wichtigste bleibt. (über JEDE Rechtschreibkorrektur bin ich dankbar y.y)

So Lasst das gefrage beginnen


Gryndal Styrkaarson



Gryndal Styrkaarson



Gryndal Styrkaarson



Tarak der Spalter

sehr schön erklärt. Ich denke das sollten auch nicht ITler verstehen.
Wenn ihr hilfe braucht, einfach fragen, wir kriegen das hin ^^

Asfael / Kheresh

Ok, bin zunächst mal angemessen beeindruckt.
Und meine Initialreaktion (Flucht) ist unter Kontrolle.
Schaun mer mal...
"Into the darkness he went. Into the flames of hell. With his head held high. And he smiled." (Warhammer- Predigttext; Wordbearers)

MorAmroth

Klasse Anleitung! Welches Starterset hast Du benutzt?
Ich werde das zwar so schnell wohl selbst nicht benutzen, aber wenn, dann würde die Anleitung sehr Hilfreich sein! Super Erklärt! Danke!
IT Kultführung Ungeteilter Kult
OT Kreatives Chaos

-I'm the universes darkest hand,
holding shadows, dust and sand;
the darkness behind every door,
the weaver of forgotten lore. -

Tarak der Spalter

#7
Arduino Uno, allerdings würde ich noch ein paar Kabel und ein Steckboard dazu kaufen.

Gryndal Styrkaarson



Grimnir


Khorne Coach, Blood Bowl, B-Orga

Lhurana

Sooo da ich mich nun auch mal mit dem großen Arduino Thema befasse, hier mal was, was ich noch nicht probiert habe, aber mit sicherheit bald anfangen werde! (will coole Effekte für meine Dunkelelfenmagierin bauen, aber da muss ich noch viel lernen!)


Coole Idee mit nem Reed Schalter:
https://www.youtube.com/watch?v=eecxiqUtVWw
Sketch wäre dieser hier:
const int switchPin = 2;  //     // Reed switch to digital pin 2
int ledPin= 13;          //     // LED is on digital pin 13
int state = HIGH;      // the current state of the output pin
int reading;           // the current reading from the input pin
int previous = LOW;    // the previous reading from the input pin

void setup() {
  pinMode(switchPin, INPUT);        // switchPin is an input
  pinMode (ledPin, OUTPUT);         // ledPin is an output
  digitalWrite(switchPin, HIGH);    // Activate internal pullup resistor
  Serial.begin(9600);
}

void loop() { 
  int reading = digitalRead(switchPin);
  Serial.println(digitalRead(switchPin));  // Display current value
  delay (200);
  if (reading == HIGH && previous == LOW) {
    if (state == HIGH)
      state = LOW;
    else
      state = HIGH;

  }

  digitalWrite(ledPin, state);
  previous = reading;
 
 
}




Ansonsten sind hier noch schöne Tutorials + Grundlagen:
https://coptermagazin.de/eine-externe-led-blinken-lassen/

und bei Adafruits gibts auch n Haufen lustiger Dinge!

Druchii-Coach: die Erben Naggaroths