Avec un Atmega, Créer un Capteur de Température sans fil

Weiterhin das Projekt der Automatisierung mit der Himbeere, der erste wichtige Schritt für mich ist es, einen drahtlose Daten senden Sensor haben. Hier präsentiere ich Ihnen ein Beispiel der Sonde, die Messung von Temperatur und Luftfeuchtigkeit.

Pi Home Connect - temperature humidity sensor atmega 328

Sie akzeptieren die Verwendung von cookies

In diesem Artikel (sehr, sehr lange), Ich warne Sie, dass Sie nicht die beste Sonde in der Welt erstellen können. Viele Websites bieten umfangreiche Methoden um eine optimale Lösung zu finden. Ich stelle hier die Ergebnisse meiner Tests und bietet damit Sie sich. Je compte sur les experts pour proposer des améliorations via les commentaires 🙂

Zur Erinnerung meine Sonde läuft auf zwei AA-Batterien, mit einem Atmega328, eine LED an der Operation und einer 433 Mhz-Sender. Die LED ist optional als Quelle von Energie, sondern Praxis zu bestätigen, dass alles funktioniert.

Nach 16 17 18 19 20 Tage der Operation (das Schreiben des Artikels gedauert), meine Sonde sendet immer die Daten mit einem Abstand von 5 m zwischen dem Sensor und das Gateway (ein Arduino, verbunden mit einer Himbeer-Pi), ohne Wände, aber mit einem Holzmöbel. Hier ist die Entwicklung der das Niveau der Batterien auf zwei Wochen :

Pi Home Connect - temperature humidity sensor atmega 328 - interface

Die Sonde verfügt über die folgenden : alle die 5 Sekunden (Ja das ist für die Prüfung), die DHT11 Sonde wird aktiviert, Temperatur und Luftfeuchtigkeit werden sowie die Akkukapazität gelesen.. Diese Daten bilden die Meldung senden. Die Nachricht wird gesendet 4 Zeitintervall Zugriffszeit. Jeder Zug auf dann Turn off LED senden.

Sie können daher das vorstellen von Verringerung der Zahl der Sendungen, Entfernen Sie die LED und durch Erhöhung der Zeit zwischen jede Messung, die Batterie kann einfach dauern ein Jahr (Ich würde bald einen Artikel zu diesem Thema machen.).

Voraussetzungen

Vor begeben Sie sich auf das Abenteuer, Sie brauchen ein bisschen Material und eine einsatzbereite Arbeitsumfeld.

Ausrüstung

Sie benötigen :

  • Von einem atmega328 (nur den chip) mit oder ohne Bootloader, Egal weil wir installieren unsere. Sie können leicht finden bei Ebay oder chinesischen Standorten in 1,5 € / Stück oder Amazon. Inbetriebnahme können mehrere Sie noch ein wenig den Preis verringern..
    Pi Home Connect - Atmega328P
  • Ein Arduino UNO wo Sie können den Atmega entfernen.. Es wird verwendet zum Senden des Bootloaders und Prüfpunkt-Management-Programm. Sie können diese Arduino (oder anderen) als Empfänger. Zählen Sie in den €10 (offizieller, aber legalen version), ein wenig mehr auf Amazon (schneller). Die Karte kann benutzt werden, zur Herstellung von anderen Prüfpunkten.
    Pi Home Connect - Arduino Uno with Atmega328p
  • Ein Temperatursensor. Ich habe eine DHT11 ich zu Hause hatte. Das ist nicht wirklich, was das beste ist, die DHT22 ist viel besser, aber ich hatte es nur einerseits zum Zeitpunkt. Count 1,40 € der DHT11 oder € 4.5 der DHT22 (aber ca ist den Preis Wert)
    Pi Home Connect - DHT11
  • Widerstand 4.7KΩ für die DHT11-Sonde erforderlich
    Pi Home Connect - resitor 4k7
  • Einem Sender und einem Empfänger 433 Mhz. Der Sender werden für die Sonde, der Empfänger für die Arduino an die Himbeere angeschlossen. Etwas weniger als 1 € das Paar. Aber Vorsicht nicht alle haben die gleiche Qualität … Anschließend werde ich andere Kommunikations-Modulen testen..
    Pi Home Connect - 433Mhz rf kit
  • AA-Batterien. Ich verwende 2 daß ich in einem Körper erholte sich von einer Weihnachten LED-Kranz. Die Kästchen kostet ca. € 3,5 10 Stück (oder Hier für eine schnellere Lieferung).Pi Home Connect - 2x AA battery holder
  • DrähtePi Home Connect - wires
  • Ein Steckbrett. Prototyping-Platten können Sie dann, weniger umfangreich und Wiederverwenden von dem Steckbrett für andere Installationen.Pi Home Connect - Breadboard
  • (Optional, jedoch sehr zu empfehlen !) 22µF Kondensator. Es dauert 2 Wenn Ihre Atmega328 standardmäßig einen externen Oszillator verwenden konfiguriert sind (und ich glaube nicht, dass Sie im Voraus wissen kann)
    Pi Home Connect - 22uF capacitor
  • (Optional, jedoch sehr zu empfehlen !) 8 oder 16 Mhz resonator Wenn Ihre Atmega328 standardmäßig einen externen Oszillator verwenden konfiguriert sind
    Pi Home Connect - 16mhz resonator

Sie sind jetzt ausgerüstet und bereit, Ihre Sonde montieren.

Arbeitsumgebung

Wenn ich spreche Arbeitsumgebung ist im Grunde das tool Arduino IDE. Nehmen Sie die version 1.5.8+, auch wenn es eine Beta-Version, um zu arbeiten !

Es ist jetzt um Ihre Atmega mit seiner internen Oszillator arbeiten konfigurieren zu können (8MHz) Verringerung der Gesamtverbrauch. Dafür empfehle ich Ihnen zum Laden das Zip hier. Das Archiv muss in das Unterverzeichnis entpackt werden Hardware befindet sich in Ihren Arduino-Programmen. Hier ist was Sie brauchen :

Arduino IDE boards.txt folder mac os

Zu Beginn der Arduino IDE sehen Sie neue Karten :

Pi Home Connect - boards atmega328 8Mhz low power

Einen optimierten Bootloader installieren

Hier ist die Verdrahtung den Bootloader laden :

PiHomeConnect-Node bootloader atmega328

Nach ihrer Fertigstellung :

  • Arduino UNO über das USB-Kabel an Ihren Computer anschließen
  • Starten Sie Arduino IDE und bestätigen Sie die Konfiguration
  • Hochladen des Programms, so dass die UNO den Bootloader senden können. Das Programm steht im Menü “Datei > Beispiele > ArduinoISP”. Klicken Sie dann auf “Upload”
    LPi Home Connect - IDE arduino ISP' Arduino UNO ist nun bereit, Ihre Montage einen Bootloader schicken !
  • Wählen Sie den Typ der Karte für Ihre Sonde. Wir wählen daher ein atmega328 auf einem Arduino 3.3V und der Häufigkeit von 8 Mhz
    Pi Home Connect - IDE bootloader 8Mhz 3.3V
  • Wählen Sie nun die Karte, die den Bootloader Programm wird. Es ist unsere Arduino
    Pi Home Connect - IDE bootloader Arduino as ISP
  • Rest den Bootloader mit dem Befehl brennen “Brennen des Bootloaders”

Jetzt haben Sie Ihre Knoten zum Betrieb in 3,3 v mit der internen Oszillator betreibt bei 8 Mhz konfiguriert. Dies ist der erste Schritt zur Optimierung der Nutzung der Energie !

Sie können jetzt Ihre Sensor und Sender hinzufügen.. Haben Sie ein resonator, Sie können ihn entfernen (sowie die Kondensatoren) :

PiHomeConnect - Arduino node temperature humidity sensor

Die Arduino UNO-Karte kann verwendet werden, um das Programm in Ihre neuen Atmega zu senden. Sie können es verbinden Sie wie in der Zeichnung darüber wo nehmen viele der Atmega-Knoten, Legen Sie es auf die UNO-Karte, Laden Sie das Programm über die IDE, dann ersetzen Sie den Knoten auf dem Steckbrett Atmega. Sie können sehen, personnellement je déplace l’atmega 😉

Das Foto von der Endmontage :

PiHomeConnect - Arduino node temperature humidity sensor

Installation des Programms sensor

In der Arduino IDE müssen Sie die folgenden Bibliotheken installieren :

  • Die DHT-Bibliothek zum Abrufen der Daten Ihre Sonde. Erhältlich hier.
  • Die Narcoleptic Buchhandlung schlafen “tief” Ihre Knoten und so sparen die Batterien. Erhältlich hier.
  • Die Manchester-Bibliothek zum Senden der Daten über den Sender 433 Mhz. Erhältlich hier.

Die Installation von Bibliotheken ist wie folgt :

  • Abrufen der .zip der Bibliothek
  • Mit dem Importtool in Arduino IDE importieren (Skizzen > Importbibliotheken)

Hier ist das Programm an Ihre Knoten mit der Arduino IDE senden :

[Code Lang =”Reiner”]
#enthalten <Narcoleptic.h>
#enthalten <dht.h>
#enthalten <Manchester.h>

#definieren BLINK_MODE wahren

#define NODE_ID 1 // On 8bits so 0..255

#definieren message_size 6 // Anzahl der Bytes senden
#definieren SEND_MESSAGE_DELAY 5000 // Verzögerung in ms zwischen jedem Extraktionswert
#definieren SEND_433_COUNT 4 // Wie oft hat die Nachricht senden zu
#definieren SEND_433_PAUSE 160 // 16 mehrere

// Definieren Anschlüsse für den Knoten verwendet,
#definieren TX_PIN 7
#definieren LED_PIN 13
#define DHT11_PIN 2

dht DHT;
// Array von Bytes zu werden, um die Nachricht
// In diesem Knoten : 2 Bytes für Spannungs, 2 Bytes für
uint8_t MsgData[message_size] = {0, 0, 0, 0, 0, 0};

//————————————————————————————————–
// Lesen Sie Strom Versorgungsspannung
//————————————————————————————————–
lange readVcc() {
BITCLEAR(PRR, aufnehmen); ADCS |= Bit(ADEN); // Aktivieren Sie die ADC
lange Ergebnis;
// Lesen 1,1V Referenz gegen Vcc
#wenn definiert (__AVR_ATtiny24__) || definiert(__AVR_ATtiny44__) || definiert(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0); // Für ATtiny84
#Elif definiert (__AVR_ATtiny25__) || definiert(__AVR_ATtiny45__) || definiert(__AVR_ATtiny85__)
ADMUX = _BV(MUX3) | _BV(MUX2);
#sonst
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); // Für ATmega328
#endif
Verzögerung(2); // Warten Sie auf Vref zu begleichen
ADCS |= _BV(ADSC); // Konvertieren
Weile (bit_is_set(ADCS,ADSC));
Ergebnis = ADCL;
Ergebnis |= ADCH<<8; Ergebnis = 1126400L / Ergebnis; // Back-calculate Vcc in mV ADCSRA &= ~ Bit(ADEN); BitSet(PRR, aufnehmen); // Disable the ADC to save power return result; // Vcc in Millivolt } void setup() { pinMode(LED_PIN, AUSGABE); If (BLINK_MODE) digitalWrite(LED_PIN, LOW); man.setupTransmit(TX_PIN, MAN_1200); MsgData[0] = NODE_ID; // Wait 1s to allow DHT11 to initialize Narcoleptic.delay(1000); } void Schleife() { // Read Vcc value long currentVcc = readVcc(); uint16_t uint16_currentVcc = (uint16_t)currentVcc; // Save millivolts in two bytes to keep high precision. Will be decoded by the gateway uint8_t byteData[2] = {uint16_currentVcc >> 8, uint16_currentVcc & 0xFF};
MsgData[2] = byteData[0];
MsgData[3] = byteData[1];

// Read data from DHT11 sensor
int chk = DHT.read11(DHT11_PIN);
// DHT11 values can be put in a byte value due to the low precision
MsgData[4] = (uint8_t)DHT.humidity;
MsgData[5] = (uint8_t)DHT.temperature;

// Nachricht senden SEND_433_COUNT mal mit einer Verzögerung von SEND_433_PAUSE ms für jede
für (int i = 0; Ich<SEND_433_COUNT; i ++) {
MsgData[1] = i;
If (BLINK_MODE) digitalWrite(LED_PIN, HOHE);
man.transmitArray(message_size, MsgData);
If (BLINK_MODE) digitalWrite(LED_PIN, LOW);
// Wartezeit zwischen den einzelnen Sende
Narcoleptic.delay(SEND_433_PAUSE);
}
// Warten Sie, bevor neuen Sensorwert bekommen
Narcoleptic.delay(SEND_MESSAGE_DELAY);
}
[/Code]

Und danach ?

Der folgende Artikel zeigt, wie Sie Daten empfangen und senden Sie sie an die Himbeer-POI, die (im Prinzip) Was zu tun ist !

Es ist immer noch die allgemeine Verbesserung ! Wie zum Beispiel :

  • Code-Optimierung. Die Idee ist, eine allgemeine Bibliothek, auf GitHub, Das bringt die Funktionen der Verwertung, Konvertierung, etc.. Abhängig von den Sensoren angeschlossen : DHT11, DHT22, LM36, etc..
  • Andere Module der emission : NRF24L01 , ESP8266, etc..
    Die 433Mz-Module sind temperamentvoll, nicht immer von guter Qualität, Ich habe den Eindruck, dass dies die beste Wahl. Also, werde ich die Untersuchung weiter.

Die Fortsetzung der Pi Home Connect Projekt bald !

Sie können auch mögen....