• Labs core
  • Timer

Timer - Prática

Lab 3 - Timer - Prática
Prazo: 11/03
Repositório no classroom
💰 70% nota de lab

Neste laboratório, aplicaremos os conceitos de timer para realizarmos a leitura de um sensor de distância e criarmos um dataloger.

HC-SR04

Para isso, vocês precisarão de:

Lista de Materiais Valor
1x HC-SR04 R$ 14,00

Requisitos

O sistema deve fazer a interface com o módulo de ultrasom, fazer a leitura de forma periódica e enviar os valores pela UART. Além disso, o sistema deve poder ser configurado via um terminal.

HC-SR04

O sensor opera com tensão de 5v, mas nossa placa trabalha com 3v3 por conta disso será necessário:

  1. Ligar o HC-SR04 no 5V (VBUS)
  2. Fazer um divisor resistivo no pino do ECHO
  3. Trigger não precisa fazer nada!
  • Pin X: Echo liga na RP2040!
  • Pin Y: Triger liga na RP2040!

No pullup

O HC-SR04 é um sensor ativo, não devemos ativar o pullup no pino do ECHO!

Leitura

Se o sistema ativado, devem realizar uma leitura a cada 1s (usar alarme do RTC ou alarme do Timer). Vocês devem utilizar o periférico de timer para fazer a leitura do tempo que o Echo fica em alto. Além disso, devem usar um alarme do RTC timer para detectar se por algum motivo o sensor não retornou um sinal.

A imagem a seguir ilustra uma leitura normal do sensor:

E a imagem a seguir ilustra uma falha no sensor, nesse caso o alarme estoura e o sistema fornece uma mensagem de erro.

Terminal

O usuário deve ser capaz de controlar algumas opções do sistema pelo terminal:

  • Start: Inicializa a leitura
  • Stop: Para a leitura

Em modo start o sistema deve produzir um log no terminal com a hora, minuto e segundo que a leitura foi realizada e o valor da distância:

22:10:01 - 100 cm
22:10:02 -  89 cm
22:10:03 -  70 cm
22:10:04 -  50 cm
....
23:03:01 - Falha

Resultado esperado:

Dicas

A seguir algumas dicas de como fazer, você pode ou não seguir:

  1. Comece pela leitura do sensor (imprima o resultado na serial).
    • Para cancelar um alarme use cancel_alarm(alarm);
  2. Implemente a detecção de falha.
    • Para testar basta desconectar qualquer fio do sensor!
    • VOcê
  3. Adicione o RTC (atualize o print).
    • Você deve incluir o RTC no projeto, para isso consulte a página do RTC (configurando cmake)
  4. Implemente a parte de leitura da serial.

  5. Para ler dado da serial/terminal sem que o programa fique travado para sempre esperando um dado.

// Return a character from stdin if
// there is one available within a timeout. 
int caracter = getchar_timeout_us (uint32_t timeout_us)

Info

Não esqueçam de verificar o code quality! Agora ele vai começar a apitar na cabeça de vocês!

Desafios extras

Gostou e quer fazer mais? Que tal:

  • Pense em uma forma de calibrar o sensor.
  • Tente ler dois sensores ao mesmo tempo.
  • Modo alerta, se a distância chegar a um limite gere um som de alarme!
  • Crie um código em python para exibir o valor.