Skip to content

Latest commit

 

History

93 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de comunicação serial com Raspberry PI, FPGA Cyclone IV e Sensor DHT11

Este projeto consiste na implementação de um protótipo de sistema para medição de temperatura e umidade através do sensor DHT11. O produto implementa comunicação serial entre o SBC Raspberry Pi Zero, de onde partem as solicitações de medição e a FPGA Cyclone IV, que atua como plataforma para ativação e leitura do sensor.

O sistema é composto por duas partes principais:

  • Raspberry Pi Zero: Módulo responsável pela requisição de medição, usando Linguagem C e Assembly na implementação da UART desenvolvida ainda no Problema 1;

  • FPGA: Implementação em Verilog da UART para comunicação serial e dos módulos de ativação e comunicação com o sensor.

Como executar

Para executar, é necessário dispor de todos os itens listados na seção de recursos.

Siga as etapas a seguir:

Realize o download do projeto

$ git clone https://github.com/amandassa/sensor-via-uart.git

Compilando o projeto na Raspberry Pi Zero

$ cd /sensor-via-uart/Problema 2/sbc

Tranfira os seguintes arquivos para o Raspberry PI Zero:


Execute os seguintes comandos:

$ make

$ sudo ./pbl2

Compilando o projeto na FPGA

$ cd /sensor-via-uart/Problema 2/fpga

Crie um projeto no Altera Quartus Prime Lite Edition 21, especificamente para a família EP4CE30F23 e importe os seguintes arquivos:


Assegure-se de que o arquivo "uart0.v" está definido como top-level do projeto para compilação. Com o projeto compilado, configure os seguintes pinos:

Node Name Direction Location
DHT_DATA Output PIN_H17
clk_50mhz Output PIN_T1
in Input PIN_E13
out Output PIN_E13

Carregue o projeto na FPGA com a ferramenta Programmer do Quartus Lite.

Assegure-se de que os componentes estão devidamente conectados para a comunicação serial: O TX (out) de um módulo deve estar ligado ao RX (in) do outro, assim como o ground (GND) dos módulos que devem estar conectados, como mostra o diagrama. Além disso, o sensor também deve estar devidamente conectado com o pino referente a DHT_DATA do módulo verilog.


Imagem 01 - Diagrama ilustrativo da conexão adequada do circuito.

Funcionamento do sensor (DHT11)

Especificação

O sensor DHT11 possui 4 pinos:

  1. VCC
  2. DATA
  3. NULL
  4. GND

O 2º pino, o pino de dados caracteriza-se como entrada e saída, pois, este recebe as requisições e realiza o envio dos dados ao MCU (Micro-computer Unite).


Imagem 02 - Especificação do DHT11. Fonte: Datasheet

Comunicação

Para iniciar a comunicação, o MCU deve enviar ao sensor um sinal em nível de tensão baixo por 80ms, depois em nível alto por 18us. Como resposta, o sensor enviará sinal baixo por 80us seguido de alto por mais 80us. Em seguida, o sensor envia sinal baixo por mais 50us e inicia a transmissão dos 40 bits de mensagem contendo a medição do ambiente e o checksum.

A partir desse momento a resposta do sensor é enviada como um databus contendo sinais em nível lógico alto que podem ser interpretados de acordo com sua duração:

  • 0, se alto por cerca de 28us
  • 1, se alto por cerca de 70us
  • Os bits de mensagem a serem decodificados são enviados pelo sensor alternando entre sinais de nível lógico baixo com duração de 50us. Após o envio, o sensor volta ao modo de espera e aguarda uma nova requisição.


    Imagem 03 - Processo de comunicação. Fonte: Datasheet

    Breve descrição da implementação

    Módulo Raspberry PI Zero

    Neste módulo, a implementação do protocolo UART para Raspberry PI desenvolvida em Assembly foi utilizada como uma biblioteca C para estabelecer a comunicação RS-232 do SBC. As funções utilizadas foram:

  • uartConfig(): Configura a UART do SBC definindo os parâmetros de baud rate, stop bits, ativação e verificação da fila de transmissão.
  • uartPut(): Envia o byte de mensagem pela via serial. Caso receba mais que 8 bits de mensagem, apenas os 8 menos significativos vão compor a mensagem enviada.
  • uartGet(): Recebe o byte de mensagem lendo o registrador DATA_REGISTER.
  • Essas funções são invocadas no programa C que faz a leitura das solicitações via terminal.

    Módulo FPGA

    UART

    Para implementação da UART na FPGA foram desenvolvidos os módulos transmitter e receiver baseados em máquina de estados finitos de Mealy, ambas compostas pelos três estados:

  • START:
  • Estado inicial e de espera, permanece nele até que seja recebido sinal de "enable" que indique início do recebimento de dados (serial, no caso de RX ou paralelo, no caso de TX). Enquanto a entrada de EN não é recebida, este estado mantém o sinal de saída no TX em nível alto, que é o sinal de bus IDLE da comunicação.

  • DATA:
  • Estado de recebimento de dados. No RX, como o recebimento é serial os dados são armazenados em um buffer para serem transmitidos por um barramento. Já em TX os dados são recebidos em paralelo e serializados por um envio sob iteração.

  • STOP:
  • Estado de fim da recepção e transmissão de dados. No RX, os sinais armazenados no buffer são transmitidos pelo barramento de saída e em TX é feita a reinicialização do contador de iteração. Ao fim deste estado ambos os módulos TX e RX voltam para START.

    Decodificador

    O módulo decodificador de requisições possui as funções de:

  • Receber do RX a solicitação de medição
  • Ativar o módulo do sensor e receber sua resposta
  • Ativar e transmitir para TX o sinal de resposta referente à medição solicitada
  • Para isso, foram implementados quatro estados:

  • START: Estado inicial. Permanece nele até que seja recebido sinal de enable. Caso ativado, ativa o módulo do sensor.
  • WAIT_DHT11: Estado de espera da sincronização do sensor. Permanece nele até que a mensagem do sensor seja recebida.
  • DATA: Estado de leitura de dados do sensor. Neste estado, a seção de mensagem do sensor requisitada é direcionada para a saída. Os bits de 0 a 7 da mensagem correspondem ao valor inteiro da medição de umidade. Os bits 16 a 23 correspondem ao inteiro da temperatura. Os últimos 8 bits são checksum.
  • STOP: Neste estado, o módulo do sensor é desativado e TX é ativado, permitindo que os dados sejam enviados para o SBC.
  • Controle do sensor

    Este módulo é responsável por estabelecer a comunicação com o sensor DHT11 e encaminhar sua resposta. O módulo foi implementado como uma máquina mealy de 12 estados. Este processo segue os passos necessários para realizar a leitura seguindo o protocolo de funcionamento do sensor:

  • Enviar o sinal de sincronização e aguardar a resposta da sincronização do sensor
  • Assim que a sincronização é completada, ocorre a decodificação de bits de mensagem de acordo com o período de tempo em que o sinal de resposta permanece em alto.
  • Quando os 40 bits estão prontos no buffer, o barramento com a resposta é liberado para o módulo seguinte.
  • Testes


    Imagem 04 - Montagem do circuito.


    Imagem 05 - 40 bits de resposta do DHT11

    Conclusões

    O produto-solução proposto implementa comunicação serial RS-232 entre um SBC (Raspberry Pi Zero) e a FPGA Cyclone IV. Com os módulos de controle desenvolvidos, é possível realizar requisições de medição de temperatura e umidade por meio do sensor DHT11, que é ativado e responde adequadamente aos comandos do sistema. No entanto, o retorno da leitura vinda da FPGA para o SBC ainda apresenta falhas. Por meio de testes foi possível identificar que a comunicação entre os componentes é interrompida a partir da integração do módulo do sensor. Possíveis ajustes futuros devem incluir a correção do problema entre os módulos de resposta do sensor e o TX da FPGA, para que seja possível receber adequadamente os 8 bits de mensagem solicitados e retorná-los no terminal de interação com o usuário.

    Anexos


    Imagem 06 - Placa Raspberry Pi Zero. Fonte: Embarcados


    Imagem 07 - Kit de Desenvolvimento Altera FPGA Mercurio IV. Fonte: IFSC

    About

    Sistema de monitoramento de ambiente com sensor DHT11 via comunicação serial entre Raspberry Pi Zero e Altera Cyclone IV.

    Topics

    Resources

    Stars

    1 star

    Watchers

    1 watching

    Forks

    Contributors

    Languages