Inhaltsverzeichnis:

Arduino 1-wire Generic Client/Slave Device (Sensor) - Gunook
Arduino 1-wire Generic Client/Slave Device (Sensor) - Gunook

Video: Arduino 1-wire Generic Client/Slave Device (Sensor) - Gunook

Video: Arduino 1-wire Generic Client/Slave Device (Sensor) - Gunook
Video: CC3220 - Interface 1 wire DS18B20 temperature sensor using TIRTOS 2024, November
Anonim
Arduino 1-Draht generisches Client/Slave-Gerät (Sensor)
Arduino 1-Draht generisches Client/Slave-Gerät (Sensor)

Bitte lesen Sie die Einführung und Schritt 2 meiner Anleitung zum Erstellen eines Arduino 1-Wire-Displays (144 Zeichen), um weitere Informationen über die Situation und die verfügbaren Bibliotheken zu erhalten. Wie dort erklärt, verwenden wir die OneWire-Hub-Bibliothek (OneWire-Slave-Geräteemulator) von orgua (Achtung, es gibt noch andere Gabeln), um generische 1-Wire-Geräte (z. B. Sensoren) mit einem Arduino zu bauen.

Schritt 1: Software

Das Wichtigste ist, ein Gerät zu bauen, das auf einfache Weise im Grunde jede Art von Wert zurückgeben kann. Dies bedeutet, dass alle Werte direkt mit Standardsoftware gelesen werden können (keine Konversation oder binäre Manipulation erforderlich). Dafür brauchen wir ein sehr einfaches 1-Wire-Standardgerät, das Floats zurückgeben kann und weithin unterstützt wird. Die einzige mir bekannte Wahl ist das DS18B20 Thermometer (der DS2438 Batteriemonitor ist auch interessant und nützlich, aber ziemlich komplex und daher unter anderen Nachteilen langsam). Die OneWire-Hub-Bibliothek enthält ein Beispiel namens DS18B20_asInterface, das genau das tut, was wir brauchen. Es erstellt eine Reihe von DS18B20, von denen jeder einen Float-Wert darstellt, den wir von unseren Sensoren zurückgeben möchten. Die Einschränkungen sind hier die Auflösung und die Werte müssen im Bereich -55, 0 … 125, 0 liegen. Das lässt sich leicht erreichen – im schlimmsten Fall durch Umskalieren – und ist eigentlich besser als die Werte, die z. B. die DS2438-Werte (1,5 bis 10V). Alternativ kann ein größerer Wertebereich eingestellt werden mit:

setTemperatureRaw(static_cast(Wert * 16.0f));

Das Lesen und Verarbeiten dieser Werte wird jedoch möglicherweise nicht von jeder Software unterstützt, da dies außerhalb der Spezifikationen liegt.

Zu beachten ist, dass die maximale Anzahl der Slaves zunächst auf 8 beschränkt ist, aber in "OneWireHub_config.h" durch Erhöhen von HUB_SLAVE_LIMIT auf bis zu 32 geändert werden kann. Außerdem müssen Sie darauf achten, ONEWIRE_TIME_MSG_HIGH_TIMEOUT bei Bedarf zu übernehmen 1-Draht-Netzwerk (zB x10), wie in Schritt 2 von Arduino 1-Draht-Display (144 Chars) erklärt. Und um die IDE-Version >= 1.8.3 zu verwenden, um den Code zu kompilieren und auf Ihr Arduino hochzuladen.

Hier als Beispiel der Code des Gerätes, das ich vor kurzem gebaut habe. Da ich davon ausgegangen bin, dass Sie nicht die gleiche Kombination von Sensoren verwenden wie ich, werde ich hier nicht weiter auf Details eingehen, den Code überprüfen und Fragen stellen, wenn Sie Hilfe benötigen.

Schritt 2: Hardware

Hardware
Hardware

Grundsätzlich kann alles, was Sie an einen Arduino anschließen können, als Sensor Ihrer Wahl verwendet werden. Die einzige Einschränkung besteht darin, dass das Lesen des Sensors so schnell wie möglich erfolgen sollte, um genügend Zeit für die 1-Draht-Kommunikation zu haben (siehe Schritt 2 meiner Anleitung über Arduino 1-Draht-Display (144 Zeichen) in der Reihenfolge um ein Beispiel zu bekommen).

Ein Beispiel für mögliche Hardware könnte eine Wetterstation sein wie z. B.:

https://shop.boxtec.ch/wetter-messer-p-41289.html

Zusätzlich oder stattdessen möchten Sie vielleicht nur das Arduino selbst als Sensor verwenden. Sie können mehr darüber in meinem anweisbaren über die Arduino Lesser Known Features lesen - mögliche Werte sind die Quellenspannung und die Innentemperatur.

Hier als Beispiel ein Bild des Gerätes, das ich vor kurzem gebaut habe. Da ich davon ausgegangen bin, dass Sie nicht die gleiche Kombination von Sensoren verwenden wie ich, werde ich hier nicht weiter auf Details eingehen, den Code überprüfen und Fragen stellen, wenn Sie Hilfe benötigen.

Schritt 3: Testen Sie das Gerät

Verbinden Sie es mit Ihrem Netzwerk und überprüfen Sie Ihre Software auf vorhandene ROM-IDs und die Werte, die sie als Temperatur zurückgeben.

Schritt 4: Anhang: ATtiny85

Anhang: ATtiny85
Anhang: ATtiny85

Einzelne Geräte (Speicherbegrenzung) können auch auf einem ATtiny85 durchgeführt werden. Dies erfordert ein paar Schritte, da wir den ATtiny85 mit Arduino Uno als ISP mit Hilfe der Arduino IDE programmieren:

  • Links

    • https://playground.boxtec.ch/doku.php/arduino/att…
    • https://sebastian.expert/could-not-find-usbtiny-d…
    • https://learn.sparkfun.com/tutorials/tiny-avr-pro…
    • https://forum.arduino.cc/index.php?topic=425532.0
    • https://forum.arduino.cc/index.php?topic=128963.0
  1. Arduino-IDE verwenden >=1.8.3
  2. Installieren Sie die ATtiny-Option in der IDE

    1. Datei > Einstellungen > Zusätzliche Boards-Manager-URLs:
    2. Werkzeuge > Brett: ??? > Vorstandsmanager…
    3. suche nach: "winzig" und installiere
  3. ISP-Skizze auf ein Uno hochladen

    Datei > Beispiele > ArduinoISP > ArduinoISP

  4. Stecken Sie ATtiny85 in die Programmierbuchse (Nullkraft) und verdrahten Sie es:

    1. Arduino Pin MOSI D11 auf ATtiny Pin 5
    2. Arduino Pin MISO D12 auf ATtiny Pin 6
    3. Arduino Pin SCK D13 auf ATtiny Pin 7
    4. Arduino Pin Reset D10 auf ATtiny Pin 1
    5. Arduino Pin GND zu ATtiny Pin 4
    6. Arduino Pin VCC zu ATtiny Pin 8
    7. (> = 10uF Kappe auf Arduino Uno RESET-Pin möglicherweise erforderlich)
  5. wählen Sie ATtiny85 (siehe Bild):

    • Tafel: "ATtiny25/45/85"
    • Timer 1 Uhr: "CPU"
    • B. O. D.: "B. O. D. deaktiviert"
    • LTO (nur 1.6.11 +): "Deaktiviert"
    • Chip: "ATtiny85"
    • Takt: "8 MHz (intern)" (ATtiny85 und ATtiny84 kompatibel)
    • Takt: "16 MHz (PLL)" (alternative Einstellung nur für ATtiny85)
    • Hafen: ???
  6. Programmierer auswählen:

    Tools > Programmierer: "Arduino als ISP" (NICHT "ArduinoISP" !)

  7. Sicherungseinstellungen (Uhr usw.) einstellen:

    Tools > Bootloader brennen

  8. Laden Sie diesen Code hoch (Programmiererfehler-LED muss aus sein, sonst setzen Sie ihn zurück)
  9. ATtinyX5-Pin-Layout (ATtiny85):

    1. Pin 1: PB5 (RST)
    2. Pin 2: PB3 (A3) - optional über 220 Ohm an 1<-TX. angeschlossen
    3. Pin 3: PB4 (A2) - verbunden mit 1-Draht DATA
    4. Pin 4: GND - verbunden mit GND
    5. Pin 5: PB0 (PWM) - verbunden mit Sensor I2C SDA
    6. Pin 6: PB1 (PWM) - verbunden mit LED mit 4.7k auf GND
    7. Pin 7: PB2 (A1) - verbunden mit Sensor I2C SCL
    8. Pin 8: VCC - verbunden mit 5V

Die Arbeit mit ATTiny85 erfordert etwas mehr Arbeit, da Sie zusätzliche Bibliotheken für die I2C-Kommunikation (adafruit/TinyWireM) und die serielle Ausgabe (TinyDebugSerial) benötigen. Da der Speicher sehr begrenzt ist, möchten Sie vielleicht viel mit #define arbeiten, z. B. um das serielle Debugging zu entfernen. Im Beispiel sieht man das alles zusammengewürfelt.

Zum Testen ist der erste Schritt zu prüfen, ob die LED mit der richtigen Frequenz von 0,5 Hz blinkt. Verbinden Sie es dann mit dem 1wire-Bus und suchen Sie nach dem neuen Gerät.

Empfohlen: