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.
Para executar, é necessário dispor de todos os itens listados na seção de recursos.
Siga as etapas a seguir:
$ git clone https://github.com/amandassa/sensor-via-uart.git
$ cd /sensor-via-uart/Problema 2/sbc
Tranfira os seguintes arquivos para o Raspberry PI Zero:
Execute os seguintes comandos:
$ make
$ sudo ./pbl2
$ 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.
O sensor DHT11 possui 4 pinos:
- VCC
- DATA
- NULL
- 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).
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:
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:
Essas funções são invocadas no programa C que faz a leitura das solicitações via terminal.
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:
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.
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.
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.
O módulo decodificador de requisições possui as funções de:
Para isso, foram implementados quatro estados:
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:
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.