Taula de continguts:

Dispositiu client / esclau (sensor) genèric 1 fil Arduino: 4 passos
Dispositiu client / esclau (sensor) genèric 1 fil Arduino: 4 passos

Vídeo: Dispositiu client / esclau (sensor) genèric 1 fil Arduino: 4 passos

Vídeo: Dispositiu client / esclau (sensor) genèric 1 fil Arduino: 4 passos
Vídeo: Solventando problemas de Arduino IDE con ESP32 y ESP8266 | Arduino basico 2024, Desembre
Anonim
Dispositiu client / esclau (sensor) genèric 1 fil Arduino
Dispositiu client / esclau (sensor) genèric 1 fil Arduino

Si us plau, llegiu la introducció i el pas 2 del meu instructiu sobre com construir una pantalla Arduino 1 cable (144 caràcters) per obtenir més informació sobre la situació i les biblioteques disponibles. Com s’explica allà, utilitzarem la biblioteca OneWire-Hub (emulador de dispositiu esclau OneWire) d’orgua (parar atenció hi ha altres forquilles al voltant) per construir dispositius genèrics d’un fil (per exemple, sensors) mitjançant un Arduino.

Pas 1: programari

El més important és crear un dispositiu que pugui retornar bàsicament qualsevol tipus de valor d’una manera senzilla. És a dir, que el programari estàndard es pot utilitzar per llegir tots els valors directament (no es necessita cap conversa ni manipulació binària). Per a això, necessitem un dispositiu d'1 fil per defecte molt senzill que pugui retornar flotants i que sigui àmpliament compatible. L'única opció que conec és el termòmetre DS18B20 (el monitor de bateria DS2438 també és interessant i útil, però força complex i, per tant, lent entre altres inconvenients). La biblioteca OneWire-Hub conté un exemple anomenat DS18B20_asInterface que fa exactament el que necessitem. Crea un munt de DS18B20 dels quals cadascun representa un valor flotant que volem retornar dels nostres sensors. Les restriccions aquí són la resolució i els valors han de situar-se en l’interval -55, 0 … 125, 0. Això es pot aconseguir fàcilment (en el pitjor dels casos, canviar l’escala) i, en realitat, és millor que els valors que es poden representar per exemple. els valors DS2438 (1,5 a 10V). Com a alternativa, es pot establir un rang més gran de valors mitjançant:

setTemperatureRaw (static_cast (valor * 16.0f));

però és possible que la lectura i el processament d'aquests valors no estiguin admesos per tots els programes, ja que no estan disponibles a les especificacions.

El que heu de tenir en compte és que inicialment el nombre màxim d'esclaus es limita a 8, però es pot canviar a "OneWireHub_config.h" augmentant HUB_SLAVE_LIMIT fins a 32. També heu d'assegurar-vos d'adoptar ONEWIRE_TIME_MSG_HIGH_TIMEOUT si el vostre Xarxa d’un cable (per exemple, x10), tal com s’explica al pas 2 de la pantalla 1 cable Arduino (144 caràcters). I per utilitzar la versió IDE> = 1.8.3 per compilar i penjar el codi al vostre Arduino.

Heus aquí com a exemple el codi del dispositiu que he creat fa molt poc. Com suposo que no feu servir la mateixa combinació de sensors que faig, no aprofundiré en els detalls aquí, comproveu el codi i pregunteu si necessiteu ajuda.

Pas 2: maquinari

Maquinari
Maquinari

Bàsicament, tot el que pugueu connectar a un Arduino es pot utilitzar com a sensor que trieu. L'única restricció és que la lectura del sensor ha de ser el més ràpida possible per tenir molt temps per a la comunicació amb 1 fil (confereixi el pas 2 del meu instructiu sobre la pantalla 1 fil Arduino (144 caràcters) per per obtenir un exemple).

Un exemple de possible maquinari podria ser una estació meteorològica com, per exemple:

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

A més o en lloc de vosaltres, és possible que vulgueu utilitzar el propi Arduino com a sensor. Podeu obtenir més informació sobre això a les meves instruccions sobre les funcions menys conegudes d’Arduino: els possibles valors són la tensió de la font i la temperatura interna.

Aquí, com a exemple, una imatge del dispositiu que vaig construir fa molt poc. Com suposo que no utilitzeu la mateixa combinació de sensors que faig, no aprofundiré en els detalls aquí, comproveu el codi i pregunteu si necessiteu ajuda.

Pas 3: proveu el dispositiu

Connecteu-lo a la xarxa i comproveu que hi hagi tots els identificadors de ROM al vostre programari i els valors que retornen com a temperatura.

Pas 4: Apèndix: ATtiny85

Apèndix: ATtiny85
Apèndix: ATtiny85

Dispositius individuals (limitació de memòria) també es poden fer en un ATtiny85. Això necessita uns quants passos ja que programem l’ATtiny85 amb Arduino Uno com a proveïdor d’Internet amb l'ajut de l'IDE Arduino:

  • Enllaços

    • 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. utilitzeu Arduino IDE> = 1.8.3
  2. instal·la l’opció ATtiny a IDE

    1. Fitxer> Preferències> URL addicionals del gestor de taulers:
    2. Eines> Tauler: ??? > Gestor de juntes …
    3. cerqueu: "tiny" i instal·leu
  3. pengeu esbossos d’ISP a un Uno

    Fitxer> Exemples> ArduinoISP> ArduinoISP

  4. inseriu ATtiny85 al sòcol de programació (força zero) i connecteu-lo:

    1. Pin Arduino MOSI D11 a ATtiny Pin 5
    2. Pin Arduino MISO D12 a ATtiny Pin 6
    3. Pin Arduino SCK D13 a ATtiny Pin 7
    4. Restableix el pin Arduino D10 al pin 1 ATtiny
    5. Pin Arduino GND a ATtiny Pin 4
    6. Pin Arduino VCC a ATtiny Pin 8
    7. (> = Pot ser necessari un límit de 10uF al pin RESET d'Arduino Uno)
  5. seleccioneu ATtiny85 (veure imatge):

    • Tauler: "ATtiny25 / 45/85"
    • Rellotge del temporitzador 1: "CPU"
    • B. O. D.: "B. O. D. desactivat"
    • LTO (només 1.6.11 +): "Desactivat"
    • Xip: "ATtiny85"
    • Rellotge: "8 MHz (intern)" (compatible amb ATtiny85 i ATtiny84)
    • Rellotge: "16 MHz (PLL)" (configuració alternativa només per a ATtiny85)
    • Port: ???
  6. seleccioneu Programador:

    Eines> Programador: "Arduino com a ISP" (NO "ArduinoISP"!)

  7. definiu els paràmetres dels fusibles (rellotge, etc.):

    Eines> Grava el carregador d'arrencada

  8. pengeu aquest codi (el LED d'error del programador ha d'estar apagat; en cas contrari, restableix-lo)
  9. Disseny de pins ATtinyX5 (ATtiny85):

    1. Pin 1: PB5 (RST)
    2. Pin 2: PB3 (A3): opcionalment connectat mitjançant 220ohm a 1 <-TX
    3. Pin 3: PB4 (A2): connectat a DATA de 1 fil
    4. Pin 4: GND: connectat a GND
    5. Pin 5: PB0 (PWM): connectat al sensor I2C SDA
    6. Pin 6: PB1 (PWM): connectat a LED amb 4,7 k a GND
    7. Pin 7: PB2 (A1): connectat al sensor I2C SCL
    8. Pin 8: VCC: connectat a 5V

Treballar amb ATTiny85 necessita una mica més de feina, ja que necessiteu obtenir biblioteques addicionals per a comunicacions I2C (adafruit / TinyWireM) i sortida en sèrie (TinyDebugSerial). A més, com que la memòria és bastant limitada, és possible que vulgueu treballar molt amb #define, p. per eliminar la depuració en sèrie. A l'exemple podeu veure tot això junt.

Per provar el primer pas és comprovar si el LED parpelleja amb la freqüència correcta, 0,5 Hz. A continuació, connecteu-lo al bus 1wire i comproveu el dispositiu nou.

Recomanat: