Tabla de contenido:

Cliente genérico / dispositivo esclavo de 1 cable Arduino (sensor): 4 pasos
Cliente genérico / dispositivo esclavo de 1 cable Arduino (sensor): 4 pasos

Video: Cliente genérico / dispositivo esclavo de 1 cable Arduino (sensor): 4 pasos

Video: Cliente genérico / dispositivo esclavo de 1 cable Arduino (sensor): 4 pasos
Video: Como ESTABLECER COMUNICACIÓN MODBUS entre un ARDUINO y un PLC, enviando datos analógicos|#1 2024, Noviembre
Anonim
Cliente genérico / dispositivo esclavo de 1 cable Arduino (sensor)
Cliente genérico / dispositivo esclavo de 1 cable Arduino (sensor)

Lea la Introducción y el Paso 2 de mi instructivo sobre cómo construir una pantalla Arduino de 1 cable (144 caracteres) para obtener más información sobre la situación y las bibliotecas disponibles. Como se explica allí, usaremos la biblioteca OneWire-Hub (emulador de dispositivo esclavo OneWire) de orgua (preste atención a que hay otras bifurcaciones) para construir dispositivos genéricos de 1 cable (por ejemplo, sensores) usando un Arduino.

Paso 1: software

Lo más importante es hacer un dispositivo que pueda devolver básicamente cualquier tipo de valor de manera sencilla. Lo que significa que se puede usar software estándar para leer todos los valores directamente (no se necesita conversación ni manipulación binaria). Para eso, necesitamos un dispositivo de 1 cable predeterminado muy simple que pueda devolver flotadores y sea ampliamente compatible. La única opción que conozco es el termómetro DS18B20 (el monitor de batería DS2438 también es interesante y útil, pero bastante complejo y, por lo tanto, lento, entre otros inconvenientes). La biblioteca OneWire-Hub contiene un ejemplo llamado DS18B20_asInterface que hace exactamente lo que necesitamos. Crea un montón de DS18B20 de los cuales cada uno representa un valor flotante que queremos devolver de nuestros sensores. Las restricciones aquí son la resolución y los valores deben estar en el rango -55, 0… 125, 0. Eso se puede lograr fácilmente, en el peor de los casos, se puede cambiar la escala, y en realidad es mejor que los valores que se pueden representar por ejemplo. los valores DS2438 (1,5 a 10 V). Alternativamente, se puede establecer un rango mayor de valores usando:

setTemperatureRaw (static_cast (valor * 16.0f));

pero es posible que la lectura y el procesamiento de estos valores no sean compatibles con todo el software, ya que está fuera de las especificaciones.

Lo que debe tener en cuenta es que inicialmente el número máximo de esclavos está restringido a 8, pero se puede cambiar en "OneWireHub_config.h" aumentando HUB_SLAVE_LIMIT hasta 32. También debe asegurarse de adoptar ONEWIRE_TIME_MSG_HIGH_TIMEOUT si lo necesita su Red de 1 cable (por ejemplo, x10), como se explica en el Paso 2 de la pantalla Arduino de 1 cable (144 caracteres). Y usar la versión IDE> = 1.8.3 para compilar y cargar el código en su Arduino.

Aquí, como ejemplo, el código del dispositivo que construí muy recientemente. Como supongo que no usará la misma combinación de sensores que yo, no entraré más en detalles aquí, verifique el código y haga preguntas si necesita ayuda.

Paso 2: hardware

Hardware
Hardware

Básicamente, cualquier cosa que pueda conectar a un Arduino se puede utilizar como su sensor de elección. La única restricción es que la lectura del sensor debe ser lo más rápida posible para tener suficiente tiempo para que se lleve a cabo la comunicación de 1 cable (consulte el Paso 2 de mi instrucción sobre Arduino 1-wire Display (144 caracteres) en orden para dar un ejemplo).

Un ejemplo de posible hardware podría ser una estación meteorológica como, por ejemplo:

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

Además, o en lugar de, es posible que desee utilizar el propio Arduino como su sensor. Puede leer más sobre eso en mi instructable sobre las características menos conocidas de Arduino: los valores posibles son el voltaje de la fuente y la temperatura interna.

Aquí, como ejemplo, una imagen del dispositivo que construí muy recientemente. Como supongo que no usará la misma combinación de sensores que yo, no entraré más en detalles aquí, verifique el código y haga preguntas si necesita ayuda.

Paso 3: prueba el dispositivo

Conéctelo a su red y verifique su software para ver si todos los ID de ROM están presentes y los valores que devuelven como temperatura.

Paso 4: Apéndice: ATtiny85

Apéndice: ATtiny85
Apéndice: ATtiny85

Los dispositivos individuales (limitación de memoria) también se pueden hacer en un ATtiny85. Esto necesita algunos pasos mientras programamos el ATtiny85 usando Arduino Uno como ISP con la ayuda del IDE de Arduino:

  • Enlaces

    • 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. usar Arduino IDE> = 1.8.3
  2. instalar la opción ATtiny en IDE

    1. Archivo> Preferencias> URL adicionales del administrador de tableros:
    2. Herramientas> Tablero: ??? > Gerente de tableros…
    3. busque: "diminuto" e instálelo
  3. cargar el boceto del ISP en un Uno

    Archivo> Ejemplos> ArduinoISP> ArduinoISP

  4. inserte ATtiny85 en el enchufe de programación (fuerza cero) y conéctelo:

    1. Pin de Arduino MOSI D11 a Pin 5 de ATtiny
    2. Pin de Arduino MISO D12 a Pin 6 de ATtiny
    3. Pin de Arduino SCK D13 a Pin 7 de ATtiny
    4. Arduino Pin Reset D10 a ATtiny Pin 1
    5. Pin de Arduino GND a ATtiny Pin 4
    6. Pin VCC de Arduino a Pin 8 de ATtiny
    7. (> = Es posible que se necesite una tapa de 10uF en el pin RESET de Arduino Uno)
  5. seleccione ATtiny85 (ver imagen):

    • Tablero: "ATtiny25 / 45/85"
    • Reloj del temporizador 1: "CPU"
    • B. O. D.: "B. O. D. Disabled"
    • LTO (solo 1.6.11 +): "Deshabilitado"
    • Chip: "ATtiny85"
    • Reloj: "8 MHz (interno)" (compatible con ATtiny85 y ATtiny84)
    • Reloj: "16 MHz (PLL)" (configuración alternativa solo para ATtiny85)
    • Puerto: ???
  6. seleccione Programador:

    Herramientas> Programador: "Arduino como ISP" (¡NO "ArduinoISP"!)

  7. establecer la configuración de los fusibles (reloj, etc.):

    Herramientas> Grabar cargador de arranque

  8. cargue este código (el LED de error del programador debe estar apagado; de lo contrario, reinícielo)
  9. Disposición de los pines ATtinyX5 (ATtiny85):

    1. Pin 1: PB5 (RST)
    2. Pin 2: PB3 (A3) - opcionalmente conectado a través de 220ohm a 1 <-TX
    3. Pin 3: PB4 (A2) - conectado a DATOS de 1 cable
    4. Pin 4: GND - conectado a GND
    5. Pin 5: PB0 (PWM) - conectado al sensor I2C SDA
    6. Pin 6: PB1 (PWM) - conectado a LED con 4.7k a GND
    7. Pin 7: PB2 (A1) - conectado al sensor I2C SCL
    8. Pin 8: VCC - conectado a 5V

Trabajar con ATTiny85 requiere un poco más de trabajo, ya que necesita obtener bibliotecas adicionales para comunicaciones I2C (adafruit / TinyWireM) y salida en serie (TinyDebugSerial). Además, como la memoria es bastante limitada, es posible que desee trabajar mucho con #define, p. para eliminar la depuración en serie. En el ejemplo puedes ver todo esto juntado.

Para probar, el primer paso es verificar si el LED parpadea con la frecuencia correcta, 0.5Hz. Luego conéctelo al bus 1wire y verifique el nuevo dispositivo.

Recomendado: