Programación en robótica
- Arduino es pionero en la programación física, permitiendo a los informáticos fácilmente darle energía, programarlo y monitorearlo con el PC
- Es una placa open-hardware, por lo que bajó mucho las barreras a mejoras
Programación Arduino
Entorno de desarrollo
El Arduino IDE es el entorno más utilizado. Ofrece:
- Editor de código en C/C++.
- Compilación y carga directa al microcontrolador vía USB.
- Librerías preinstaladas para manejar sensores y actuadores. Hoy en día también existen alternativas como Arduino Web Editor o PlatformIO (para Visual Studio Code).
Patrones comunes de programación
En proyectos de robótica se emplean ciertos patrones de programación frecuentes:
- Estructura básica del programa:
setup()
: configuración inicial (pines, comunicación serial, librerías).loop()
: ciclo infinito donde se ejecuta la lógica de control.
- Lectura–procesamiento–acción:
- Leer entradas (sensores).
- Procesar datos (algoritmos de control).
- Actuar sobre salidas (motores, LEDs, etc.).
- Uso de interrupciones:
Permiten responder a eventos externos (ej. un sensor que dispara una señal) sin depender del ciclo principal. - Control por PWM:
Generación de señales de control para actuadores mediante la funciónanalogWrite()
. - Comunicación:
Uso de protocolos como UART (Serial), I2C o SPI para interactuar con periféricos y módulos externos.
Ejemplo 1: parpadeo de 3 leds junto con el builtin
void setup() {
pinmode(LED_BUILTIN, output);
pinmode(8, output);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
delay(500); // wait for half a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
delay(500); // wait for half a second
}
Ejemplo 2: agregando un pulsador
- Se podrían mapear los pines numéricos a nombres de variables para mejor explicación
void setup() {
pinMode(9, OUTPUT);
pinMode(6, INPUT);
}
void loop() {
if (digitalRead(6) == HIGH) {
digitalWrite(9, HIGH);
} else {
digitalWrite(9, LOW);
} // end if
}
En una sintaxis más reducida…
void setup() {
pinMode(9, OUTPUT);
pinMode(6, INPUT);
}
void loop() {
digitalWrite(9, digitalRead(6));
}
- función
millis()
- tiempo en milisegundos desde que se inició la ejecución.
- devuelve un
long
y no detiene el ciclo loop como si lo hacedelay()