Digitales Prototyping: Arduino 2 / 2019-04-04 / Matthias Edler-Golla, CC BY-SA 4.0


|



 



Hallo!


Themen heute

  • Eine LED per Taste aktivieren
  • Potentiometer
  • RGB LED
  • Neigungssensor
  • Übersichtseite mit Sensoren für Arduino
  • Temperatur- und Luftfeuchtigkeits-Sensor-Kombination
  • include Library
  • Ultraschall-Abstandsmesser
  • Feuchtigkeits-Sensor
  • Servo-Motor ansteuern
  • Temperatur-Anzeige analog
  • Relais
  • LCD Display mit I2C Anschluss
  • I2C Serial Scanner
  • Ultraschallmesser mit LCD Display
  • Bewegungsmelder
  • Tropfensensor
  • Schrittmotor
  • Fernbedienung
  • RFID Kit

Funduino – Anleitungen für Arduino

https://funduino.de/

Das hier im Kurs verwendete Funduino Standard-UNO Lernset und viele der hier gezeigten Arduino-Scripte orientieren sich an dieser sehr gut gemachten Website


Eine LED per Taste aktivieren

Die LED leuchtet, solange die Taste gedrückt ist…

Arduino

int LED = 13;
int Taste = 7;
int Tastenzustand = 0;

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

void loop() {
  Tastenzustand = digitalRead(Taste);
  // nur wenn die Taste gedrückt ist, ist die LED an
  if (Tastenzustand == HIGH) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

mehr dazu unter: https://funduino.de/nr-5-taster-am-arduino


LED per Taste toggeln

Die LED leuchtet, nachdem die Taste gedrückt ist, beim nächsten Tastendruck geht die LED wieder aus

Arduino

int LED = 13;
int Taste = 7;
int Tastenzustand = 0;
int LEDzustand = -1; //1 = LED an, -1 = LED aus

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(Taste, INPUT);
  Serial.begin(9600);
}

void loop() {
  Tastenzustand = digitalRead(Taste);
  // immer wenn Taste gedrück wurde, ändert sich LEDzustand…
  if (Tastenzustand == HIGH) {
    LEDzustand = -LEDzustand;
  }

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

  Serial.print("LEDzustand: ");
  Serial.println(LEDzustand);

  delay(200);
}

mehr dazu unter: https://funduino.de/nr-5-taster-am-arduino


Potentiometer

Der Drehregler legt hier fest, in welcher Geschwindigkeit die LED blinkt!

Achtung: Die Kontakte des Potentiometers im Breadboard sind nicht gut – ich habe die Kabel-Anschlüsse in die selben Löcher gesteckt wie die „Krallen“ des Drehreglers, sonst ging es nicht…

Arduino

int poti= A0; // Der Drehregler
int LED = 13; 
int potiWert = 0; // Werte zwischen 0 und 1023

