Código de búsqueda

Lección 14/31-5: Ejemplo 2 de la función map() en la programación de Arduino

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.

Coche Sunfounder ensamblado

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

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

Imágenes

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
920-Lesson 14/31-5: Arduino coding map() example 2
Idioma: C++
/*
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
 

Recursos y referencias

Archivos📁

Manual del Usuario