Bloque 3.2: Entorno de Desarrollo: Arduino IDE

Aprende los fundamentos de programación en Arduino y cómo estructurar tus primeros sketches.

Diapositivas del Tema

Consulta la presentación visual de este tema para una mejor comprensión de los conceptos.

Ver Presentación →

¿Qué es un Sketch?

Un sketch es el nombre que Arduino le da a un programa. Es un archivo de texto con extensión .ino que contiene instrucciones en un lenguaje basado en C/C++ que le dice al microcontrolador qué hacer.

1. Estructura Básica de un Sketch de Arduino

Todo sketch de Arduino tiene una estructura fundamental que debes conocer. Esta estructura define el flujo de ejecución del programa.

// Sección de Directivas de Preprocesador (Opcional)
// #include <Libreria.h>
// #define CONSTANTE valor

// Sección de Declaración Global de Variables (Opcional)
// int miVariable = 0;

void setup() {
  // Código que se ejecuta UNA SOLA VEZ al inicio
  // Configuración de pines, inicialización de comunicación serial, etc.
}

void loop() {
  // Código que se ejecuta REPETIDAMENTE después de setup()
  // Lógica principal del programa
}
  • void setup(): Esta función se ejecuta una única vez cuando el Arduino se enciende o se presiona el botón de reset. Es el lugar ideal para inicializar variables, configurar modos de pines (entrada/salida), iniciar comunicación serial, etc.
  • void loop(): Esta función se ejecuta continuamente en un bucle infinito, una vez que termina setup(). Aquí va la lógica principal de tu programa, lo que quieres que el Arduino haga repetidamente (leer sensores, controlar actuadores, tomar decisiones).

2. Declaración de Variables

Las variables se utilizan para almacenar información que puede cambiar durante la ejecución del programa, como el valor de un sensor, el estado de un botón o un contador.

Tipos de Datos Comunes

Tipo Descripción Rango de Valores Ejemplo
int Número entero -32,768 a 32,767 int contador = 0;
long Número entero largo -2,147,483,648 a 2,147,483,647 long tiempoInicio = 0;
float Número decimal (punto flotante) ±3.4028235E+38 (6-7 dígitos decimales) float temperatura = 25.6;
bool o boolean Valor lógico true o false bool estadoLED = false;
char Un solo carácter -128 a 127 char letra = 'A';
Nota sobre Memoria: Elegir el tipo de dato correcto es importante, especialmente en microcontroladores con recursos limitados. Por ejemplo, si sabes que una variable nunca será negativa y su valor máximo es 255, usar byte (0-255) es más eficiente que int (-32,768 a 32,767).

3. Configuración de Pines: pinMode()

Antes de usar un pin, debes configurar si va a actuar como entrada o como salida. Esto se hace con la función pinMode().

Sintaxis: pinMode(numero_de_pin, MODO);

  • numero_de_pin: El número del pin físico del Arduino (por ejemplo, 13, A0).
  • MODO: Puede ser:
    • INPUT: El pin actúa como entrada, para leer un sensor o un botón.
    • OUTPUT: El pin actúa como salida, para controlar un LED o un motor.
    • INPUT_PULLUP: Configura el pin como entrada con una resistencia pull-up interna activada. Útil para botones sin resistencias externas.

Ejemplos:

// Configura el pin 13 como salida (por ejemplo, para un LED)
pinMode(13, OUTPUT);

// Configura el pin 2 como entrada (por ejemplo, para un botón)
pinMode(2, INPUT);

// Configura el pin A0 como entrada con pull-up
pinMode(A0, INPUT_PULLUP);

4. Control Digital: digitalWrite() y digitalRead()

Estas funciones son fundamentales para interactuar con el mundo físico a través de los pines digitales.

4.1. Escribiendo en un Pin: digitalWrite()

Envía una señal digital (HIGH o LOW) a un pin configurado como salida.

Sintaxis: digitalWrite(numero_de_pin, VALOR);

  • numero_de_pin: El número del pin de salida.
  • VALOR: Puede ser:
    • HIGH: Establece el pin a 5V (o 3.3V en placas de 3.3V).
    • LOW: Establece el pin a 0V (GND).

Ejemplo:

// Enciende el LED conectado al pin 13
digitalWrite(13, HIGH);

// Apaga el LED conectado al pin 13
digitalWrite(13, LOW);

4.2. Leyendo de un Pin: digitalRead()

Lee el valor digital (HIGH o LOW) de un pin configurado como entrada. Devuelve HIGH o LOW.

Sintaxis: int valor = digitalRead(numero_de_pin);

  • numero_de_pin: El número del pin de entrada.
  • El valor devuelto se almacena típicamente en una variable de tipo int.

Ejemplo:

// Lee el estado del botón conectado al pin 2
int estadoBoton = digitalRead(2);

// Ahora puedes usar 'estadoBoton' en condiciones
if (estadoBoton == HIGH) {
  // El botón está presionado
  digitalWrite(13, HIGH); // Enciende el LED
} else {
  // El botón no está presionado
  digitalWrite(13, LOW);  // Apaga el LED
}

5. Ejemplo Práctico: Control de LED con un Botón

Vamos a aplicar lo aprendido en un ejemplo práctico. Este sketch leerá el estado de un botón conectado a un pin de entrada y usará ese estado para encender o apagar un LED conectado a un pin de salida.

5.1. Materiales Necesarios

  • 1 Arduino UNO (o compatible)
  • 1 Protoboard
  • 1 Botón pulsador
  • 1 LED
  • 1 Resistencia de 220Ω (para el LED)
  • 1 Resistencia de 10kΩ (para el botón, aunque se puede usar la pull-up interna)
  • Cables de conexión (jumper wires)
Consejo: Para simplificar el circuito, usaremos la resistencia pull-up interna del Arduino para el botón, por lo que no necesitarás la resistencia de 10kΩ externa.

5.2. Esquema de Conexión (Circuito)

Esquema de conexión del LED y botón al Arduino
Conexión del LED al pin 13 y el botón al pin 2 del Arduino UNO. La resistencia de 220Ω está en serie con el LED. El botón conecta el pin 2 a GND cuando se presiona.

Conexiones:

  • LED: El ánodo (pata larga) al pin 13 del Arduino. El cátodo (pata corta) a una resistencia de 220Ω, y el otro extremo de la resistencia a GND.
  • Botón: Una pata del botón al pin 2 del Arduino. La pata opuesta del botón a GND. El pin 2 se configura con INPUT_PULLUP, por lo que no se necesita una resistencia externa.

5.3. Código del Sketch

A continuación se presenta el código del sketch. Cada parte está comentada para explicar su función.

##include <Arduino.h>

/*
  Control de LED con Botón

  Este sketch lee el estado de un botón conectado al pin 2.
  Cuando el botón está presionado (conectado a GND), enciende un LED conectado al pin 13.
  Cuando el botón no está presionado, el LED está apagado.

  Autor: Prof. Eduardo Pimienta
  Fecha: Mayo 2024
*/

// --- Sección de Declaración de Variables ---
// Definimos constantes para los números de pin.
// Usar constantes hace el código más legible y fácil de modificar.
const int ledPin = 13;      // El número del pin donde está conectado el LED
const int buttonPin = 2;     // El número del pin donde está conectado el botón

// Variable para almacenar el estado del botón
int buttonState = 0;         // Variable que guardará el valor leído del botón (HIGH o LOW)

// --- Fin de la Sección de Declaración de Variables ---

// --- Función setup() ---
// Se ejecuta una sola vez al inicio
void setup() {
  // Inicializamos el pin del LED como una salida.
  pinMode(ledPin, OUTPUT);
  
  // Inicializamos el pin del botón como una entrada con resistencia pull-up interna.
  // Esto significa que el pin leerá HIGH cuando el botón NO esté presionado,
  // y LOW cuando el botón ESTÉ presionado (conectado a GND).
  pinMode(buttonPin, INPUT_PULLUP);
}
// --- Fin de la Función setup() ---

// --- Función loop() ---
// Se ejecuta repetidamente después de setup()
void loop() {
  // Leemos el estado actual del botón (HIGH o LOW).
  buttonState = digitalRead(buttonPin);

  // Comprobamos si el botón está presionado.
  // Debido a INPUT_PULLUP, el botón está presionado cuando buttonState es LOW.
  if (buttonState == LOW) {
    // Si el botón está presionado, encendemos (HIGH) el LED.
    digitalWrite(ledPin, HIGH);
  } else {
    // Si el botón NO está presionado, apagamos (LOW) el LED.
    digitalWrite(ledPin, LOW);
  }
  
  // Un pequeño retardo para estabilizar la lectura (opcional pero recomendado)
  // delay(10); 
}
// --- Fin de la Función loop() ---

5.4. Explicación del Código

  1. Declaración de Variables:
    • const int ledPin = 13; y const int buttonPin = 2;: Se definen constantes para los números de pin. Esto mejora la legibilidad del código y facilita futuras modificaciones. Usar const indica que estos valores no cambiarán durante la ejecución.
    • int buttonState = 0;: Se declara una variable entera para almacenar temporalmente el valor leído del pin del botón.
  2. Función setup():
    • pinMode(ledPin, OUTPUT);: Configura el pin 13 (donde está el LED) como una salida.
    • pinMode(buttonPin, INPUT_PULLUP);: Configura el pin 2 (donde está el botón) como entrada con la resistencia pull-up interna activada. Esto hace que el pin lea HIGH cuando el botón no está presionado y LOW cuando sí lo está.
  3. Función loop():
    • buttonState = digitalRead(buttonPin);: Lee el estado actual del pin 2 y almacena el valor (HIGH o LOW) en la variable buttonState.
    • if (buttonState == LOW) { ... } else { ... }: Una estructura condicional verifica el valor de buttonState.
      • Si es LOW (botón presionado), se ejecuta digitalWrite(ledPin, HIGH); para encender el LED.
      • Si no es LOW (botón no presionado, es HIGH), se ejecuta digitalWrite(ledPin, LOW); para apagar el LED.

Este ejemplo combina todos los conceptos aprendidos: declaración de variables, configuración de pines con pinMode(), lectura digital con digitalRead() y escritura digital con digitalWrite().


6. Galería de Videos Recomendados

Profundiza en el uso del Arduino IDE y ejemplos prácticos.

Introducción al Arduino IDE

Una guía paso a paso sobre cómo instalar, configurar y usar el entorno de desarrollo de Arduino.

Arduino UNO Tutorial

Un tutorial completo que cubre desde lo básico hasta proyectos más avanzados con Arduino UNO.


7. Referencias y Lecturas Recomendadas

  • Referencia del Lenguaje Arduino - Documentación oficial de todas las funciones y estructuras del lenguaje Arduino.
  • Banzi, M. (2008). Getting Started with Arduino. O'Reilly Media.
  • Schwartz, M. (2017). Arduino Cookbook. O'Reilly Media.