void setup() {
  pinMode (LED, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  potiWert =analogRead(poti); //Drehregler (Poti) zwischen 0 und 1023
  digitalWrite (LED, HIGH); 
  delay (potiWert);
  digitalWrite (LED, LOW);
  delay (potiWert);

  Serial.print("potiWert: ");
  Serial.println(potiWert);
}

mehr dazu bei https://funduino.de/nr-7-potentiometer


RGB LED

Die RGB-LED kann in verschiedenen Farben leuchten…

Arduino

int LEDblau = 3; // blau = Pin 3
int LEDrot = 5; // rot = Pin 5
int LEDgruen = 6; // grün = Pin 6

int helligkeit = 200; // Helligkeitswert
int verzeogerung = 1500; // wie schnell ist der Wechsel?

void setup(){
  pinMode(LEDblau, OUTPUT);
  pinMode(LEDgruen, OUTPUT);
  pinMode(LEDrot, OUTPUT);
}

void loop(){  
  analogWrite(LEDblau, helligkeit); // blau ein

  delay(verzeogerung);

  analogWrite(LEDblau, 0); // blau aus
  analogWrite(LEDrot, helligkeit); // rot ein

  delay(verzeogerung);

  analogWrite(LEDrot, 0); // rot aus
  analogWrite(LEDgruen, helligkeit); // grün ein

  delay(verzeogerung);

  analogWrite(LEDgruen, 0); // grün aus
}

mehr dazu bei https://funduino.de/nr-20-rgb-led


Neigungssensor

Dieser Sensor erkennt jedoch nur zwei Stufen, nämlich “geneigt” oder “nicht geneigt”. Dazu rollen im inneren des Sensors zwei frei bewegliche Metallkugeln umher. Sobald der Sensor so gekippt ist, dass eine der Kugeln im Inneren gegen die zwei Kontakte stößt, werden diese beiden Kontakte miteinander verbunden. Das ist dann so, als wäre ein Taster gedrückt, und der elektrische Strom kann von einem Kontakt zum anderen Kontakt fließen.

Verwendet dazu das Tutorial bei https://funduino.de/nr-09-arduino-neigungssensor


Übersichtseite mit Sensoren für Arduino

http://linksprite.com/wiki/index.php5?title=Advanced_Sensors_Kit_for_Arduino

Hier sind fast alle Sensoren, die bei „40 in 1 Sensorkit for Arduino“ enthalten sind, zusammen mit Beispiel-Code aufgelistet: https://tkkrlab.nl/wiki/Arduino_37_sensors


Temperatur- und Luftfeuchtigkeits-Sensor-Kombination

Der Sensor kombiniert das Messen von Temperatur und Luftfeuchtigkeit

Der Code ist ziemlich komplex, weil die Werte für Temperatur und Feuchtigkeit ausgelesen müssen!

Arduino

// http://linksprite.com/wiki/index.php5?title=Advanced_Sensors_Kit_for_Arduino

int dht_dpin = A0;

byte bGlobalErr;
byte dht_dat[5];

void setup() {
  InitDHT();
  Serial.begin(9600);
  delay(300);
  Serial.println("Luftfeuchtigkeit und Temperatur");
  delay(700);
}

void loop() {
  ReadDHT();
  switch (bGlobalErr) {
    case 0:
      Serial.print("Aktuelle Luftfeuchtigkeit = ");
      Serial.print(dht_dat[0], DEC);
      Serial.print(".");
      Serial.print(dht_dat[1], DEC);
      Serial.print("% ");
      Serial.print("Temperatur = ");
      Serial.print(dht_dat[2], DEC);
      Serial.print(".");
      Serial.print(dht_dat[3], DEC);
      Serial.println("C");
      break;
    case 1:
      Serial.println("Error 1: DHT start condition 1 not met.");
      break;
    case 2:
      Serial.println("Error 2: DHT start condition 2 not met.");
      break;
    case 3:
      Serial.println("Error 3: DHT checksum error.");
      break;
    default:
      Serial.println("Error: Unrecognized code encountered.");
      break;
  }
  delay(800);
}

void InitDHT() {
  pinMode(dht_dpin, OUTPUT);
  digitalWrite(dht_dpin, HIGH);
}

void ReadDHT() {
  bGlobalErr = 0;
  byte dht_in;
  byte i;
  digitalWrite(dht_dpin, LOW);
  delay(20);
  digitalWrite(dht_dpin, HIGH);
  delayMicroseconds(40);
  pinMode(dht_dpin, INPUT);

  //delayMicroseconds(40);
  dht_in = digitalRead(dht_dpin);
  if (dht_in) {
    bGlobalErr = 1;
    return;
  }

  delayMicroseconds(80);
  dht_in = digitalRead(dht_dpin);
  if (!dht_in) {
    bGlobalErr = 2;
    return;
  }

  delayMicroseconds(80);
  for (i = 0; i < 5; i++)
    dht_dat[i] = read_dht_dat();
  pinMode(dht_dpin, OUTPUT);
  digitalWrite(dht_dpin, HIGH);
  byte dht_check_sum =
    dht_dat[0] + dht_dat[1] + dht_dat[2] + dht_dat[3];
  if (dht_dat[4] != dht_check_sum)
  {
    bGlobalErr = 3;
  }
}

byte read_dht_dat() {
  byte i = 0;
  byte
  result = 0;
  for (i = 0; i < 8; i++) {
    while (digitalRead(dht_dpin) == LOW);
    delayMicroseconds(30);
    if (digitalRead(dht_dpin) == HIGH)
      result |= (1 << (7
                       -
                       i));
    while (digitalRead(dht_dpin) == HIGH);
  }
  return result;
}

Include Library

Einfügen einer existierenden Library

Viele Sketches benötigen Libraries, die entweder schon installiert sind oder aber noch aus dem Internet geladen werden müssen. Um diese zu verwalten in der Menüleiste auf Sketch > Include Ligrary klicken.

Exist. Library einfügen

siehe Screenshot oben!

Die ausgewählten Libraries fügen sich dann oben im Sketch ein:

Arduino

// hier 3 eingefüge Libraries
#include <NewPing.h> 
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h>

…

void setup() {
  …
}

neue Library hinzufügen

dazu wieder in der Menüleiste auf Sketch > Include Library klicken und dort Manage Libraries auswählen.

Die gesuchte Library wird dann aus dem Internet geladen und bei den existierenden Libraries eingefügt.


Ultraschall-Abstandsmesser

Achtung: Der Ultraschall-Sensor ist einer der wenigen Sensoren, der 4 Anschlüsse hat!

Arduino-Library

Damit der Sketch funktioniert, müsst Ihr die NewPing Arduino Library for Arduino herunterladen und bei Arduino hinzufügen:

Arduino

/*
   Ultrasonic-Rangefinder

   hat 4 PINS!

   GND pin to ground
   VCC pin to 5V
   TRIG pin to digital pin 8
   ECHO pin to digital 7

   Quelle : https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home#!simple-newping-sketch

*/

// Library laden: https://bitbucket.org/teckel12/arduino-new-ping/downloads/NewPing_v1.7.zip
#include <NewPing.h>

const int TRIGGER_PIN = 8;
const int ECHO_PIN = 7;

const int Led = 13; // die LED

int MAX_DISTANCE = 200; // bis 200cm Abstand messen

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
  Serial.begin(115200); // Serial Monitor entsprechend umschalten!

  pinMode(Led, OUTPUT);
}

void loop() {

  delay(50); // min 29
  unsigned int cm = sonar.ping_cm();
  Serial.print("Ping: ");
  Serial.print(cm);
  Serial.println("cm");

  if (cm == 0 && digitalRead(ECHO_PIN) == HIGH) {
    pinMode(ECHO_PIN, OUTPUT);
    digitalWrite(ECHO_PIN, LOW);
    delay(100);
    pinMode(ECHO_PIN, INPUT);
  }

  // LED geht an, wenn etwas näher als 20cm ist
  if (cm < 20) {
    digitalWrite(Led, HIGH);
  } else {
    digitalWrite(Led, LOW);
  }
}

Übung: Ultraschall-Sensor mit Piezo-Warnung

Wie müsst Ihr den gerade gezeigten Ultraschall-Sketch umbauen, damit ein Warnton erklingt, wenn sich ein Objekt näher als 50cm am Ultraschall-Sensor befindet?

Erweiterung

Wie müsst Ihr den Code ändern, damit sich das Piezo-Geräusch verändert, wenn Ihr den Abstand zwischen Ultraschall-Sensor und Objekt verändert?

Schaut Euch dazu den Sketch „Light Teremin – ein schauriges Musikinstrument“ an, den wir beim letzten Treffen durchgemacht haben!


Feuchtigkeits-Sensor

Ihr könnt den Sensor auch direkt in das Breadboard stecken

Sensor kann z.B. verwendet werden, um die Boden-Feuchtigkeit zu messen und somit genau zu wissen, ob eine Pflanze gegossen werden muß…

Steckt den Sensor mal in feuchte Hände oder ein Glas Wasser und beobachtet, wie sich die Sensor-Werte ändern!

Arduino

int sensorPin = A0;    // PIN A0 für Sensor-Kabel
int sensorValue = 0;  // Wert des Sensors

int LED = 13;

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop() {
  // Wert zwischen 0 und 1023
  sensorValue = analogRead(sensorPin);

  Serial.print("Feuchtigkeit: " );
  Serial.println(sensorValue);

  // wenn Wert > 90, geht die LED an
  if (sensorValue > 90){
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }

  // Messung jede Sekunde
  delay(1000);
}

Aufgabe

Baut das Piezo-Element ein und lasst diesen Geräusche machen, wenn der Sensor „trocken läuft“


Servo-Motor ansteuern

Verbindet den Motor – wie auf dem Foto unten gezeigt – mit Breadboard und Arduino. Verwendet dabei möglichst die gleichen Farben, damit Ihr den Motor richtig anschliessen könnt.

Bei dem von Funduino gelieferten Servomotor ist gelb und rot identisch wie auf der Abbildung…

Arduino

// http://www.oomlout.com/oom.php/products/ardx/circ-04

// Libary einfügen!
#include <Servo.h>

// create servo object to control a servo
// a maximum of eight servo objects can be created
Servo myservo;

int zeit = 1000; // wie lange soll der Arm in der Position stehen bleiben
int counter = 0; // der Servo soll nur eine bestimmte Anzahl machen und dann aufhören

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {

  // der Servo soll nur eine bestimmte Anzahl machen und dann aufhören
  if (counter < 5) {

    // Mitte
    myservo.write(90); // Gradangabe! nur Werte zwischen 0 und 180 möglich!
    delay(zeit);

    myservo.write(0);
    delay(zeit);

    myservo.write(90);
    delay(zeit);

    myservo.write(180);
    delay(zeit);

    // Kurzschreibweise von counter = counter + 1;
    counter++;

  }

}

Temperatur-Anzeige analog

Arduino

// Arduino Project Book, Seite 43ff
// http://www.oomlout.com/oom.php/products/ardx/circ-04

// Libary einfügen!
#include <Servo.h>

// create servo object to control a servo
// a maximum of eight servo objects can be created
Servo myservo;

// Analoger Eingang 0
int sensorPin = A0;

// Widerstand hier wieder 220Ω
int ledPin = 2;

// Grenzwert-Temperatur, wenn LED an/ausgehen soll
float grenzwert = 22.0;

void setup() {
  pinMode(ledPin, OUTPUT);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);
}

void loop() {

  int sensorVal = analogRead(sensorPin); // roher Sensor-Wert
  float voltage = (sensorVal / 1024.0) * 5.0; // Umrechung in Volt
  float temperature = (voltage - 0.5) * 100; // Temperatur in Celsius

  Serial.print("Temperatur: ");
  Serial.print(temperature);
  Serial.println(" C\n"); // \n erzwingt eine Leerzeile

  // Wenn die Temperatur unter einen bestimmten Wert fällt, soll die LED angehen
  if (temperature < grenzwert) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

  // zur Sicherheit Limits eingebaut, damit der Servo nicht kaputt geht
  // wenn die Werte < 0 oder > 180 werden
  // deswegen werden nur Werte zwischen 0° und 60° zugelassen
  if (temperature > 0 && temperature < 45) {
    // Temperatur mit 4 multipliziert, damit man merkt, wenn sich die Temperatur ändern
    // z.b. wenn man mit der Hand an das Termometer fasst
    myservo.write(temperature * 4);
  }

  // Messung alle 0.5 sek
  delay(500);
}

Analoge Temperaturanzeige

hier eingeschränkt auf den Bereich von 0° bis 45° Celsius – also ein Zimmerthermometer…

Hinter der Anzeige wäre dann der Servo-Motor verbaut…

Aufbau


Relais

Mit einem Relais kann man sogar 230V-Sachen ein- und ausschalten. Dies ist aber gefährlich, wenn Ihr nicht genau wisst, was Ihr tut!


LCD Display mit I2C Anschluss

Zweizeiliges Display mit jeweils 16 Zeichen pro Zeile, Hintergrund-beleuchtet…

Arduino

#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h> // nach "LiquidCrystal I2C" suchen und die Version von Frank de Brabander verwenden

// Hier wird festgelegt um was für einen Display es sich handelt. 
// In diesem Fall eines mit 16 Zeichen in 2 Zeilen und der HEX-Adresse 0x3F
// Falls das Sketch mit dem jeweiligen Display nicht geht, 
// Sketch „I2C Serial Scanner“ beachten -- da kann man die HEX-Adresse abfragen

LiquidCrystal_I2C lcd(0x3F, 16, 2); 

void setup() {
  lcd.init(); // LCD gestartet
  lcd.backlight(); //Hintergrundbeleuchtung einschalten (lcd.noBacklight(); schaltet die Beleuchtung aus).
}

void loop() {
  lcd.clear(); // löscht den gesamten Screen, damit keine Artefakte stehen bleiben
  delay(500);

  // Hier wird die Position des ersten Zeichens festgelegt. 
  // In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile.
  lcd.setCursor(0, 0);
  lcd.print("Fakultaet Design"); // Sonderzeichen werden falsch dargestellt!
  delay(1000);

  lcd.setCursor(6, 1);// In diesem Fall bedeutet (6,1) das 6. Zeichen in der zweiten Zeile.
  lcd.print("FK12"); // pseudo-zentriert
  delay(3000);

  lcd.clear(); // löscht den gesamten Screen

  lcd.setCursor(5, 0); // pseudo-rechtsbündig
  lcd.print("Interaction");
  delay(1000);

  lcd.setCursor(9, 1); // pseudo-rechtsbündig
  lcd.print("is cool");
  delay(3000);
}

mehr dazu bei https://funduino.de/nr-19-i%C2%B2c-display


I2C Serial Scanner

Falls Eurer Display nicht erkannt wird und somit auch kein Text darstellt, könnt Ihr mit folgendem Sketch die richtige HEX-Adresse herausfinden und den Sketch entsprechend anpassen!

Wichtig

Stellt bei dem Serial Monitor die Bautrate auf 115200 Baud!

Arduino

// I2C Scanner
// Written by Nick Gammon
// Date: 20th April 2011
#include <Wire.h>

void setup() {
  Serial.begin (115200);
  // Leonardo: wait for serial port to connect
  while (!Serial)
  {
  }
  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
  Wire.begin();
  for (byte i = 8; i < 120; i++)
  {
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0)
    {
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);
      Serial.println (")");
      count++;
      delay (1); // maybe unneeded?
    } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
} // end of setup
void loop() {}

mehr dazu bei https://funduino.de/nr-06-zwei-i%c2%b2c-displays-gleichzeitig


Ultraschallmesser mit LCD Display

Kombiniert dazu den Aufbau und das Script des Sketches „Ultraschall-Abstandsmester“ und des Sketches „LCD Display mit I2C-Anschluss“!

Arduino

// ======== Ultaschall ==============

#include <NewPing.h> 
const int TRIGGER_PIN = 8;
const int ECHO_PIN = 7;
int MAX_DISTANCE = 200; // bis 200cm Abstand messen
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

// ======== Display ==============

#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2); 

void setup() {
  lcd.init(); // LCD gestartet
  lcd.backlight();
}

void loop() {
  unsigned int cm = sonar.ping_cm();

  // Ausgabe auf das Display
  lcd.setCursor(0, 0); // 1. Zeile
  lcd.print("Abstand");

  lcd.setCursor(0, 1); // 2. Zeile
  lcd.print(cm); // hier wird der Sensor-Wert auf dem Display angezeigt!

  lcd.setCursor(4, 1);
  lcd.print("cm");

  delay(500);

  // nächste 3 Zeilen überschreiben die Stelle
  // an der der Abstand angezeigt wird
  // sonst bleiben hier Reste von Zahlen stehen…
  lcd.setCursor(0, 1);
  lcd.print("    ");
  delay(150);

  if (cm == 0 && digitalRead(ECHO_PIN) == HIGH) {
    pinMode(ECHO_PIN, OUTPUT);
    digitalWrite(ECHO_PIN, LOW);
    delay(100);
    pinMode(ECHO_PIN, INPUT);
  }
}

Erweiterungsaufgabe: Baut eine andere Kombination aus Sensor und Display. Natürlich kann man auch mehr als einen Sensor anschließen…


Bewegungsmelder

Ein PIR Sensor nimmt Temperaturänderungen von bewegten, warmen Objekten in seiner Umgebung wahr…

Bei dem hier gezeigten Sketch fängt ein Piezo-Element an zu piepsen, wenn der Sensor Bewegung erkennt. Da der Sensor ca. 60sek benötigt, um „warmzuwerden“, ist bei „setup()“ eine 60.000 Milisekunde lange „Aufwärm-Pause“ eingebaut. Erst dann fängt der Sensor zum Arbeiten an. Damit man weiss, wann der Sensor aktiviert wurde, leuchtet dann eine rote LED.

Arduino

int piezo = 5; // Anschluss des Piezo-Elementes
int pir = 7; // Anschluss des PIR-Bewegungsmelders
int pir_status = LOW; // Zustand des PIR-Bewegungsmelders, kann LOW oder HIGH sein

int LED = 13; // die LED leuchtet, wenn der Sensor arbeitet

void setup() {
  pinMode(piezo, OUTPUT);
  pinMode(LED, OUTPUT);
  pinMode(pir, INPUT);
  Serial.begin(9600);
  // ACHTUNG: Der PIR Sensor braucht ca. 60 sek um "warm" zu werden und vernünftig zu funktionieren!
  // entsprechende Verzögerung hier eingebaut, so dass der Sensor erst nach 60.000 Milisek startet
  delay(60000);
  Serial.println("PIR-Sensor startklar!");
}

void loop() {
  digitalWrite(LED, HIGH);

  pir_status = digitalRead(pir);

  Serial.print("pir_status: ");

  if (pir_status == HIGH) {     // Wenn Bewegung erkannt wird, soll Piezo Töne machen
    Serial.println("Bewegung erkannt!");
    playTone(300, 1600);
    delay(3000); // nach 3sek soll Piepsen wieder aufhören
    digitalWrite(piezo, LOW);
  } else {                      // Wenn keine Bewegung erkannt wird, Ton aus
    Serial.println("keine Bewegung!");
    digitalWrite(piezo, LOW);
  }

  delay(500);
}

// duration in mSecs, frequency in hertz
void playTone(long duration, int freq) {
  duration *= 1000;
  int period = (1.0 / freq) * 1000000;
  long elapsed_time = 0;
  while (elapsed_time < duration) {
    digitalWrite(piezo, HIGH);
    delayMicroseconds(period / 2);
    digitalWrite(piezo, LOW);
    delayMicroseconds(period / 2);
    elapsed_time += (period);
  }
}

mehr dazu bei https://funduino.de/nr-8-bewegungsmelder


Tropfensensor

Mit einem Tropfensensor oder auch Flüssigkeitssensor kann man wie es der Name schon sagt eine Flüssigkeit detektieren. Dazu muss sich die Flüssigkeit direkt auf dem Sensor befinden. Es reicht bereits ein kleiner Tropfen aus, um einen eindeutigen Messwert zu erhalten.

Man kann den Sensor zum Beispiel als Regensensor verwenden. Sobald ein Tropfen auf den Sensor trifft, kann das Arduino-Board eine Aktion ausführen wie z.B. eine Markise einrollen, Jalousien schließen, einen Alarm auslösen oder einen Scheibenwischer betätigen.

mehr dazu unter https://funduino.de/nr-17-tropfensensor


Schrittmotor

Typische Anwendungsgebiete sind Drucker, vor allem Matrixdrucker, oder der Antrieb des Schreib-/Lesekopfes in einem Diskettenlaufwerk. Aufgrund ihrer hohen Genauigkeit werden sie auch in computergesteuerten Werkzeugmaschinen zur Positionierung der Werkzeuge verwendet.

Schrittmotoren finden auch in 3D-Druckern ihren Einsatz – und werden dort oft von Arduinos angesteuert…

Arduino

#include <Stepper.h> // Hinzufügen der Programmbibliothek.
int SPU = 2048; // Schritte pro Umdrehung.
Stepper Motor(SPU, 3, 5, 4, 6); // Der Schrittmotor erhält die Bezeichnung "Motor" und es wird angegeben an welchen Pins der Motor angeschlossen ist.

void setup() {
  Motor.setSpeed(15); // Angabe der Geschwindigkeit in Umdrehungen pro Minute.
}

void loop() {
  Motor.step(2048); // Der Motor macht 2048 Schritte, das entspricht einer Umdrehung.
  delay(1000); // Durch diese Pause bleibt der Motor nach der Drehung für eine Sekunde stehen.
  Motor.step(-2048); // Der Motor macht durch das Minuszeichen 2048 Schritte in die andere Richtung.
  delay(1000); // Durch diese Pause bleibt der Motor nach der Drehung für eine Sekunde stehen.

  Motor.step(512); // nur eine Viertelumdrehung
  delay(1000);
  Motor.step(-1024); // halbe Umdrehung rückwärts
  delay(1000);
}

mehr dazu unter https://funduino.de/nr-15-schrittmotor


Fernbedienung

Mit Hilfe eines Infrarotempfängers kann das Arduinoboard die Befehle einer Infrarotfernbedienung auswerten. Die Daten werden dabei in Form von Infrarotlicht von der Fernbedienung zum Empfänger gesendet.

mehr dazu unter https://funduino.de/nr-11-fernbedienung

Anwendungen

… mit diesem Knowhow kann man sich dann auch z.B. Programmierbarer Fernauslöser für Digitalkameras bauen und somit Zeitrafferbilder machen oder auf Geräusche, Bewegungen usw. reagieren.

Universal Arduino Remote

Okay, the image is a bit misleading, there are not "over 9000" buttons on this remote, but rather 400 buttons. And you can control up to 20 devices through infrared (IR), with 20 different actions. instructables.com


RFID Kit

Der RFID („radio-frequency identification“) Reader wird verwendet, um von RFID Sendern (auch „RFID Tags“ genannt) per Funk einen bestimmten Code auszulesen. Jeder Sender hat dabei nur einen einmaligen ganz individuellen Code. Damit lassen sich mit dem Arduino Schließanlagen oder ähnliche Projekte verwirklichen, bei denen sich eine Person mit einem Sender identifizieren soll.

Arduino

#include <SPI.h> // SPI-Bibiothek hinzufügen
#include <MFRC522.h> // RFID-Bibiothek hinzufügen
#define SS_PIN 10 // SDA an Pin 10
#define RST_PIN 9 // RST an Pin 9

MFRC522 mfrc522(SS_PIN, RST_PIN); // RFID-Empfänger benennen

void setup() {
  Serial.begin(9600); // Serielle Verbindung starten (Monitor)
  SPI.begin(); // SPI-Verbindung aufbauen
  mfrc522.PCD_Init(); // Initialisierung des RFID-Empfängers
}

void loop() {
  // Wenn keine Karte in Reichweite ist...
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return; // ...springt das Programm zurück vor die if-Schleife, womit sich die Abfrage wiederholt.
  }

  // Wenn kein RFID-Sender ausgewählt wurde
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return; // ...springt das Programm zurück vor die if-Schleife, womit sich die Abfrage wiederholt.
  }

  Serial.print("Die ID des RFID-TAGS lautet:"); // "Die ID des RFID-TAGS lautet:" wird auf den Serial Monitor geschrieben.

  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i], HEX); // Dann wird die UID ausgelesen, die aus vier einzelnen Blöcken besteht und der Reihe nach an den Serial Monitor gesendet. Die Endung Hex bedeutet, dass die vier Blöcke der UID als HEX-Zahl (also auch mit Buchstaben) ausgegeben wird
    Serial.print(" "); // Der Befehl „Serial.print(" ");“ sorgt dafür, dass zwischen den einzelnen ausgelesenen Blöcken ein Leerzeichen steht.
  }

  Serial.println(); // Mit dieser Zeile wird auf dem Serial Monitor nur ein Zeilenumbruch gemacht.
}

mehr dazu unter https://funduino.de/nr-18-rfid-kit


Bitte bis zum nächsten Mal installieren

Beim nächsten Treffen (2.5.19) fangen wir mit Sachen am Raspberry Pi an!


Danke

Weitere Vorträge: