Estação meteorológica no Arduino de A a Z. Parte 2

Para ser continuado. A parte anterior .


Sumário:



Suave Seleção de componentes



A escolha de hardware e software está intimamente interconectada como "frango e ovo". Por onde começar, com hardware, com software? Se você possui um bom hardware, mas não possui drivers, bibliotecas e software (IDE, utilitários para firmware etc.), é inútil e vice-versa.


Portanto, estou falando novamente sobre a escolha entre o nRF24L01 + e o ESP8266 para conectar sensores remotos à unidade central.


O fato é que o ESP8266 não é apenas um adaptador WiFi estúpido, ele possui um microcontrolador com capacidade de energia e memória superior ao Arduino. Por padrão, o ESP8266 possui firmware na forma de um conjunto de comandos AT; nesse caso, o ESP é usado como um modem simples. Mas existem firmware mais avançados, aqui o ESP8266 pode até funcionar como servidor da Web e, é claro, controlar sensores como o Arduino.


No entanto, todos esses firmwares avançados têm desvantagens que não permitiam (no total, com perguntas importantes sobre as quais eu já escrevi) usar o ESP8266 neste projeto:


  • todo o firmware ainda está muito bruto (a partir de 2016)
  • alguns prontos não livres
  • o limite de entrada para depuração e alterações é muito maior que o do Arduino.

Como resultado, não encontrei um firmware avançado adequado e pronto e, até agora, não estou pronto para criar o meu. O chip ESP8266 é um tópico extenso e interessante.


Por sua vez, o firmware AT padrão também tem desvantagens:


  • eles ainda estão úmidos (a partir de 2016)
  • Não consegui encontrar uma biblioteca normal para o Arduino controlar o módulo ESP8266 usando os comandos AT, tive que "fazer uma fazenda coletiva".

Por outro lado, o módulo de rádio nRF24L01 + é simples e direto; existe uma super biblioteca RadioHead para trabalhar com ele e sem problemas de programação. A biblioteca está bem documentada, o que é importante.


O RadioHead permite transferir estruturas de dados (e não apenas números únicos), implementadas neste projeto. Olhando para o futuro, direi que o RadioHead pode transmitir dados de maneira confiável , com repetições, se não chegar pela primeira vez. A biblioteca cuida de todas essas coisas.


Para economizar energia, eu uso a Biblioteca de baixa potência , é simples e contém apenas o que você precisa.


Aqui está um pedaço de código:


//    2.402 GHz ( 2), 2Mbps, 0dBm rfdata.init(); //     ( ,  ) rfdata.sendtoWait((uint8_t*)&dhtData, sizeof(dhtData), SERVER_ADDRESS); //  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);` 

Isso é tudo!


No caso de usar o ESP8266 em um sensor montado em janela, eu seria forçado a criar um ponto de acesso WiFi e, de alguma forma, transferir dados (onde está o firmware, onde está o software?). Ou deixe que o sensor envie dados diretamente para o servidor da Web e ensine a unidade central (que neste caso deixa de desempenhar o papel de "central") a ler os dados de lá para exibi-los no quadro.


Em outras palavras, eu segui o caminho de maior autonomia da Internet WiFi e do servidor PHP + MySQL. Você pode começar a rebitar uma estação meteorológica agora sem ter acesso à Internet e / ou hospedagem para o servidor; nesse caso, você não precisa do ESP8266; basta adicioná-lo mais tarde.


Para ler dados de sensores como DHT, existe uma biblioteca de sensores Adafruit DHT . Trabalhar com isso é simples e direto.


A biblioteca Adafruit BMP085 Unified , que requer a biblioteca de nível abstrato Adafruit Sensor , é adequada para um sensor de pressão.


Todas as bibliotecas têm exemplos de esboços.


Talvez isso seja tudo da parte teórica. “Nossos objetivos são claros, as tarefas são definidas. Por trabalho, camaradas!


Unidade central. Ferro


Bem, finalmente, depois de toda a comoção, seguimos para a assembléia!


Nota Se você nunca coletou antes uma estação meteorológica (tudo bem!), Pode começar sem ter todos os detalhes em mãos. Por exemplo, você pode iniciar sem ter um módulo de rádio e / ou ESP8266. O sensor de pressão barométrica BMP180 também pode estar ausente. Adicione mais tarde. É verdade que, nesse caso, você terá que comentar independentemente no esboço as seções do código responsáveis ​​pela interação com os blocos ausentes, mas isso não é tão difícil. Vou mostrar como.


O principal é que pelo menos algo se reuniu e ganhou, então é mais divertido continuar.


Como já mencionado, a unidade central é baseada no Arduino MEGA. Também precisaremos de:


  • sensor de temperatura e umidade DHT11
  • sensor de pressão barométrica tipo BMP180
  • Módulo WiFi ESP8266
  • Módulo de rádio nRF24 de 2,4 GHz
  • Visor do tipo LCD1604 (4 linhas de 16 caracteres cada), você pode comprar por US $ 5
  • fonte de alimentação com uma saída de 5 a 12 V DC (usei o carregamento de um celular com uma saída USB, o que é conveniente)
  • uma tábua de pão para solda, um ferro de solda, resina, solda ou uma tábua de pão arduino regular sem solda. Pessoalmente, busquei confiabilidade, porque o projeto era claramente de longa duração e não queria sofrer por causa de uma fiação acidentalmente puxada da tábua de pão.

Você pode comprar uma placa de desenvolvimento para desoldering a partir de US $ 1. Pegue um tamanho maior, suficiente para todas as conexões. E novamente: antes de comprar, leia a descrição, não a imagem.


Uma taxa sem solda pode ser comprada a partir de US $ 2. Pegue um tamanho maior, suficiente para todas as conexões.


Os fios de conexão são do tipo que precisamos:


  • Dupont cable "pai-mãe" (também há "pai-pai", "mãe-mãe"). Este é um cabo feito de vários fios com diferentes cores de isolamento e conectores para contatos de pinos do Arduino. Com esses fios, é conveniente conectar as placas e os sensores diretamente ao Arduino sem usar uma placa de ensaio.
  • Fios de conexão convencionais para uma placa de ensaio sem solda para o Arduino.
  • Um monte de fios para solda.

O primeiro passo foi soldar o LCD-1604. Primeiro, soldei os pinos na placa e depois os conectores na placa de ensaio.



Vista de baixo.



Eu soldei um palpite sem fiação preliminar, de modo que nenhum circuito será fornecido aqui. Faça como for mais conveniente, não será pior. Respeite o princípio de que o fio preto é sempre a terra, o vermelho é o "mais" da fonte de alimentação, o restante das cores funcionará. Acabou assim.




Para não esquecer onde estão os conectores, ele "pintou" as seções da placa ao lado com um corretor branco e fez as inscrições correspondentes. Feio? Mas prático e rápido, é um protótipo!



Pinagem e conexão


Ecrã 16 × 4 LCD1604


Para obter mais informações sobre o display e como trabalhar com ele, pesquise no Google “Trabalhando com LCDs de caracteres baseados no HD44780”. Observe que você precisa considerar cuidadosamente a polaridade da fonte de alimentação no indicador LCD e que a tensão da fonte de alimentação está na faixa de 4,5 a 5,5 V. A atitude desatenta em relação a isso pode levar à falha do indicador!


Pino LCD 1604Arduino MEGAArduino unoDescrição do produto
VssGNDGNDGND
Vdd5 V5 V4.7 - 5.3V
RS224Um nível alto significa que o sinal nas saídas DB0-DB7 são dados, um nível baixo significa um comando
RwGNDGNDDetermina a direção dos dados (leitura / gravação). Como a operação de leitura de dados de um indicador geralmente não é reclamada, é possível definir um nível baixo constantemente nessa entrada
E235Um pulso com duração de pelo menos 500 ms neste pino determina o sinal para leitura / gravação de dados dos pinos DB0-DB7, RS e WR
DB4248Dados recebidos / enviados
DB5259
DB62610
DB72711
LED A +Resistor de + 5V ou 220 Ohm → + 5VLED-A
LED B-GND
V0Aparador GND ou 10kΩ

A inicialização do software terá a seguinte aparência:


 // Arduino MEGA LiquidCrystal lcd(22, 23, 24, 25, 26, 27); // Arduino UNO LiquidCrystal lcd(4, 5, 8, 9, 10, 11); 

Temperatura, umidade DHT11


Conectando um sensor de temperatura e umidade DHT11 (SainSmart). Coloque o sensor voltado para cima, os fios serão descritos da esquerda para a direita.


DHT11Arduino mega
DADOSPino digital 2 (PWM) (consulte DHTPIN abaixo)
Vcc3,3-5 V (5 V recomendados; melhor potência externa)
GNDGND

Inicialização de software


 #define DHTPIN 2 //   Digital pin 2 (PWM) #define DHTTYPE DHT11 // . DHT.h //  DHT dht(DHTPIN, DHTTYPE); 

Barômetro BMP180


Conexão do sensor de pressão atmosférica BMP180 (barômetro) + temperatura via interface I2C / TWI.


BMP180Arduino mega
Vccnão conectado
GNDGND
SCL21 (SCL)
SDA20 (SDA)
3.3.3,3 V

Para UNO: A4 (SDA), A5 (SCL).


 //  Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); // sensorID 

nRF24L01 +


Breves características:


  • Faixa de freqüência 2.401 - 2.4835 GHz
  • 126 canais. O canal zero começa em 2400 MHz e depois com uma etapa de 1 MHz, por exemplo, o canal 70 está localizado em 2470 MHz, respectivamente. Ao definir a velocidade de transmissão de 2 Mbps, a largura do canal é 2 MHz
  • Fonte de alimentação 1,9 - 3,6 V (3,3 V recomendado)

Aqui está a pinagem do módulo.


Pinagem nRF2401L +


Alguns aconselham a soldagem imediata de um capacitor de 100nF de cerâmica (1µF, 10µF possível) nos terminais de energia de RF para evitar ruídos elétricos.


Pinagem nRF24L01 + (observe a parte superior da placa onde está o chip, os pinos devem estar na parte inferior):


pino 2 3.3Vpino 4 CSNpino 6 MOSIpino 8 IRQ
pino 1 GNDpino 3 CEpino 5 SCKpino 7 MISO

Conexão para estação meteorológica:


Arduino meganRF24L01 +
3,3 VPino 2 do VCC (melhor potência externa)
pino D8Pino CE 3 (ativação de chip)
Pino SS D53Pino 4 da CSN (seleção de chip)
Pino SCK D52Pino SCK 5 (entrada do relógio SPI)
Pino MOSI D51Pino SDI 6 (entrada de dados SPI)
Pino MISO D50Pino SDO 7 (saída de dados SPI)
Pino IRQ 8 (saída de interrupção) não conectado
GNDPino GND 1 (retificado)

A programação do módulo de rádio será descrita em detalhes na parte do software.


ESP8266


Pinagem ESP8266 (veja a parte superior da placa onde os chips, pinos devem estar na parte inferior):


GNDGPIO2GPIO0Rx
TXCH_PDRESETVcc

Conectando o ESP8266 para uma estação meteorológica:


ESP8266Arduino mega
TX10 pinos (SoftwareSerial RX)
Rx11 pinos (SoftwareSerial TX)
Vcc3,3 V
GNDGND
CH_PDVia resistor de 10K a 3.3V Arduino
GPI0Opcional Via resistor de 10K a 3.3V Arduino
GPI2Opcional Via resistor de 10K a 3.3V Arduino

KDPV


Montagem da unidade central. Cortei a “placa-mãe” de uma caixa de papelão debaixo dos meus sapatos e aparafusei o resto com 3 parafusos.


Montagem da unidade central


Como você pode ver neste local, toda a comida é fornecida pelos pinos do Arduino, ou seja, nada vai diretamente para a fonte de alimentação e, até agora, há energia suficiente.


Como tudo. Eu não esqueci nada.


Solda, conecte. Na próxima parte, será apresentado um esboço de trabalho para a unidade central e nossa estação meteorológica já mostrará algo.


Source: https://habr.com/ru/post/pt425927/


All Articles