Índice:

Dispositivo cliente / escravo genérico Arduino de 1 fio (sensor): 4 etapas
Dispositivo cliente / escravo genérico Arduino de 1 fio (sensor): 4 etapas
Anonim
Dispositivo cliente / escravo genérico Arduino de 1 fio (sensor)
Dispositivo cliente / escravo genérico Arduino de 1 fio (sensor)

Por favor, leia a introdução e a etapa 2 do meu instrutivo sobre como construir um monitor de 1 fio Arduino (144 caracteres) para obter mais informações sobre a situação e as bibliotecas disponíveis. Conforme explicado lá, usaremos a biblioteca OneWire-Hub (emulador de dispositivo escravo OneWire) da orgua (preste atenção, há outros garfos por aí) para construir dispositivos genéricos de 1 fio (por exemplo, sensores) usando um Arduino.

Etapa 1: Software

O mais importante é fazer um dispositivo que possa retornar basicamente qualquer tipo de valor de maneira simples. O que significa que o software padrão pode ser usado para ler todos os valores diretamente (nenhuma conversa ou manipulação binária necessária). Para isso, precisamos de um dispositivo padrão de 1 fio muito simples que possa retornar flutuadores e seja amplamente suportado. A única escolha que conheço é o termômetro DS18B20 (o monitor de bateria DS2438 também é interessante e útil, mas bastante complexo e, portanto, lento entre outras desvantagens). A biblioteca OneWire-Hub contém um exemplo chamado DS18B20_asInterface que faz exatamente o que precisamos. Ele cria um monte de DS18B20, dos quais cada um representa um valor flutuante que queremos retornar de nosso (s) sensor (es). As restrições aqui são a resolução e os valores devem estar na faixa de -55, 0… 125, 0. Isso pode ser facilmente alcançado - no pior caso, reescalonar - e é realmente melhor do que os valores que podem ser representados por, e. os valores do DS2438 (1,5 a 10 V). Alternativamente, um intervalo maior de valores pode ser definido usando:

setTemperatureRaw (static_cast (value * 16.0f));

mas a leitura e o processamento desses valores podem não ser suportados por todos os softwares, pois estão fora das especificações.

O que você deve estar ciente é que inicialmente o número máximo de escravos é restrito a 8, mas pode ser alterado em "OneWireHub_config.h" aumentando HUB_SLAVE_LIMIT até 32. Além disso, você deve ter certeza de adotar ONEWIRE_TIME_MSG_HIGH_TIMEOUT se necessário por seu Rede de 1 fio (por exemplo, x10), conforme explicado na Etapa 2 da tela de 1 fio do Arduino (144 caracteres). E para usar a versão IDE> = 1.8.3 para compilar e fazer upload do código para o seu Arduino.

Aqui, como exemplo, o código do dispositivo que construí recentemente. Como presumo que você não use a mesma combinação de sensores que uso, não entrarei em detalhes aqui, verifique o código e faça perguntas se precisar de ajuda.

Etapa 2: Hardware

Hardware
Hardware

Basicamente, qualquer coisa que você possa conectar a um Arduino pode ser usado como seu sensor de escolha. A única restrição é que a leitura do sensor deve ser o mais rápido possível, a fim de ter tempo suficiente para que a comunicação de 1 fio ocorra (confira a Etapa 2 do meu instrutivo sobre o display de 1 fio do Arduino (144 caracteres) a fim para obter um exemplo).

Um exemplo de hardware possível poderia ser uma estação meteorológica como, por exemplo:

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

Além disso, ou em vez de, você pode usar o próprio Arduino como seu sensor. Você pode ler mais sobre isso em meu instrutivo sobre os recursos menos conhecidos do Arduino - os valores possíveis são a tensão da fonte e a temperatura interna.

Aqui, como exemplo, uma imagem do dispositivo que construí recentemente. Como presumo que você não use a mesma combinação de sensores que uso, não entrarei em detalhes aqui, verifique o código e faça perguntas se precisar de ajuda.

Etapa 3: teste o dispositivo

Conecte-o à sua rede e verifique em seu software se todos os IDs de ROM estão presentes e os valores que eles retornam como temperatura.

Etapa 4: Apêndice: ATtiny85

Apêndice: ATtiny85
Apêndice: ATtiny85

Dispositivos únicos (limitação de memória) também podem ser feitos em um ATtiny85. Isso requer algumas etapas enquanto programamos o ATtiny85 usando o Arduino Uno como ISP com a ajuda do IDE do Arduino:

  • 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. use Arduino IDE> = 1.8.3
  2. instalar a opção ATtiny para IDE

    1. Arquivo> Preferências> URLs adicionais do gerenciador de placas:
    2. Ferramentas> Placa: ??? > Gerente de Conselhos …
    3. procure por: "minúsculo" e instale
  3. fazer upload do esboço do ISP para um Uno

    Arquivo> Exemplos> ArduinoISP> ArduinoISP

  4. insira ATtiny85 no soquete de programação (força zero) e conecte-o:

    1. Arduino Pin MOSI D11 para ATtiny Pin 5
    2. Arduino Pin MISO D12 para ATtiny Pin 6
    3. Arduino Pin SCK D13 para ATtiny Pin 7
    4. Arduino Pin Reset D10 para ATtiny Pin 1
    5. Arduino Pin GND para ATtiny Pin 4
    6. Arduino Pin VCC para ATtiny Pin 8
    7. (> = Limite de 10uF no pino de RESET do Arduino Uno pode ser necessário)
  5. selecione ATtiny85 (veja a imagem):

    • Placa: "ATtiny25 / 45/85"
    • Temporizador 1 Relógio: "CPU"
    • B. O. D.: "B. O. D. desativado"
    • LTO (1.6.11 + apenas): "Desativado"
    • Chip: "ATtiny85"
    • Relógio: "8 MHz (interno)" (compatível com ATtiny85 e ATtiny84)
    • Relógio: "16 MHz (PLL)" (configuração alternativa apenas para ATtiny85)
    • Porta: ???
  6. selecione Programador:

    Ferramentas> Programador: "Arduino as ISP" (NÃO "ArduinoISP"!)

  7. definir as configurações do fusível (relógio, etc.):

    Ferramentas> Gravar Bootloader

  8. carregue este código (o LED de erro do programador precisa estar desligado, caso contrário, reinicie-o)
  9. Layout do pino ATtinyX5 (ATtiny85):

    1. Pino 1: PB5 (RST)
    2. Pino 2: PB3 (A3) - opcionalmente conectado via 220ohm a 1 <-TX
    3. Pino 3: PB4 (A2) - conectado a DATA de 1 fio
    4. Pino 4: GND - conectado ao GND
    5. Pino 5: PB0 (PWM) - conectado ao sensor I2C SDA
    6. Pino 6: PB1 (PWM) - conectado ao LED com 4,7k ao GND
    7. Pino 7: PB2 (A1) - conectado ao sensor I2C SCL
    8. Pino 8: VCC - conectado a 5V

Trabalhar com ATTiny85 requer um pouco mais de trabalho, pois você precisa obter bibliotecas adicionais para comunicação I2C (adafruit / TinyWireM) e saída serial (TinyDebugSerial). Além disso, como a memória é bastante limitada, você pode querer trabalhar muito com #define, por exemplo, para remover a depuração serial. No exemplo você pode ver tudo isso junto.

Para testar, o primeiro passo é verificar se o LED pisca com a frequência correta, 0,5 Hz. Em seguida, conecte-o ao barramento de 1 fio e verifique o novo dispositivo.

Recomendado: