Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

4 Schritt:Schritt 1: Empfangen und Senden von Daten zwischen ATtiny85: Der Transmitter Schritt 2: Empfangen und Senden von Daten zwischen ATtiny85: Der Receiver Schritt 3: Empfangen und Senden von Daten zwischen ATtiny85: Ergebnisse Schritt 4: Senden und Empfangen von Sensordaten mit ATtiny85 / 45: DHT11 und LDR durch Manchester-Code

Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Ich habe viel mit dem Senden von HF-Daten zwischen zwei ATtiny85 Chips zu kämpfen, so dass ich dachte, es könnte hilfreich sein, wenn ich erklären, wie ich es tat. Es gibt eine Reihe solcher Projekte auf der Internetseite nicht beschrieben, aber dennoch ist es nicht gelungen, solche ein einfaches Projekt, das i festgestellt, daß vor allem aufgrund nicht mit den richtigen Bibliotheken und Kernen sein.
BOM
Transmitter:
ATtiny85 - 0,82 € / 10
10k Widerstand
433 MHz transmittermodule - 1 Euro pro Satz
Mini-Steckbrett - 58 cts / piece
Empfänger:
ATtiny85
10k Widerstand
433 MHz Empfängermodul
Mini-Steckbrett
Optional: 2-Draht-LCD

Es gibt zwei Hauptbibliotheken verwendet werden, um Daten auf einem Arduino-Plattform senden und empfangen: VirtualWire und Manchester-Code.
Wie Virtualwire ist etwas älter, nicht mehr unterstützt, und angeblich nur Zeichen zu senden (obwohl es eine Weise um, dass) Ich beschloss, Manchester-Code zu verwenden.

Um eine lange Geschichte kurz zu machen, es hat nicht funktioniert. Ich hatte das MANCHESTER.h und MANCHESTER.cpp Datei und lief in eine Menge Ärger, bis ich herausgefunden, dass die falsche / alte Bibliothek, benötigen Sie die Manchester.h und Manchester.cpp-Datei von hier. Als ich, dass ich meinen Sender an Arbeit, ich Daten in ein Arduino schicken konnte, das war schon eine große Erleichterung.
Allerdings ....... was immer ich tat, ich habe nicht meinen Receiver an die Arbeit. Bei der Prüfung etwas auf einem Attiny es ist sehr frustrierend, gerade bei einer LED, die Licht, aber doesnt angenommen, starren, ohne zu wissen, was und warum und wie.
Also beschloss ich, einen LCD an die Attiny hinzuzufügen, so zumindest konnte ich sehen, was los war ..
, Gab jedoch das LCD auf meinem ATtiny mir andere Probleme ... und wenn ich gelöst diejenigen, die auf die Lösung für mein Problem zu empfangen als auch erwiesen: Ich wurde mit der falschen Kern. Ich wurde mit der "Tiny Core" und nicht der "ATtiny Kern"
Letztere ist die von Highlowtech.
Auch programmierte ich die Attiny mit 8 MHz interner Oszillator, indem zuerst 'Brennen der bootloader "
HINWEIS:
Dieses arbeitet mit IDE 1.0.6. Die IDE 1.6.x hat eine andere Dateistruktur für die verschiedenen Kerne. Das ist nicht so hart zu arbeiten, ... Allerdings habe ich nicht in der Lage, es noch zu erarbeiten für die manchester Kern (Mine ist derzeit direkt in der Hardware-Ordner). Wenn Sie die manchester Bibliotheken mit IDE 1.6.x verwenden möchten, vielleicht dies wird Ihnen helfen: http://haeberling.blogspot.nl/2015/03/setting-up-arduino-ide-10-and-16-for. html Beachten Sie jedoch, dass der Kerl zu beschreiben, dass sich mit einem anderen ATtiny coreStep 1: Empfangen und Senden von Daten zwischen ATtiny85: der Sender



Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Die von dem Sender aufgebaut ist einfach:
Stecken Sie das ATtiny Chip in Ihrem Steckbrett,
Schließen Sie einen 433 MHz-Sendemodul mit seinen Daten in den Pin PB0 (dh Stift 5 auf dem Chip).
Verbinden Sie VCC und Masse des Sendermoduls an Vcc (Pin 8) und Masse (Pin 4) des Attiny
Legen Sie eine 10 k Widerstand zwischen Pin 1 (Reset) und Pin 8 (Vcc)
Schließen Vcc und Masse bis 5 Volt
Nehmen Sie einen 17 cm steifen Draht und befestigen, dass an den Antennenloch des Senders.
Verwenden Sie das folgende Programm:
  #include <Manchester.h>
 / * 
Manchester Transmitter beispiels In diesem Beispiel wird ein Sender 16-Bit-Nummer zu senden
pro Übertragung.
Probieren Sie verschiedene Geschwindigkeiten unter Verwendung dieser Konstanten, Ihre maximale
möglichen Geschwindigkeit hängt von verschiedenen Faktoren wie Sender ab
Typ, Distanz, Mikrocontroller Geschwindigkeit, ...
MAN_300 0 MAN_600 1 MAN_1200 2 MAN_2400 3 MAN_4800 4 MAN_9600 5 MAN_19200 6 MAN_38400 7
* /
#define TX_PIN 0 // Pin, wo Sie Ihren Sender verbunden ist
uint16_t transmit_data = 2761;
Leere Setup () { man.setupTransmit (TX_PIN, MAN_1200); }
Leere Schleife () { man.transmit (transmit_data); Verzögerung (200); }

Nur ein Wort auf der 2716, die ich sende. Das Programm ist nicht von mir, ich fand es als solches, und da es funktionierte und ich war sehr glücklich zu sehen, die "2716" erscheint in meinem Arduino nach tagelangen fruchtlosen Versuch, beschloss ich, es gibt als Tribut zu verlassen. (es kann hier gefunden haben) Schritt 2: Empfangen und Senden von Daten zwischen ATtiny85: Der Receiver

Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Bau der Empfänger ist einfach:
Setzen Sie den programmierten ATtiny Chip in Ihrem Steckbrett.
Schließen Sie einen 10 k Widerstand zwischen Pin 1 und Pin 8
Setzen Sie Ihre 433 MHz Empfängermodul in dem Steckbrett
Schließen Sie das datapin (in der Regel entweder eine der beiden mittleren Pins) an PB1 (physische PIN6) auf der ATtiny Pin.
Schließen Sie das VCC und Masse des Sendermoduls an Vcc (Pin 8) und Ground (Pin4) des Attiny
Schließen Sie den LCD-Schnittstelle, um PB0 (Pin 5) (Clock) und Pin PB2 (Pin 7) Stift (Data / Enable)
Schließen Vcc und Masse des LCD auf VCC und Masse.
Bringen Sie ein 17 cm (1/4 Lambda für 433 MHz) auf den Receiver-Modul.
Verwenden Sie das folgende Programm in Ihrem Chip:
  #include <Manchester.h> <br> #include <LiquidCrystal_SR.h>
 LiquidCrystal_SR LCD (0,2, TWO_WIRE);
 / *
   Manchester-Empfänger für Attiny
   In diesem Beispiel Empfänger ein 16-Bit-Zahl pro erhalten 
transmittion ein Relais ein- oder ausschalten.
versuchen, mit unterschiedlichen Geschwindigkeiten unter Verwendung dieser Konstanten Ihre maximal mögliche
Geschwindigkeit hängt von verschiedenen Faktoren wie Sendertyp abhängen,
Abstand, Mikrocontroller Geschwindigkeit, ...

