Franzininho C0: Controlando o Duty Cycle de um PWM com um Potenciômetro Usando Arduino

Este post faz parte da série Franzininho C0 com Arduino

Introdução

Neste artigo, vamos explorar o Plotter Serial do Arduino, uma ferramenta gráfica do Arduino IDE que permite visualizar os dados da serial em tempo real na forma de gráficos. É uma ferramenta útil para analisar e depurar dados de sensores, sinais e outras informações importantes do seu projeto.

No tutorial veremos como controlar o duty cycle de um sinal PWM utilizando um potenciômetro com a Franzininho C0. As mudanças no sinal serão visualizadas no Plotter Serial.

Materiais necessários 

  • Franzininho C0
  • Potenciômetro
  • Protoboard
  • Jumpers

Pinout da Franzininho C0

Para definir os pinos utilizados, precisamos consultar o pinout da placa:

Acesse a documentação completa em: https://docs.franzininho.com.br/docs/franzininho-c0/franzininho-c0-board

Circuito

Para começar, conecte o potenciômetro à placa. Insira o potenciômetro na protoboard e, em seguida, faça as seguintes conexões:

  • Terminal da esquerda do potenciômetro ao pino 3,3V
  • Terminal central do potenciômetro ao pino A4
  • Terminal da direita do potenciômetro ao pino GND

Conforme mostrado na imagem abaixo:

Figura 1 – Montagem do projeto na protoboard.

Figura 2 – Montagem do projeto no Fritzing.

Código

Para utilizar o Plotter Serial do Arduino para visualizar a mudança no duty cycle do sinal PWM usando a Franzininho C0, utilizaremos o código a seguir:

const int potPin = A4; // Pino analógico do potenciômetro
const int pwmPin = A0;  // Pino PWM do sinal PWM

void setup() {
  Serial.setRx(PA_10_R);
  Serial.setTx(PA_9_R);
  Serial.begin(9600); // Inicializa a comunicação serial para depuração
  pinMode(potPin, INPUT); // Define o pino potenciômetro como saída
  pinMode(pwmPin, OUTPUT); // Define o pino PWM como saída
}

void loop() {
  int potValue = analogRead(potPin); // Lê o valor do potenciômetro (0-1023)
  int pwmValue = map(potValue, 0, 1023, 0, 255); // Mapeia o valor do potenciômetro para o intervalo PWM (0-255)

  analogWrite(pwmPin, pwmValue); // Ajusta o duty cycle do sinal PWM

  // Simula a onda PWM no Plotter Serial
  for (int i = 0; i < 255; i++) {
    if (i < pwmValue) {
      Serial.println(255); // Alto nível do PWM
    } else {
      Serial.println(0); // Baixo nível do PWM
    }
  }

  delay(100); // Pequeno atraso para suavizar as leituras

Obs.1: Antes da IDE iniciar o carregamento do programa, a Franzininho C0 deve executar o bootloader, caso contrário ocorrerá um erro.

Obs.2: Recomendamos o uso da IDE 1.8.x do Arduino para essa aplicação.

Para visualizar o Plotter Serial vá em Ferramentas -> Plotter Serial, como mostra a figura abaixo.

Figura 3 – Caminho do Plotter Serial.

Explicação do Código

Antes do setup(), vamos criar variáveis para guardar o pino do potenciômetro e o pino responsável por gerar o sinal PWM, ambos precisam ser pinos analógicos.

const int potPin = A4; // Pino analógico do potenciômetro
const int pwmPin = A0;  // Pino PWM do sinal PWM

No setup(), precisamos definir os pinos UART da placa para depois iniciar comunicação serial, esse passo é necessário ao utilizar a comunicação serial com a Franzininho C0. A velocidade de comunicação é definida como 9600, as velocidades mais baixas são necessárias para visualizar bem o sinal no Plotter Serial. Por último, definimos o pino PWM como saída e o pino do potenciômetro como entrada.

void setup() {
  Serial.setRx(PA_10_R);
  Serial.setTx(PA_9_R);
  Serial.begin(9600); // Inicializa a comunicação serial para depuração
  pinMode(potPin, INPUT); // Define o pino potenciômetro como saída
  pinMode(pwmPin, OUTPUT); // Define o pino PWM como saída
}

No loop(), iniciamos lendo o valor do potenciômetro com ‘analogRead()’, que retorna um valor entre 0 e 1023. Para ajustar esse intervalo de valores ao intervalo do PWM (0 a 255), utilizamos a função ‘map()’. Após isso, o valor do potenciômetro, mapeado de 0 a 255, será escrito no pino PWM, alterando assim o duty cycle do sinal.

void loop() {
  int potValue = analogRead(potPin); // Lê o valor do potenciômetro (0-1023)
  int pwmValue = map(potValue, 0, 1023, 0, 255); // Mapeia o valor do potenciômetro para o intervalo PWM (0-255)

  analogWrite(pwmPin, pwmValue); // Ajusta o duty cycle do sinal PWM
...}  

Para visualizar a onda do sinal PWM no Plotter Serial usamos uma estrutura ‘for’. Ela é configurada para iterar de 0 a 254, o que corresponde ao valor máximo do PWM que estamos controlando. 

O objetivo é ajustar o duty cycle do sinal PWM com base no valor lido pelo potenciômetro. Então se por exemplo, o valor lido pelo potenciômetro for 100, o sinal PWM ficará em nível alto durante 100 unidades de tempo e depois retornará a zero, repetindo esse ciclo continuamente.

Assim, dentro do ‘for’, uma condição ‘if (i < pwmValue)’ verifica se o valor atual ‘i’ é menor que o duty cycle do sinal PWM. Se ‘i’ é menor que o valor do PWM, o código imprime 255 no Plotter Serial, indicando um nível alto do sinal PWM. Caso contrário, ou seja, quando ‘i’ é maior que o valor do PWM, o código imprime 0, representando o nível baixo do sinal PWM. 

Por fim, temos um pequeno atraso para melhorar as leituras.

{ ...// Simula a onda PWM no Plotter Serial
  for (int i = 0; i < 255; i++) {
    if (i < pwmValue) {
      Serial.println(255); // Alto nível do PWM
    } else {
      Serial.println(0); // Baixo nível do PWM
    }
  }

  delay(100); // Pequeno atraso para suavizar as leituras
}

Ao executar o código, conforme mostrado no vídeo, podemos observar que o Plotter Serial exibe as mudanças no tamanho do sinal conforme o valor do potenciômetro é alterado. Isso é feito em tempo real.

Conclusão

Neste artigo, exploramos como visualizar dados lidos por um dos pinos da Franzininho C0 utilizando a ferramenta gráfica do Arduino. Este projeto abre possibilidades para expandir o uso dessa ferramenta na IDE, permitindo análises visuais em tempo real de sinais analógicos, como leituras de sensores ou sinais PWM controlados por dispositivos como potenciômetros, como fizemos aqui.

Desafio

Neste desafio, você irá explorar o uso do Serial Plotter do Arduino para monitorar a variação dos valores de um sensor analógico em tempo real. Escolha um sensor como o sensor de luz (LDR) e observe de maneira gráfica e interativa como os valores mudam com diferentes níveis de luz.

Franzininho C0 com Arduino

Franzininho C0: Automação do Acendimento de LED com Sensor LDR usando Arduino IDE Franzininho C0: Monitoramento da Qualidade do Ar com Sensor MQ135 usando Arduino
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 » Hardware » Open Hardware » Franzininho C0: Controlando o Duty Cycle de um PWM com um Potenciômetro Usando Arduino

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: