Índice:

Temporizadores do Arduino: 8 projetos: 10 etapas (com imagens)
Temporizadores do Arduino: 8 projetos: 10 etapas (com imagens)

Vídeo: Temporizadores do Arduino: 8 projetos: 10 etapas (com imagens)

Vídeo: Temporizadores do Arduino: 8 projetos: 10 etapas (com imagens)
Vídeo: ARDUÍNO: PROJETO LIGA E DESLIGA COM TEMPORIZAÇÃO USANDO MILLIS 2024, Dezembro
Anonim
Arduino Timers: 8 projetos
Arduino Timers: 8 projetos

O Arduino Uno ou Nano pode gerar sinais digitais precisos em seis pinos dedicados usando os três temporizadores integrados. Eles requerem apenas alguns comandos para configurar e não usam nenhum ciclo de CPU para funcionar!

Usar os temporizadores pode ser intimidante se você começar pela folha de dados completa do ATMEGA328, que tem 90 páginas dedicadas à sua descrição! Vários comandos integrados do Arduino já usam os temporizadores, por exemplo millis (), delay (), tone (), AnalogWrite () e a biblioteca servo. Mas para usar todo o seu poder, você precisará configurá-los por meio dos registros. Eu compartilho aqui algumas macros e funções para tornar isso mais fácil e transparente.

Após uma breve visão geral dos temporizadores, siga 8 projetos interessantes que dependem da geração de sinal com os temporizadores.

Etapa 1: Componentes necessários

Componentes Requeridos
Componentes Requeridos

Para fazer todos os 8 projetos, você precisará:

  • Um Arduino Uno ou compatível
  • Um protótipo de escudo com mini protoboard
  • 6 cabos de jumper da placa de ensaio
  • 6 jumpers de placa de ensaio curtos (faça você mesmo com fio de conexão de núcleo sólido de 10 cm)
  • 2 pistas de crocodilo
  • 1 LED branco de 5 mm
  • um resistor de 220 Ohm
  • um resistor de 10kOhm
  • um potenciômetro de 10kOhm
  • 2 capacitores cerâmicos de 1muF
  • 1 capacitor eletrolítico de 10muF
  • 2 diodos, 1n4148 ou semelhante
  • 2 micro servo motores SG90
  • 1 alto-falante 8 ohm
  • 20 m de fio esmaltado fino (0,13 mm)

Etapa 2: Visão geral dos temporizadores Arduino para geração de sinal

Timer0 e timer2 são temporizadores de 8 bits, o que significa que podem contar de 0 a 255 no máximo. O temporizador1 é um temporizador de 16 bits, portanto pode contar até 65535. Cada temporizador tem dois pinos de saída associados: 6 e 5 para o temporizador0, 9 e 10 para o temporizador1, 11 e 3 para o temporizador2. O cronômetro é incrementado a cada ciclo de clock do Arduino ou a uma taxa que é reduzida por um fator de pré-escala, que é 8, 64, 256 ou 1024 (32 e 128 também são permitidos para o cronômetro2). Os temporizadores contam de 0 a ‘TOP’ e, em seguida, novamente (PWM rápido) ou para baixo (PWM de fase correta). O valor de 'TOP' determina, portanto, a frequência. Os pinos de saída podem definir, redefinir ou inverter o valor do Registrador de comparação de saída, de forma que determinem o ciclo de trabalho. Apenas o temporizador1 tem a capacidade de definir independentemente a frequência e os ciclos de trabalho para ambos os pinos de saída.

Etapa 3: LED piscando

Image
Image
Piscar LED
Piscar LED
Piscar LED
Piscar LED

A frequência mais baixa que pode ser alcançada com os temporizadores de 8 bits é 16 MHz / (511 * 1024) = 30, 6 Hz. Então, para fazer um LED piscar com 1 Hz, precisamos do timer1, que pode atingir frequências 256 vezes menores, 0,12 Hz.

Conecte um LED com seu ânodo (perna longa) ao pino 9 e conecte seu cátodo com um resistor de 220 Ohm ao aterramento. Faça upload do código. O LED piscará exatamente em 1 Hz com um ciclo de trabalho de 50%. A função loop () está vazia: o cronômetro é inicializado em setup () e não precisa de mais atenção.

Etapa 4: Dimmer LED

Image
Image
LED Dimmer
LED Dimmer
LED Dimmer
LED Dimmer

A modulação por largura de pulso é uma forma eficaz de regular a intensidade de um LED. Com um driver adequado, é também o método preferido para regular a velocidade dos motores elétricos. Como o sinal está 100% ligado ou 100% desligado, nenhuma energia é desperdiçada em uma resistência em série. Basicamente, é como piscar o LED mais rápido do que os olhos podem acompanhar. 50 Hz é, em princípio, suficiente, mas ainda pode parecer piscar um pouco e quando o LED ou os olhos se movem, um irritante "rastro" não contínuo pode resultar. Usando uma pré-escala de 64 com um temporizador de 8 bits, obtemos 16 MHz / (64 * 256) = 977 Hz, o que se adequa ao propósito. Escolhemos o timer2, para que o timer1 permaneça disponível para outras funções, e não interferimos com a função time () do Arduino, que usa o timer0.

Neste exemplo, o ciclo de trabalho e, portanto, a intensidade, são regulados por um potenciômetro. Um segundo LED pode ser regulado independentemente com o mesmo temporizador no pino 3.

Etapa 5: Conversor digital para analógico (DAC)

Image
Image
Conversor digital para analógico (DAC)
Conversor digital para analógico (DAC)
Conversor digital para analógico (DAC)
Conversor digital para analógico (DAC)

O Arduino não possui uma saída analógica verdadeira. Alguns módulos usam uma tensão analógica para regular um parâmetro (contraste do display, limite de detecção, etc.). Com apenas um capacitor e resistor, o timer1 pode ser usado para criar uma tensão analógica com resolução de 5mV ou melhor.

Um filtro passa-baixa pode "calcular a média" do sinal PWM para uma tensão analógica. Um capacitor é conectado por meio de um resistor a um pino PWM. As características são determinadas pela frequência PWM e pelos valores do resistor e do capacitor. A resolução dos temporizadores de 8 bits seria 5V / 256 = 20mV, então optamos pelo Timer1 para obter uma resolução de 10 bits. O circuito RC é um filtro passa-baixa de primeira ordem e terá alguma ondulação. A escala de tempo do circuito RC deve ser muito maior do que o período do sinal PWM para reduzir a ondulação. O período que obtemos para uma precisão de 10 bits é 1024 / 16MHz = 64mus. Se usarmos um capacitor de 1muF e um resistor de 10kOhm, RC = 10ms. A ondulação pico a pico é de no máximo 5V * 0,5 * T / (RC) = 16mV, que é considerado suficiente aqui.

Observe que este DAC tem uma impedância de saída muito alta (10kOhm), de modo que a tensão cairá significativamente se consumir corrente. Para evitar isso, ele pode ser armazenado em buffer com um opamp, ou outra combinação de R e C pode ser escolhida, por exemplo 1kOhm com 10muF.

No exemplo, a saída DAC é direcionada com um potenciômetro. Um segundo canal DAC independente pode ser executado com o temporizador1 no pino 10.

Etapa 6: Metrônomo

Image
Image
Metrônomo
Metrônomo
Metrônomo
Metrônomo

Um metrônomo ajuda a controlar o ritmo ao tocar música. Para pulsos muito curtos, a saída do temporizador Arduino pode ser alimentada diretamente para um alto-falante, que produzirá cliques claramente audíveis. Com um potenciômetro, a frequência de batimento pode ser regulada de 40 a 208 batimentos por minuto, em 39 passos. Timer1 é necessário para a precisão exigida. O valor de ‘TOP’, que determina a frequência, é modificado dentro da função loop (), e isso requer atenção! Você vê aqui que o modo WGM difere dos outros exemplos que têm frequência fixa: este modo, com TOP definido pelo registrador OCR1A, tem buffer duplo e protege contra a falta de TOP e obter um longo glitch. No entanto, isso significa que podemos usar apenas 1 pino de saída.

Etapa 7: espectro de som

Image
Image
Espectro de Som
Espectro de Som
Espectro de Som
Espectro de Som

Os humanos podem ouvir mais de 3 ordens de magnitude de frequências de som, de 20 Hz a 20 kHz. Este exemplo gera o espectro completo com um potenciômetro. Um capacitor de 10muF é colocado entre o alto-falante e o Arduino para bloquear a corrente CC. Timer1 produz uma onda quadrada. O modo de geração de forma de onda aqui é PWM com correção de fase. Nesse modo, o contador inicia a contagem regressiva ao atingir o topo, o que resulta em pulsos que têm sua média fixa, mesmo quando o ciclo de trabalho varia. No entanto, também resulta em um período que é (quase) duplo, e acontece que com a pré-escala 8, o temporizador1 cobre todo o espectro audível, sem a necessidade de alterar a pré-escala. Também aqui, uma vez que o valor de TOP está sendo alterado em movimento, usar OCR1A como top reduz as falhas.

Etapa 8: Servo motores

Image
Image
Servo motores
Servo motores
Servo motores
Servo motores

Existem servo-bibliotecas poderosas, mas se você tiver apenas dois servos para dirigir, você também pode fazer isso diretamente com o timer1, e assim reduzir a CPU, o uso de memória e evitar interrupções. O popular servo SG90 recebe um sinal de 50 Hz e o comprimento do pulso codifica a posição. Ideal para timer1. A frequência é fixa, então ambas as saídas no pino 9 e no pino 10 podem ser usadas para dirigir os servos independentemente.

Etapa 9: Duplicador de Tensão e Inversor

Duplicador de tensão e inversor
Duplicador de tensão e inversor
Duplicador de tensão e inversor
Duplicador de tensão e inversor
Duplicador de tensão e inversor
Duplicador de tensão e inversor

Às vezes, seu projeto requer uma tensão superior a 5 V ou uma tensão negativa. Pode ser para executar um MOSFET, para executar um elemento piezoelétrico, para alimentar um amplificador operacional ou redefinir um EEPROM. Se o consumo de corrente for pequeno o suficiente, até ~ 5mA, uma bomba de carga pode ser a solução mais simples: apenas 2 diodos e dois capacitores conectados a um sinal pulsado de um temporizador permitem dobrar o arduino 5V para 10V. Na prática, existem 2 quedas de diodo, então será mais como 8,6 V na prática para o dobrador, ou -3,6 V para o inversor.

A frequência da onda quadrada deve ser suficiente para bombear carga suficiente através dos diodos. Um capacitor de 1muF move 5muC de mudança quando a tensão muda entre 0 e 5V, então para uma corrente de 10mA, a frequência deve ser de pelo menos 2kHz. Na prática, uma frequência mais alta é melhor, pois reduz a ondulação. Com o timer2 contando de 0 a 255 sem pré-escala, a frequência é de 62,5 kHz, o que funciona bem.

Etapa 10: Transferência de energia sem fio

Image
Image
Transferência de energia sem fio
Transferência de energia sem fio
Transferência de energia sem fio
Transferência de energia sem fio

Não é incomum carregar um relógio inteligente sem cabos, mas o mesmo pode facilmente fazer parte de um projeto Arduino. Uma bobina com sinal de alta frequência pode transferir energia para outra bobina próxima por indução, sem contato elétrico.

Primeiro, prepare as bobinas. Usei um rolo de papel de 8,5cm de diâmetro e fio esmaltado de 0,13mm de diâmetro para fazer 2 bobinas: a primária com 20 voltas, a secundária com 50 voltas. A auto-indutância deste tipo de bobina com enrolamentos N e um raio R é ~ 5muH * N ^ 2 * R. Então, para N = 20 e R = 0,0425 dá L = 85muH, o que foi confirmado com o testador de componentes. Produzimos um sinal com uma frequência de 516kHz, resultando em uma impedância de 2pi * f * L = 275Ohm. Isso é alto o suficiente para que o Arduino não entre em sobrecorrente.

Para operar a bobina de forma mais eficaz, gostaríamos de usar uma verdadeira fonte de CA. Existe um truque que pode ser feito: as duas saídas de um temporizador podem funcionar em fase oposta, invertendo uma das saídas. Para torná-lo ainda mais semelhante a uma onda senoidal, usamos o PWM com correção de fase. Desta forma, entre os pinos 9 e 10, a tensão alterna entre ambos 0V, pino 9 + 5V, ambos 0V, pino 10 + 5V. O efeito é mostrado na imagem a partir de um rastreamento de escopo (com uma pré-escala de 1024, este escopo de brinquedo não tem muita largura de banda).

Conecte a bobina primária aos pinos 9 e 10. Conecte um LED à bobina secundária. Quando a bobina secundária é aproximada da primária, o LED acende fortemente.

Recomendado: