Lección 14/31-5: Ejemplo 2 de la función map() en la programación de Arduino
Este tutorial demuestra cómo usar la función map() de Arduino para controlar el brillo de un LED usando un valor porcentual (0–100%) en lugar del rango bruto de 0–255 requerido por analogWrite(). Esta es una técnica fundamental que simplifica tu código y lo hace mucho más intuitivo, ya que puedes pensar en términos de porcentajes en lugar de valores de byte arbitrarios.
Esta habilidad es esencial para cualquier proyecto donde necesites escalar lecturas de sensores o señales de control. Por ejemplo, podrías usarla para:
- Controlar el brillo de un LED o la velocidad de un motor basado en la lectura de un potenciómetro.
- Convertir la salida de un sensor de temperatura (por ejemplo, 0–1023) a un rango en Celsius o Fahrenheit.
- Mapear la entrada analógica de un joystick para controlar la posición de un servomotor.
- Crear una interfaz de usuario simple donde un valor porcentual se use para establecer el nivel de potencia de un dispositivo.
Al final de esta lección, podrás escribir código más limpio y mantenible que sea más fácil de leer y ajustar.
Hardware/Componentes
Este proyecto usa un conjunto mínimo de componentes, lo que lo hace perfecto para principiantes. Necesitarás:
- Una placa Arduino (por ejemplo, Uno).
- Un LED.
- Una resistencia de 220 ohmios.
- Cables de conexión (jumper wires).
- Una placa de pruebas (opcional pero recomendada).
Guía de Conexiones
El cableado para este proyecto es muy simple, como se demuestra en el video (en el video en 20:47). El LED está conectado al pin 3 del Arduino a través de una resistencia limitadora de corriente de 220 ohmios.
Conecta el ánodo (pata más larga) del LED al pin 3 a través de la resistencia. Conecta el cátodo (pata más corta) del LED al pin de tierra (GND) en el Arduino.
Explicación del Código
Este ejemplo se centra en una función definida por el usuario que simplifica el control del brillo del LED. El código está construido alrededor de una función personalizada llamada pwmValue(), que es la clave para hacer el código intuitivo.
Desglosemos las partes configurables del código:
int LEDpin = 3; //define el pin para el LED
Esta línea define el pin de Arduino al que está conectado el LED. Puedes cambiar el número 3 a cualquier otro pin compatible con PWM en tu placa Arduino.
El núcleo del proyecto es la función personalizada pwmValue(). Esta función toma un valor porcentual como entrada y lo convierte al rango de 0–255 usado por analogWrite(). Aquí es donde la función map() hace su magia.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
Para usar esta función, simplemente la llamas con tu porcentaje de brillo deseado. La función devolverá el valor correcto para analogWrite(). Por ejemplo, pwmValue(60) devolverá 153, que corresponde al 60% de 255. La función también incluye una verificación de seguridad para asegurar que el porcentaje de entrada esté entre 0 y 100, devolviendo 0 si está fuera de este rango.
En la función setup(), puedes ver cómo se usa esto:
int b=5;//60% de brillo
Serial.println( pwmValue(b) );//imprímelo en el monitor serie
analogWrite(LEDpin, pwmValue(b));// enciende el LED con 60% de brillo
Aquí, la variable b se establece a tu porcentaje de brillo deseado. La función pwmValue(b) se usa luego tanto para imprimir el valor mapeado en el Monitor Serie como para establecer el brillo del LED. Para cambiar el brillo del LED, solo necesitas modificar el valor de b. La función map() maneja todos los cálculos necesarios por ti.
Proyecto en Vivo/Demostración
En el video, el presentador demuestra el proyecto cambiando el valor de la variable b y subiendo el código al Arduino. Cuando b se establece a 60, el código lo mapea a 153 y el LED se enciende al 60% de brillo. Cambiar b a 90 lo mapea a 229, haciendo que el LED sea notablemente más brillante. Establecerlo a 100 lo mapea a 255, que es el brillo máximo. La demostración muestra claramente cómo la función map() te permite controlar el LED usando un valor porcentual intuitivo, mientras que el Monitor Serie confirma el valor exacto de 0–255 que se envía al pin (en el video en 21:29).
Proyectos relacionados de este video
- Lección 14/31-1: Arduino Millis (sin delay) y funciones map | SunFounder Robojax
- Lección 14/31-2: Arduino codificación millis() ejemplo 2 con evento
- Lección 14/31-3: Arduino codificación millis() ejemplo 3 con botón pulsador
- Lección 14/31-4: Arduino codificación map() ejemplo 1
Capítulos
- [00:00] Introducción a las funciones Millis y map
- [01:19] Qué es Millis y por qué usarlo
- [05:46] Usando Millis con un evento para tomar acción
- [08:35] Ejemplo 2 de Millis con un botón pulsador
- [12:14] Ejemplo 3 de Millis verificando dos pulsaciones de botón
- [17:20] Introducción a la función map()
- [19:47] Ejemplo de código para mapear un porcentaje al brillo del LED
- [20:47] Demostración en vivo de la función map()
- [22:41] Creando una función personalizada para manejar el mapeo
/*
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
Cosas que podrías necesitar
-
AmazonasSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazonas
-
Amazonas
-
Amazonas
-
Amazonas
-
Otro
Recursos y referencias
-
Externo
Archivos📁
Manual del Usuario
-
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