Funkübertragung von Messwerten mit dem RF Link Modul

Das RF Link Modul (Receiver und Transmitter) aus der RWS-371-Serie ist ein ziemlich günstiger Weg, Signale kabellos über kurze Distanzen zu übertragen. Dieses Beispiel zeigt, wie man es verwendet. Als Transmitter kannst Du die Module TLP 434, 434-A oder 916-A, als Receiver die Module RLP 434, 434-A, 916-A oder 916-F verwenden.

Die Funktionsweise der Module ist sehr einfach. Wenn der Daten-Pin des Sendemoduls getriggert wird, sendet es ein Signal. Der Empfänger empfängt es und schickt ein Signal an einen Pin des Mikrocontrollers.

Damit man mit dieser Funktion etwas Sinnvolles anstellen kann, werden wir die VirtualWire Bibliothek von Mike McCauley verwenden, die es uns ermöglicht, komplexe Daten zu übertragen.

Die Bibliothek kannst Du Dir von dieser Seite herunterladen. Sie muss in den libraries Ordner im Arduino-Benutzerordner kopiert werden. Danach musst Du die Arduino IDE erneut starten.

Ich schlage vor, dass Du die Schaltung einfach nachbaust und die Programme auf die beiden Microcontroller überträgst. Der Code ist ziemlich selbsterklärend: Sechs Analoge Inputs des Sendenden Mikrocontrollers werden ausgelesen und mittels RF Link Modul verschickt. Der empfangende Mikrocontroller sendet die empfangenen Daten dann an die serielle Schnittstelle. Mit dem Seriellen Monitor der Arduino-Software kann man sich die Daten ansehen.

Circuits using Arduino UNO

RF Link Modul mit Arduino

Circuits using the Teensy 3.1

RF Link Modul mit Teensy

Code für den Sender

/*.............................................................
transmitter

build on example "Sending Multiple Variables Using VirtualWire. Transmitter"
by Author: Rodrigo Mompo Redoli
For controlrobotics.rodrigomompo.com
..............................................................*/
#include <VirtualWire.h>

int sensorPins[] = {A0,A1,A2,A3,A4,A5}; // The pins were sensor are attached
char Sensor1CharMsg[21];// The string that we are going to send trought rf 

void setup() {
  // VirtualWire setup
  vw_set_ptt_inverted(true);

  vw_setup(2000); // Bits per sec
  vw_set_tx_pin(12);// Set the Tx pin. Default is 12
}

void loop() {
  sprintf(Sensor1CharMsg, "%d,%d,%d,%d,%d,%d", analogRead(sensorPins[0]), analogRead(sensorPins[1]), analogRead(sensorPins[2]), analogRead(sensorPins[3]), analogRead(sensorPins[4]), analogRead(sensorPins[5]));
  delay(5);

  vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));
  vw_wait_tx(); // Wait until the whole message is gone
 
  delay(40);
}

Code für den Empfänger

/* Receiver 

build on example "Sending Multiple Variables Using VirtualWire."
by Author: Rodrigo Mompo Redoli
For controlrobotics.rodrigomompo.com
..............................................................*/

#include <VirtualWire.h>

const int led_pin = 13;
const int receive_pin = 12;

int maxSensorData = 6;
int sensorData[6];

char StringReceived[22]; 

void setup() {
  Serial.begin(9600);                        // initialising serial
  vw_set_rx_pin(receive_pin);                // virtual wire setup
  vw_set_ptt_inverted(true);                 // virtual wire setup
  vw_setup(2000);                            // bits per second
  vw_rx_start();                             // Start the receiver PLL running
} // END void setup

void loop(){
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  if (vw_get_message(buf, &buflen)) {        //Taking the data from the control base
    int i;
    for (i = 0; i < buflen; i++) {            
      StringReceived[i] = char(buf[i]);      // data to array
    }
    // split data into array sensorData
    sscanf(StringReceived, "%d,%d,%d,%d,%d,%d", &sensorData[0], &sensorData[1], &sensorData[2], &sensorData[3], &sensorData[4], &sensorData[5]); // Converts a string to an array
  }
  for (int i=0; i<maxSensorData; i++){       // nice output
    Serial.print("Sensor "); Serial.print(i); Serial.print(": "); 
    Serial.print(sensorData[i]); Serial.print("\t");
  }
  Serial.println("");                        // linefeed
  // reset variable StringReceived
  memset(StringReceived, 0, sizeof(StringReceived));
  delay(5);
}

Arduino

RF Link Modul mit Arduino

Teensy

RF Link Modul mit Teensy

Montage auf Breadboard. Für den Versuchsaufbau teilen sich beide Controller eine Stromquelle. Das ist natürlich nicht nötig.

FacebookTwitterGoogle+PinterestTumblrWhatsAppWordPressEvernoteDiasporaYahoo MessengerShare

StartHardware.org – Arduino für Schulkinder

Starthardware.org
Heute mal was in eigener Sache. Gestern habe ich mein neues Projekt StartHardware.org veröffentlicht. Wie auf Arduino-Tutorial.de geht es darum, das Wissen um Arduino zu vermitteln. Diesmal ist die Zielgruppe allerdings etwas jünger.

StartHardware.org ist erstmal ein Online-Kurs für den Einstieg in Arduino und das Programmieren von Hardware. Elektronische Grundlagen werden ebenso wie Programmieren Schritt für Schritt erklärt. Am Ende kann man sich sein eigenes elektronisches Haustier basteln, dass mit den Augen blinzelt, meckert, wenn man sich nicht darum kümmert und das schnurre, wenn es gestreichelt wird.

Starthardware.org Starter Kit mit Arduino

Dazu kommt ein sehr günstiges Starter Kit, das ich zusammen mit meinen Partnern von TinkerSoup.de entwickelt habe. Es ist für 39,90 Euro erhältlich und beinhaltet alles für den Arduino-Start.

Also falls Ihr noch didaktisch wertvolle Weihnachtsgeschenke für Eure Kinder sucht, wäre ein StartHardware.org Starter Kit eine tolle Wahl ;-)

Dias automatisch digitalisieren mit Arduino

Dias automatisch digitalisieren mit Arduino

Dieses Projekt von Koen Dooms löst das nervige Problem Dias zu digitalisieren. Der Diawechsel wird dabei durch einem Diaprojektor mit Schlitten vollzogen. Eine digitale Spiegelreflexkamera fotografiert die Dias mittels Makro-Objektiv ab. Das Arduino wird dabei als Controller verwendet.

Um die optimale Beleuchtung der Dias zu gewährleisten, muss eine weiße Plastikfläche als Diffusor zwischen Leuchte und Dia eingesetzt werden.

In der Schaltung werden Optokoppler verwendet, um die Fokus/Shutter-Funktion der Kamera auszulösen. Danach wird die Transportfunktion des Diaprojektors ausgelöst, um das nächste Dia an die richtige Position zu bringen.

Zwei Potentiometer können zur Justierung des optimalen Timings von Fokus und Transport verwendet werden.

Achtung! Beim Arbeiten am offenen Dia-Projektor muss der Stecker aus der Steckdose gezogen sein! Die Arbeit an 230V Geräten ist gefährlich. Nutze diese Anleitung auf eigene Gefahr.

Fritzing-Diagramm
Fritzing-Diagramm

Hier sind die Dateien zum Download

Arduino Yún präsentiert von den Machern

Über das Arduino Yún hatte ich ja hier schon mal etwas geschrieben, aber in diesem Video kommen die Macher mal zu Wort. Massimo Banzi und David Cuartielles kündigen in diesem Video das nun veröffentlichte Board an. Kaufen kann man es z.B. bei Amazon: Arduino YUN

Das Board ist ein auf dem ATmega32u4 (Arduino Leonardo) basierendes Mikrocontroller Board, das zusätzlich über einen Atheros Prozessor verfügt. Auf ihm läuft die Linux Distribution Linino. Das Arduino Leonardo hat einen eingebauten Ethernet Adapter (RJ 45), WIFI Support, einen USB-A Port, 20 digitale Input/Output-Pins, wovon 7 als PWM Ausgänge und 12! als analoge Eingänge verwendet werden können. Angeschlossen werden kann das Arduino Yún über eine Micro USB Verbindung. Es hat einen ICSP Header.

Das Arduino Yún kann mit der laufenden Linux Distribution kommunizieren. Neben Linux Kommandos, kann man eigene Shell und Python Skripte schreiben und nutzen.

Laut einer Amazon-Rezension gab es anfängliche Probleme mit der Bridge-Software, die nun scheinbar behoben werden können.

Die offizielle Arduino Yún Seite könnt Ihr hier finden.

Mein Arduino Yún ist bestellt und ich werde natürlich berichten, was sich damit alles anstellen lässt.

Falls Ihr schon Ideen dafür habt, postet die bitte in den Kommentaren :-)

Temperatur und Luftfeuchtigkeit messen

Temperatur und Luftfeuchtigkeit messen – Schaltung mit Fritzing erzeugt
Temperatur und Luftfeuchtigkeit messen – Schaltung mit Fritzing erzeugt

Um Temperatur und Luftfeuchtigkeit zu messen, kann man den Sensor RHT03 (auch bekannt als DHT22) benutzen. Es handelt sich um einen vorkalibrierten Sensor, der über eine One-Wire Schnittstelle (MaxDetect), also eine Datenleitung mit nur einem Kabel, angesprochen wird. Der Sensor benötigt außer einem Widerstand keine weiteren Bauteile und arbeitet mit 5V. Legt man den Sensor mit den Gittern vor sich hin, ist der linke Pin der 5V+ Anschluss, der daneben der Datenpin, der noch mit einem Widerstand (4,7kΩ) mit 5V+ verbunden ist. Der ganz rechte Pin ist der GND. Pin 3 muss nicht weiter beachtet werden.

Die Bibliothek, die man benötigt heißt DHT22 und ist hier auf Github herunterladbar. Sie muss in den Library-Ordner des Arduino-Sketchbooks kopiert und in »DHT22« umbenannt werden.

Der Code hier funktioniert, jedoch kann man aus der DHT22 Bibliothek noch mehr, wie z.B. Fehlerauswertung des Sensors, holen. Wer sich dafür interessiert, soll mal in der Arduino-Software das Beispiel Datei>Beispiele>DHT22>Serial öffnen.

Der Sensor kann nur alle ein bis zwei Sekunden ausgelesen werden und benötigt darüber hinaus eine Aufwärmphase von zwei Sekunden – dazu dient das Delay.

#include <LiquidCrystal.h>
#include <DHT22.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensorPin = 8;
DHT22 mySensor(sensorPin);

void setup() {
  lcd.begin(16, 2);   
}

void loop() {
  delay(2000);

  mySensor.readData();
  lcd.setCursor(8, 0);
  lcd.print("Tempera.");

  lcd.setCursor(8, 1);
  lcd.print("Humidity");
    
  lcd.setCursor(0, 0);
  lcd.print(mySensor.getTemperatureC());

  lcd.setCursor(0, 1);
  lcd.print(mySensor.getHumidity());
}

Liquid Crystal Displays

Arduino Liquid Crystal Display (LCD)
Arduino Liquid Crystal Display (LCD) – Schaltung mit Fritzing erzeugt

Liquid Crystal Displays (LCDs) können zur Textausgabe in Arduino-Projekten verwendet werden. Die meisten LCDs basieren auf dem HD44780 Chip von Hitachi und werden mit der Arduino-Library LiquidCrystal angesprochen.

Das Display kann im 4 oder 8 Bit Modus angesprochen werden. Im 4 Bit Modus benötigt man 4, im 8 Bit Modus 8 Datenkabel aus eben so vielen digitalen Pins des Arduino-Boards.

Das Display wird wie im Schaltbild gezeigt angeschlossen. Je nach Display gibt es einen Anschluss für die Hintergrundbeleuchtung und ein Potentiometer, um den Anzeigekontrast zu regeln.

Im Programm wird zunächst die Library ,die übrigens mit der Arduino-Software geliefert wird, eingebunden:

#include LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Nun wird das LiquidCrystal-Objekt mit dem Namen lcd angelegt. Die digitalen Outputpins, die man verwendet hat, werden als Parameter angegeben:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Im Setup wird die Displaykonfiguration übergeben. Die beiden Parameter stehen für die Zeichenanzahl einer Zeile und die Zeilenanzahl. In diesem Beispiel 16 Zeichen und 2 Zeilen:

lcd.begin(16, 2);

Mit print lassen sich Nachrichten auf das Display schreiben.

lcd.print("hello, world!");

Der Befehl setCursor legt fest, ab welchem Zeichen in der Zeile und in welcher Zeile der Text ausgegeben werden soll.

lcd.setCursor(0, 1);

Der gesamte Code des Arduino-Beispiels (von D. Mellis und T. Igoe), dass unter Datei>Beispiele>LiquidCrystal>HelloWorld zu finden ist, sieht dann so aus:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
    lcd.begin(16, 2);
    lcd.print(&quot;hello, world!&quot;);
}

void loop() {
    lcd.setCursor(0, 1);
    lcd.print(millis()/1000);  // gibt Sekunden ab Start aus
}

Bleibt noch zu erwähnen, dass es auch andere LCDs gibt, die mit wesentlich weniger Pins auskommen, aber dazu ein anderes Mal.

Abstandsmessung mit dem Sharp GP2Y0A21YK IR Entfernungssensor

Sharp GP2Y0A21YK
Sharp Abstandssensor GP2Y0A21YK – Schaltung mit Fritzing erzeugt

Der Infrared Proximity Sensor – Sharp GP2Y0A21YK ist ein Infrarot-Abstandssensor. Er besteht aus einer Infrarot-LED und einem Phototransistor, der das von einem Objekt reflektierte Infrarot-Licht misst.

Der Sensor selbst verfügt über eine Steckbuchse für die man am Besten ein vorkonfektionierte Anschlusskabel verwendet. Das Anschließen selbst ist sehr einfach. Das mittlere Kabel wird mit dem GND und das rechte mit 5V+ verbunden. Das linke Kabel kann man einfach an einen analogen Input anschließen.

Wenn kein Infrarotlicht durch ein Objekt reflektiert wird, beträgt der Output des Sensors 0V. Das ergibt einen Analogen Input Wert von 0. Je näher sich ein Objekt vor dem Sensor befindet, desto höher wird der Analoge Input Wert. Er steigt bis ca. 630. Sobald ein Objekt dem Sensor zu nahe kommt (ca. 20cm), sinkt der Wert allerdings wieder.

Der Sensor ist preiswert und sehr einfach anzuschließen, jedoch liefert er keinen verlässlichen festen Abstandswert. Dieser ist von der reflektierenden Oberfläche abhängig. Auch können Infrarotquellen, wie Fernbedienungen, die Werte beeinflussen.

Sharp stellt den Sensor in unterschiedlichen Varianten mit unterschiedlichen Reichweiten her.

void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.println(analogRead(0));
  // Ergebnisse werden im Seriellen Monitor angezeigt
  delay(20);
}

Und was kann man jetzt damit anstellen? Hier ein paar Beispiele:

»Fox in a box«:

Fox in the Box from Stephan Thiel on Vimeo.