MAN_300 0 MAN_600 1 MAN_1200 2 MAN_2400 3 MAN_4800 4 MAN_9600 5 MAN_19200 6 MAN_38400 7 * /
#define RX_PIN 1 // = Pin 6 uint8_t moo = 1;
Leere setup ()
{ lcd.begin (16,2); lcd.home (); lcd.print ("Empfangen"); lcd.setCursor (0,1); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } <br> Leere Schleife () { if (man.receiveComplete ()) { uint16_t m = man.getMessage (); man.beginReceive (); // beginnen Hören für nächste Meldung rechts
// nachdem Sie die Nachricht abrufen moo = ++ moo% 2; lcd.print (m); } }

Das LCD ist ofcourse optional. Sie können eine LED, die die Variable "moo" senden, um seinen Stift und damit auf komplette receival des Signals blinken bekommt, aber ich wollte nur, um sicherzustellen, dass das, was ich bekam, war das, was ich sentStep 3: Empfangen und Senden von Daten zwischen ATtiny85 : Ergebnisse

Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Die Ergebnisse sind gut, kein Müll empfangen wird, aber die Reichweite beträgt etwa 4-5 Metern, mit den Antennen. Die Antenne des Empfängers nur einen geringen Unterschied. Das auf dem Transmitter macht einen großen Unterschied.
Dennoch ist dies überraschend, da das Sendemodul zum Schalten Fernschalter bei größeren Entfernungen auch auf verschiedenen Etagen ist.

Im Hinblick auf die Länge der Antennen:
als f * λ = c (Häufigkeit * Wellenlänge = Lichtgeschwindigkeit)
λ = c / f
λ = 299.792.458 / 433.920.000
Die Wellenlänge ist 0,690893386 Meter.
Antenne würde & lgr; / 4 = 0,172723346 Meter (17,3 cm)
Das ist etwa 6,80013 Zoll.
Wenn Sie würde mit 315 MHz-Module, würde die Antenne sein: 0.238 m oder 23,8 cm
Sie können auch die Wellenlängenrechner.

Angeblich kann das Sendemodul 12 Volt zu nehmen und immer noch von einem 5 Volt Mikrocontroller Stift gesteuert werden und muss eine weitere, dann erreichen. Erhöhen der Spannung auf dem Empfänger selbstverständlich keinen Unterschied macht

Nachdem Sie die Verbindung hergestellt haben zwischen zwei ATtiny ist, die Verknüpfung einer von ihnen mit einem Arduino sollte kein Problem sein. Ich benutze meinen Daten an einen Arduino (e, g. Temperatur oder den Status eines Tripwire) zu schicken, oder um Daten von einem Arduino zu empfangen, um einen Servo- oder ein RGB-LED zu steuern.
Wenn Sie ein Relais auslösen möchten, können Sie es wie folgt tun würde:
  Leere Schleife () {<br> if (man.receiveComplete ()) {
     uint16_t m = man.getMessage ();
     man.beginReceive ();  // beginnen Hören für nächste Meldung rechts, nachdem Sie die Nachricht abrufen
     moo = ++ moo% 2;
     lcd.print (m);
     wenn (m == 2761) {digital (Relais, HIGH);}
     wenn (m == 0000) {digital (Relais, LOW);}
   } 

Ofcourse, müssen Sie die Relay Stift in den "setup'Step 4 definieren: Senden und Empfangen von Sensordaten mit ATtiny85 / 45: DHT11 und LDR durch Manchester-Code

Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Empfangen und Senden von Daten zwischen ATtiny85 (Arduino IDE 1.06)

Senden einer feststehenden Anzahl von natürlich Spaß macht auf den ersten, aber es ist nicht viel. Unten ist ein praktischeres Beispiel des Sendens 1 stationären Wert und 3 Variablenwerte durch den Äther.
  / * 
LDR = A1 RF433 = D0 DHT11 = D4 LED = D3 * / // Bibliotheken #include <dht11.h> #include <Manchester.h> DHT11 DHT11; #define DHT11PIN 4 #define TX_PIN 0 // Pin, wo Sie Ihren Sender verbunden ist // Variablen float h = 0; schwimmen t = 0; int transmit_data = 2761; int transmit_t = 0; int transmit_h = 0; int Licht = 0;
  Leere Setup () {
   man.setupTransmit (TX_PIN, MAN_1200); 
}
  Leere Schleife () {
  int chk = DHT11.read (DHT11PIN);
  h = DHT11.humidity;
  t = DHT11.temperature;
  transmit_h = 100 * h;
  transmit_t = 100 * t;
   man.transmit (transmit_data);
   Verzögerung (200);
   man.transmit (transmit_h);
   Verzögerung (200);
   man.transmit (transmit_t);
  Licht = analogRead (A1);
  man.transmit (Licht);
 } 

Es braucht 3194 Byte, so konnte ich sie in einem ATtiny45 kompilieren.
Der Sender wird D0 (Pin 5) verbunden. Der DHT11 Sensor
bis D4 (Pin 3) und einem LDR zur A1 (Pin 7) verbunden ist, mit dem anderen Ende entweder Boden oder Vcc und eine entsprechende Pull-up oder Pull-Down-Widerstand verbunden ist, je nach Ihren Wünschen,
Variablen h und t Schwimmern, die Dezimalstellen haben kann. Wie ich bin nur daran interessiert, 2 Nachkommastellen Genauigkeit, I mit 100 multiplizieren und sie in ganzen Zahlen. Ich schicke dann eine Stationskennung "2716", gefolgt von 3 Werte: Luftfeuchtigkeit, Temperatur, Licht. Die Empfangsstation kann dann erkennen, woher es kam und verarbeiten die eingehenden Signale (ab, indem sie sie um 100 wieder)