Lição 14/31-5: Exemplo 2 de map() na programação Arduino
Este tutorial demonstra como usar a função map() do Arduino para controlar o brilho de um LED usando um valor percentual (0–100%) em vez da faixa bruta de 0–255 exigida por analogWrite(). Esta é uma técnica fundamental que simplifica seu código e o torna muito mais intuitivo, pois você pode pensar em termos de porcentagens em vez de valores de byte arbitrários.
Essa habilidade é essencial para qualquer projeto em que você precise dimensionar leituras de sensores ou sinais de controle. Por exemplo, você pode usá-la para:
- Controlar o brilho de um LED ou a velocidade de um motor com base na leitura de um potenciômetro.
- Converter a saída de um sensor de temperatura (por exemplo, 0–1023) para uma faixa em Celsius ou Fahrenheit.
- Mapear a entrada analógica de um joystick para controlar a posição de um servomotor.
- Criar uma interface de usuário simples onde um valor percentual é usado para definir o nível de potência de um dispositivo.
Ao final desta lição, você será capaz de escrever um código mais limpo e sustentável, que seja mais fácil de ler e ajustar.
Hardware/Componentes
Este projeto usa um conjunto mínimo de componentes, tornando-o perfeito para iniciantes. Você precisará de:
- Uma placa Arduino (por exemplo, Uno).
- Um LED.
- Um resistor de 220 ohms.
- Fios de ligação (jumpers).
- Uma protoboard (opcional, mas recomendada).
Guia de Ligação
A ligação para este projeto é muito simples, como demonstrado no vídeo (no vídeo em 20:47). O LED está conectado ao pino 3 do Arduino através de um resistor limitador de corrente de 220 ohms.
Conecte o ânodo (perna mais longa) do LED ao pino 3 através do resistor. Conecte o cátodo (perna mais curta) do LED ao pino de terra (GND) no Arduino.
Explicação do Código
Este exemplo foca em uma função definida pelo usuário que simplifica o controle do brilho do LED. O código é construído em torno de uma função personalizada chamada pwmValue(), que é a chave para tornar o código intuitivo.
Vamos detalhar as partes configuráveis do código:
int LEDpin = 3; //define o pino para o LED
Esta linha define o pino do Arduino ao qual o LED está conectado. Você pode alterar o número 3 para qualquer outro pino compatível com PWM na sua placa Arduino.
O núcleo do projeto é a função personalizada pwmValue(). Esta função recebe um valor percentual como entrada e o converte para a faixa de 0–255 usada por analogWrite(). É aqui que a função map() faz sua mágica.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
Para usar esta função, basta chamá-la com a porcentagem de brilho desejada. A função retornará o valor correto para analogWrite(). Por exemplo, pwmValue(60) retornará 153, que corresponde a 60% de 255. A função também inclui uma verificação de segurança para garantir que a porcentagem de entrada esteja entre 0 e 100, retornando 0 se estiver fora dessa faixa.
Na função setup(), você pode ver como isso é usado:
int b=5;//60% de brilho
Serial.println( pwmValue(b) );//imprime no monitor serial
analogWrite(LEDpin, pwmValue(b));// liga o LED com 60% de brilho
Aqui, a variável b é definida com a porcentagem de brilho desejada. A função pwmValue(b) é então usada tanto para imprimir o valor mapeado no Monitor Serial quanto para definir o brilho do LED. Para alterar o brilho do LED, você só precisa modificar o valor de b. A função map() cuida de todos os cálculos necessários para você.
Projeto ao Vivo/Demonstração
No vídeo, o apresentador demonstra o projeto alterando o valor da variável b e enviando o código para o Arduino. Quando b é definido como 60, o código o mapeia para 153 e o LED acende com 60% de brilho. Alterar b para 90 mapeia para 229, tornando o LED visivelmente mais brilhante. Definir como 100 mapeia para 255, que é o brilho máximo. A demonstração mostra claramente como a função map() permite controlar o LED usando um valor percentual intuitivo, enquanto o Monitor Serial confirma o valor exato de 0–255 enviado ao pino (no vídeo em 21:29).
Projetos relacionados deste vídeo
- Lição 14/31-1: Arduino Millis (sem delay) e funções map | SunFounder Robojax
- Lição 14/31-2: Codificação Arduino millis() exemplo 2 com evento
- Lição 14/31-3: Codificação Arduino millis() exemplo 3 com botão de pressão
- Lição 14/31-4: Codificação Arduino map() exemplo 1
Capítulos
- [00:00] Introdução às funções Millis e map
- [01:19] O que é Millis e por que usá-lo
- [05:46] Usando Millis com um evento para agir
- [08:35] Exemplo 2 de Millis com um botão de pressão
- [12:14] Exemplo 3 de Millis verificando dois pressionamentos de botão
- [17:20] Introdução à função map()
- [19:47] Exemplo de código para mapear uma porcentagem para o brilho do LED
- [20:47] Demonstração ao vivo da função map()
- [22:41] Criando uma função personalizada para lidar com o mapeamento
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int LEDpin = 3; //defind pin for LED
void setup() {
Serial.begin(9600);//initialzie serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=5;//60% brightness
Serial.println( pwmValue(b) );//print it on serial monitor
analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness
}
void loop() {
}
/*
* pwmValue(int percent)
* @param precent is value between 0 to 100
* @return it returns the mapped value from 0 to 255
* written by Ahmad Shamshiri on Dec 9, 2022
*
*/
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
} //pwmValue end
Coisas que você pode precisar
-
AmazonasSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazonas
-
Amazonas
-
Amazonas
-
Amazonas
-
Outro
Recursos e referências
-
Externo
Arquivos📁
Manual do Usuário
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB