Table des matières:

Périphérique client/esclave générique Arduino 1 fil (capteur) : 4 étapes
Périphérique client/esclave générique Arduino 1 fil (capteur) : 4 étapes

Vidéo: Périphérique client/esclave générique Arduino 1 fil (capteur) : 4 étapes

Vidéo: Périphérique client/esclave générique Arduino 1 fil (capteur) : 4 étapes
Vidéo: Je suis une BDH ?! 🚨 2024, Novembre
Anonim
Périphérique client/esclave générique Arduino à 1 fil (capteur)
Périphérique client/esclave générique Arduino à 1 fil (capteur)

Veuillez lire l'introduction et l'étape 2 de mon instructable sur la façon de construire un écran Arduino 1-wire (144 caractères) afin d'obtenir plus d'informations sur la situation et les bibliothèques disponibles. Comme expliqué ici, nous utiliserons la bibliothèque OneWire-Hub (émulateur de périphérique esclave OneWire) d'orgua (faites attention, il existe d'autres fourches) afin de créer des périphériques génériques à 1 fil (par exemple des capteurs) à l'aide d'un Arduino.

Étape 1: Logiciel

La chose la plus importante est de créer un appareil qui peut renvoyer pratiquement n'importe quel type de valeur d'une manière simple. Cela signifie qu'un logiciel standard peut être utilisé pour lire toutes les valeurs directement (aucune conversation ni manipulation binaire nécessaire). Pour cela, nous avons besoin d'un périphérique à 1 fil par défaut très simple qui peut renvoyer des flottants et qui est largement pris en charge. Le seul choix que je connaisse est le thermomètre DS18B20 (le moniteur de batterie DS2438 est intéressant et utile aussi mais assez complexe et donc lent entre autres inconvénients). La bibliothèque OneWire-Hub contient un exemple appelé DS18B20_asInterface qui fait exactement ce dont nous avons besoin. Il crée un tas de DS18B20 dont chacun représente une valeur flottante que nous voulons renvoyer de nos capteurs. Les restrictions ici sont la résolution et les valeurs doivent être comprises dans la plage -55, 0 … 125, 0. Cela peut être facilement réalisé - dans le pire des cas, redimensionner - et est en fait meilleur que les valeurs qui peuvent être représentées par ex. les valeurs DS2438 (1,5 à 10V). Alternativement, une plus grande plage de valeurs peut être définie en utilisant:

setTemperatureRaw(static_cast(value * 16.0f));

mais la lecture et le traitement de ces valeurs peuvent ne pas être pris en charge par tous les logiciels car ils sont hors spécifications.

Ce que vous devez savoir, c'est qu'initialement le nombre maximal d'esclaves est limité à 8 mais peut être modifié dans "OneWireHub_config.h" en augmentant HUB_SLAVE_LIMIT jusqu'à 32. Vous devez également vous assurer d'adopter ONEWIRE_TIME_MSG_HIGH_TIMEOUT si votre Réseau à 1 fil (par exemple x10), comme expliqué à l'étape 2 de l'affichage à 1 fil Arduino (144 caractères). Et d'utiliser la version IDE >= 1.8.3 pour compiler et télécharger le code sur votre Arduino.

Voici à titre d'exemple le code de l'appareil que j'ai construit très récemment. Comme je suppose que vous ne devez pas utiliser la même combinaison de capteurs que moi, je n'entrerai pas plus dans les détails ici, vérifiez le code et posez des questions si vous avez besoin d'aide.

Étape 2: Matériel

Matériel
Matériel

Fondamentalement, tout ce que vous pouvez connecter à un Arduino peut être utilisé comme capteur de votre choix. La seule restriction est que la lecture du capteur doit être aussi rapide que possible afin d'avoir suffisamment de temps pour que la communication à 1 fil ait lieu (conférer l'étape 2 de mon instructable sur l'affichage à 1 fil Arduino (144 caractères) afin pour avoir un exemple).

Un exemple de matériel possible pourrait être une station météo comme par exemple:

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

En plus ou à la place de vous, vous voudrez peut-être simplement utiliser l'Arduino lui-même comme capteur. Vous pouvez en savoir plus à ce sujet dans mon instructable sur les fonctionnalités moins connues d'Arduino - les valeurs possibles sont la tension source et la température interne.

Voici à titre d'exemple une image de l'appareil que j'ai construit très récemment. Comme je suppose que vous ne devez pas utiliser la même combinaison de capteurs que moi, je n'entrerai pas plus dans les détails ici, vérifiez le code et posez des questions si vous avez besoin d'aide.

Étape 3: Testez l'appareil

Connectez-le à votre réseau et vérifiez dans votre logiciel que tous les ID de ROM sont présents et les valeurs qu'ils renvoient en tant que température.

Étape 4: Annexe: ATtiny85

Annexe: ATtiny85
Annexe: ATtiny85

Des appareils simples (limitation de mémoire) peuvent également être effectués sur un ATtiny85. Cela nécessite quelques étapes car nous programmons l'ATtiny85 en utilisant Arduino Uno comme FAI avec l'aide de l'IDE Arduino:

  • Liens

    • 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. utiliser Arduino IDE> = 1.8.3
  2. installer l'option ATtiny sur IDE

    1. Fichier > Préférences > URL supplémentaires du gestionnaire de cartes:
    2. Outils > Tableau: ??? > Gestionnaire de tableaux…
    3. recherchez: "petit" et installez
  3. télécharger un croquis ISP sur un Uno

    Fichier > Exemples > ArduinoISP > ArduinoISP

  4. insérez ATtiny85 dans la prise de programmation (force zéro) et câblez-la:

    1. Broche Arduino MOSI D11 à Broche ATtiny 5
    2. Arduino Pin MISO D12 à ATtiny Pin 6
    3. Broche Arduino SCK D13 à Broche ATtiny 7
    4. Arduino Pin Réinitialiser D10 à ATtiny Pin 1
    5. Arduino Pin GND à ATtiny Pin 4
    6. Arduino Pin VCC vers ATtiny Pin 8
    7. (> = 10uF cap sur la broche Arduino Uno RESET peut être nécessaire)
  5. sélectionnez ATtiny85 (voir photo):

    • Carte: "ATtiny25/45/85"
    • Minuterie 1 Horloge: "CPU"
    • B. O. D.: "B. O. D. désactivé"
    • LTO (1.6.11 + uniquement): "Désactivé"
    • Puce: "ATtiny85"
    • Horloge: "8 MHz (interne)" (compatible ATtiny85 et ATtiny84)
    • Horloge: « 16 MHz (PLL) » (réglage alternatif pour ATtiny85 uniquement)
    • Port: ???
  6. sélectionnez Programmeur:

    Outils > Programmeur: "Arduino as ISP" (PAS "ArduinoISP" !)

  7. régler les paramètres des fusibles (horloge, etc.):

    Outils > Graver le chargeur de démarrage

  8. téléchargez ce code (le voyant d'erreur du programmeur doit être éteint, sinon réinitialisez-le)
  9. Disposition des broches ATtinyX5 (ATtiny85):

    1. Broche 1: PB5 (RST)
    2. Pin 2: PB3 (A3) - connecté en option via 220ohm à 1<-TX
    3. Broche 3: PB4 (A2) - connecté à 1-wire DATA
    4. Broche 4: GND - connecté à GND
    5. Pin 5: PB0 (PWM) - connecté au capteur I2C SDA
    6. Broche 6: PB1 (PWM) - connecté à la LED avec 4,7 k à GND
    7. Broche 7: PB2 (A1) - connecté au capteur I2C SCL
    8. Broche 8: VCC - connecté à 5V

Travailler avec ATTiny85 nécessite un peu plus de travail car vous devez obtenir des bibliothèques supplémentaires pour la communication I2C (adafruit/TinyWireM) et la sortie série (TinyDebugSerial). De plus, comme la mémoire est assez limitée, vous voudrez peut-être beaucoup travailler avec #define, par exemple. pour supprimer le débogage série. Dans l'exemple, vous pouvez voir tout cela réuni.

Pour tester, la première étape consiste à vérifier si la LED clignote avec la bonne fréquence, 0,5 Hz. Ensuite, connectez-le au bus 1wire et recherchez le nouveau périphérique.

Conseillé: