Raspberry Pi Pico: Timer One Shot com MicroPython

Este post faz parte da série Raspberry Pi Pico com MicroPython

Introdução

O timer “one-shot” (em tradução livre, “temporizador de único disparo”) é um recurso usado para executar uma ação após um certo período de tempo ter decorrido e, em seguida, parar. Portanto, ao contrário de um timer periódico, que se repete em intervalos regulares, o timer “one-shot” é acionado uma única vez.

Ao utilizar o MicroPython no Raspberry Pi Pico, é possível utilizar o timer “one-shot” através da biblioteca “machine” que vem com o MicroPython. Neste artigo, veremos algumas aplicações desse timer.

Ligar um LED com Timer one-shot

Materiais necessários

Para esse projeto vamos precisar de:

  • 1 x Raspberry Pi Pico
  • 1 x Protoboard
  • 1 x Led
  • 1 x Resistor de 1KΩ 
  • 1 x botão de pressão (push-button)
  • 1 x Cabo micro USB
  • Jumper

Circuito

E a montagem será a mesma explicada no artigo GPIO | Entradas Digitais, cuja configuração pode ser observada na Figura abaixo.

timer One Shot
Figura 1 – Montagem do projeto no Fritzing

timer One Shot
Figura 2 – Montagem do projeto com componentes físicos.

Programa para Ligar LED com timer one-shot

Como nos demais programas feitos, vamos começar com from machine import Pin para acessar os pinos da placa. Além disso, vamos adicionar a biblioteca “Timer”.

A definição do timer foi feita através da variável “temporizador” e a sua configuração foi definindo o período como 3000 ms, o modo do timer como “one-shot” e chamando a função de callback, com o nome “desliga”.

A função callback é chamada quando um evento específico ocorre ou quando uma determinada condição é atendida. No programa que estamos construindo, a função callback “desliga” é chamada ao fim do período de 3 segundos. No corpo dessa função, há uma lógica que define o estado do pino GPIO15 como desligado para apagar o LED.

from machine import Pin, Timer

led_red= Pin(15,Pin.OUT) #definindo o pino 15 como saída
temporizador = Timer() 

def desliga (timer): #definindo função callback
    global led_red
    led_red.off()
    print("led desligado")

print("Iniciando o timer")
temporizador.init(period = 3000, mode = Timer.ONE_SHOT, callback = desliga)
led_red.on()

Para ter certeza da ordem e execução da lógica escrita, foram colocados “prints” em pontos estratégicos do código. Assim, sabemos se a operação foi realizada conforme esperado.

Nesse caso, diferente do timer periódico, o LED irá desligar após o tempo definido e será somente aceso outra vez se a função `temporizador.init` for chamada novamente.

Se você não possui os componentes físicos para o projeto, é possível testar o programa utilizando o simulador Wokwi. Abaixo temos a simulação virtual:

Programa para ligar LED com timer one-shot e botão

Nesta segunda versão do programa, utilizamos as mesmas configurações do LED, porém com um novo comportamento. Criaremos um loop principal que verificará constantemente o estado do botão. Se o botão for pressionado (valor lógico baixo), o temporizador é inicializado com um período de 5000 milissegundos (5 segundos) no modo “one-shot”, chamando a função de callback para desligar o LED quando o temporizador encerrar a contagem.

Em seguida, entramos em um segundo loop while que aguarda até que o botão seja liberado (valor lógico alto). Durante cada iteração desse loop, o programa pausa por 100 milissegundos usando a função time.sleep_ms(100) antes de verificar novamente o estado do botão. Isso faz com que o programa permita que o LED seja ligado novamente somente quando o botão for solto e pressionado novamente.

from machine import Pin, Timer
import time

led_red= Pin(15,Pin.OUT) #definindo o pino 15 como saída
botao= Pin(16,Pin.IN,Pin.PULL_UP) #definindo o pino 16 como entrada
temporizador = Timer() 

def desliga (timer): #definindo função callback
    global led_red
    led_red.off()
    print("led desligado")

while True:
    if not botao.value():
        temporizador.init(period = 5000, mode = Timer.ONE_SHOT, callback = desliga)
        led_red.on()
        print("led ligado")
        while not botao.value():
            time.sleep_ms(100)

Se você não possui os componentes físicos para o projeto, é possível testar o programa utilizando o simulador Wokwi. Abaixo temos a simulação virtual:

Conclusão

Nesse artigo exploramos a criação de timers do tipo one-shot no Raspberry Pi Pico. Os timers one-shot são ferramentas poderosas para adicionar funcionalidades temporizadas, garantindo maior controle sobre eventos e permitindo a criação de aplicações mais eficientes aos projetos com o Raspberry Pi Pico.

Raspberry Pi Pico com MicroPython

GPIO | Entendendo as Entradas Digitais da Raspberry Pi Pico Projeto | Controlador de Semáforo com Micropython
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Software » Raspberry Pi Pico: Timer One Shot com MicroPython

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: