ÍNDICE DE CONTEÚDO
- Franzininho WiFi: Display 7 Segmentos TM1637
- Franzininho WiFi: Primeiros passos na Arduino IDE
- Franzininho WiFi: Explorando as GPIOs com Arduino
- Franzininho WiFi: Leitura de entradas analógicas com Arduino
- Franzininho WiFi: PWM (Pulse Width Modulation) com Arduino
- Franzininho WiFi: Comunicação Serial (UART) com Arduino
- Franzininho WiFi: Servo Motor com Arduino
- Franzininho WiFi: Web Server
- Franzininho WiFi: Display OLED
- Franzininho WiFi: Sensor de temperatura e umidade DHT22
- Franzininho WiFi: Sensor de temperatura DS18B20
- Franzininho WiFi: Display LCD 16×2 com comunicação I2C
O conversor analógico para digital (ADC) é um periférico usado para converter um sinal externo analógico em um formato digital, que pode ser lido e interpretado pelo microcontrolador. O processo de aquisição desse sinal envolve técnicas de amostragem e aproximações sucessivas, resultando em um valor binário quantizado na saída do conversor.
A Franzininho WiFi possui 17 canais ADC conectados a 2 ADCs integrados que podem ser configurados para a resolução e atenuação desejadas para realizar a leitura de cada canal. O conversor AD é um periférico amplamente utilizado em projetos que precisam ler sinais analógicos, como leitura de pressão, luz, vibração, força e outros.
Nesse artigo veremos como fazer leitura de entradas analógicas na Franzininho WiFi com as funções Arduino.
API Analog do Arduino
Nesta sessão apresentaremos as funções usadas para configurar o ADC e adquirir as leituras analógicas.
Embarcados Experience 2024: Evento Presencial
Participe do Embarcados Experience 2024 em São Paulo. Conhecimento técnico, palestras, workshops e oportunidade de networking com profissionais experientes.
analogRead
Função utilizada para capturar as leituras analógicas dada pelo pino selecionado
1 |
uint16_t analogRead(uint8_t pin); |
- pin : pino selecionado
Retorna os valores analógicos
analogReadMilivolts
Função utilizada para captura as leituras analogicas e transformar em milivolts
1 |
uint32_t analogReadMilivolts(uint8_t pin); |
- pin : seleciona o pino físico
Retorna os valores de tensão em mV (0 – 3300)
analogResolution
Configura a resolução das analógicas. Por padrão a resolução utilizada é 12 bits (0 – 4096). O intervalo de bits é entre 9 a 12 bits, lembrando quanto menor a resolução, menor será a precisão das leituras analógicas
1 |
void analogReadResolution(uint8_t bits); |
- bits : define o pino físico
analogSetAttenuation
Configura a atenuação para todo o canal ADC. Para cada valor de atenuação há uma faixa específica de tensão de entrada.
1 |
void analogSetAttenuation(adc_attenuation_t attenuation); |
- attenuation : seleciona o valor da atenuação
Atenuação | Faixa de tensão |
ADC_ATTEN_DB_0 | 0 mV ~ 750 mV |
ADC_ATTEN_DB_2_5 | 0 mV ~ 1050 mV |
ADC_ATTEN_DB_6 | 0 mV ~ 1300 mV |
ADC_ATTEN_DB_11 | 0 mV ~ 2500 mV |
analogSetPinAttenuation
Configura a atenuação para um canal em específico.
1 |
void analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation) |
- pin : seleciona o pino específico para receber as configurações
- attenuation : seleciona o valor da atenuação
Materiais necessários
Os materiais utilizados nesse artigo foram:
- Placa Franzininho WiFi
- Protoboard
- Potenciômetro 10 K Ω
- Resistor 150 Ω
- LED
- Jumpers
- Arduino IDE
Circuito exemplo para leitura de entradas analógicas com a Franzininho WiFi
Na imagem abaixo apresentamos o circuito proposto neste artigo. Vamos utilizar um potenciômetro conectado ao pino GPIO 4 e um LED na GPIO 2.
Código
No projeto proposto utilizamos o potenciômetro para interagir com o LED, para isso foram feitas leituras analógicas em loop e à medida que rotaciona o eixo do potenciômetro os valores ADC mudam linearmente. Quando o valor ADC ultrapassar o limiar o LED é acionado ou caso contrário desliga.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/* Autor: Equipe Embarcados */ #define POTENCIOMETRO 4 #define LED 2 #define LIMIAR 3000 // Leitura ADC void setup() { /*Configura o LED com saída digital*/ pinMode(LED, OUTPUT); /*Configura o canal ADC*/ analogReadResolution(12); } void loop() { /* Se a leitura analógica ultrapassar o limiar ... aciona o LED */ if(analogRead(POTENCIOMETRO)> LIMIAR) { digitalWrite(LED, HIGH); } /*Caso contrário desliga o LED*/ else { digitalWrite(LED, LOW); } } |
Simule esse projeto no Wokwi: https://wokwi.com/projects/362363400146330625
Explicação do Código
Nessa sessão explicaremos cada trecho do código.
Mapeamento dos pinos que serão utilizados e o valor limiar para acionar o LED:
1 2 3 |
#define POTENCIOMETRO 4 #define LED 2 #define LIMIAR 3000 // Leitura ADC |
No void setup() , configura o LED como saída digital e a resolução do canal ADC para uma resolução de 12 bits (0 – 4095):
1 2 3 4 5 6 7 8 9 10 |
void setup() { /*Configura o LED com saída digital*/ pinMode(LED, OUTPUT); /*Configura o canal ADC*/ analogReadResolution(12); } |
No void loop() , define a lógica de acionamento do LED dado o valor da leitura ADC.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void loop() { /* Se a leitura analógica ultrapassar o limiar ... aciona o LED */ if(analogRead(POTENCIOMETRO)> LIMIAR) { digitalWrite(LED, HIGH); } /*Caso contrário desliga o LED*/ else { digitalWrite(LED, LOW); } } |
Conclusão
Neste artigo, foi abordado o conversor A/D da Franzininho WiFi e a como podemos ler valores analógicos através dele, após a conversão em valores digitais. O projeto proposto é uma aplicação simples para exemplificar como controlar uma saída com base nas leituras de uma entrada. Além disso, foram apresentadas as funções de configuração para ajustar os canais individualmente ou em conjunto, conforme a necessidade de cada projeto.
Para assegurar a compreensão do tema, recomendamos fortemente que faça a leitura de outros sensores analógicos usando o ADC.
Compre sua Franzininho WiFi (com frete gratis) clicando neste link.
Saiba mais
Franzininho WiFi – Entrada Analógica ESP-IDF
Franzininho WiFi: Pinos de Toque Capacitivo com CircuitPython