En este artículo echaremos un vistazo al Arduino frente al Pico Elecrow Starter Kit para educación STEM. Ambos kits de inicio ofrecen muchos sensores diferentes (luz, sonido, distancia, …) y algunos actuadores (servo, LED, relé, zumbador, …) que se pueden programar mediante el Arduino IDE.
La principal diferencia es que un Starter Kit utiliza el Arduino (ATmega328P) como microcontrolador, mientras que el otro contiene el chip Pico 2 (RP2350). También hay algunas diferencias en los sensores integrados, actuadores y la pantalla, que también discutiremos.
Partes Requeridas
A continuación encontrarás los enlaces a los dos Starter Kits. Como puedes ver, vienen en forma de pequeñas maletas (195*170*46mm) con los sensores y actuadores fácilmente accesibles en un panel frontal:

Starter Kit con Arduino

Starter Kit con Pico 2
En las siguientes dos secciones primero analizamos más de cerca el kit basado en Arduino y luego discutimos el Starter Kit con el Pico 2.
Starter Kit con Arduino
El Starter Kit basado en Arduino viene con sensores integrados para Luz, Temperatura, Humedad, Sonido, Distancia, Aceleración, Movimiento y luz IR, y un sensor adicional de Humedad del suelo que se puede conectar mediante una interfaz Crowtail. Hay seis de estas interfaces Crowtail, que proporcionan dos IO analógicos, un IO digital, dos interfaces I2C y una interfaz UART.
Además de los sensores, hay una pantalla LCD, un botón, un relé, un zumbador, un servo y un potenciómetro lineal como actuadores. La imagen a continuación muestra el panel frontal del kit con los sensores y actuadores etiquetados.

El kit viene con Demo Cod, un Tutorial/User Manual y el Schematics del hardware. La siguiente tabla lista los pines GPIO o direcciones I2C (source) para los diferentes sensores y actuadores:
| Sensor | Pin GPIO | I2C |
|---|---|---|
| I2C | A5/SCLA4/SDA | |
| UART | D0/RXD1/TX | |
| Entrada Analógica | A3 | |
| Entrada Analógica | A6 | |
| IO Digital | D11 | |
| Sensor de Luz | A5/SCLA4/SDA | 0X5C |
| LED | D10 | |
| Botón | D7 | |
| Servo | D9 | |
| PIR | A2 | |
| MPU-6050 | A5/SCLA4/SDA | 0x68 |
| Zumbador | D3 | |
| Potenciómetro Lineal | A0 | |
| Relé | D4 | |
| Sensor de Sonido | A1 | |
| Sensor Remoto IR | D2 | |
| Temperatura y Humedad | A5/SCLA4/SDA | 0X38 |
| Sensor Ultrasónico | D5_US_ECHOD6_US_TRIG | |
| LCD | A5/SCLA4/SDA | 0X21 |
Programando el Starter Kit Arduino
Programar el Starter Kit basado en Arduino funciona igual que programar un Arduino UNO. Primero Install the Arduino IDE en tu PC como de costumbre. Conecta el kit vía USB a tu PC. Luego abre el Board Manager y selecciona la placa «Arduino Uno» como se muestra abajo.

La placa debería ser reconocida como conectada a uno de los puertos COM. En el ejemplo arriba es COM5, pero en tu caso puede aparecer en otro puerto.
Si eso funciona, puedes empezar a escribir y subir código. Desafortunadamente, el Demo Code y el Tutorial para el Starter Kit contienen bastantes errores y, en mi opinión, no son fáciles de entender. Por eso implementé algunos ejemplos de código que puedes encontrar abajo.
Ejemplo de Código: Parpadeo de LED
El siguiente código es el clásico ejemplo Blink. Enciende el LED rojo durante un segundo, luego lo apaga durante un segundo y repite este ciclo indefinidamente:
const int ledPin = 10;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
Ejemplo de Código: Botón y LED
En este siguiente ejemplo usamos el botón para encender o apagar el LED rojo. Mientras el botón esté presionado, el LED estará encendido:
const int buttonPin = 7;
const int ledPin = 10;
void setup() {
pinMode(buttonPin , INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (!digitalRead(buttonPin)) {
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
}
}
Si quieres aprender más sobre botones, echa un vistazo al tutorial How To Use A Push Button With Arduino.
Ejemplo de Código: Sensor de Movimiento y LED
Este ejemplo de código muestra cómo controlar el LED con el sensor de movimiento. Cada vez que el sensor PIR detecta movimiento, el LED rojo se enciende durante un segundo.
const int pirPin = A2;
const int ledPin = 10;
void setup() {
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (digitalRead(pirPin)) {
digitalWrite(ledPin, HIGH);
delay(1000);
}
digitalWrite(ledPin, LOW);
delay(10);
}
Si quieres aprender más sobre sensores infrarrojos pasivos (PIR) para detección de movimiento, echa un vistazo al tutorial How to use HC-SR501 PIR Motion Sensor with Arduino.
Ejemplo de Código: Sensor de Sonido y Relé
En el siguiente ejemplo encendemos el relé si el micrófono detecta algún sonido con un volumen superior al umbral definido de 50. Puedes cambiar el umbral para hacer la detección de sonido más o menos sensible.
const int soundPin = A1;
const int relayPin = 4;
const int threshold = 50;
void setup() {
pinMode(soundPin, INPUT);
pinMode(relayPin, OUTPUT);
}
void loop() {
if (analogRead(soundPin) > threshold) {
digitalWrite(relayPin, HIGH);
delay(1000);
digitalWrite(relayPin, LOW);
delay(100);
}
}
Para más información sobre relés, echa un vistazo al tutorial How To Use A Relay With Arduino.
Ejemplo de Código: Sensor Ultrasónico y Zumbador
El ejemplo siguiente usa el sensor ultrasónico para medir distancias y si la distancia es menor a 30 centímetros, el zumbador se activa para emitir un sonido de advertencia:
#include "HCSR04.h"
const int triggerPin = 6;
const int echoPin = 5;
const int buzzerPin = 3;
UltraSonicDistanceSensor sensor(triggerPin, echoPin);
void setup() {
}
void loop() {
float dist = sensor.measureDistanceCm();
if (dist > 0 && dist < 30) {
tone(buzzerPin, 2000);
delay(100);
noTone(buzzerPin);
}
}
Si necesitas más información sobre zumbadores, echa un vistazo al tutorial Use A Piezo Buzzer With Arduino. Y si quieres aprender más sobre el sensor ultrasónico de distancia, puedes leer nuestro tutorial How to use an HC-SR04 Ultrasonic Distance Sensor with Arduino.
Ejemplo de Código: Sensor Ultrasónico y Servo
Este siguiente ejemplo usa nuevamente el sensor ultrasónico pero ahora para controlar el servo. Cuanto más cerca esté un objeto del sensor, más gira el servo.
#include "HCSR04.h"
#include "Servo.h"
const int triggerPin = 6;
const int echoPin = 5;
const int servoPin = 9;
Servo servo;
UltraSonicDistanceSensor sensor(triggerPin, echoPin);
void setup() {
servo.attach(servoPin, 600, 2520);
}
void loop() {
float dist = sensor.measureDistanceCm();
if (dist > 0 && dist < 30) {
int pos = map(dist, 0, 30, 0, 180);
servo.write(pos);
delay(50);
}
}
Para más información sobre servos, echa un vistazo a nuestro tutorial How to control servo motors with Arduino. Y si quieres controlar el servo mediante un mando IR usando el sensor IR incorporado, lee el tutorial How to Control a Servo with an IR Remote.
Ejemplo de Código: Sensor de Temperatura y Humedad y LCD
Como ejemplo final, medimos la temperatura y humedad con el sensor DHT20 y mostramos los valores medidos en la pantalla LCD:
#include "DHT20.h"
#include "Adafruit_LiquidCrystal.h"
DHT20 dht(&Wire);
Adafruit_LiquidCrystal lcd(0x21);
void setup() {
lcd.begin(16, 2);
Wire.begin();
dht.begin();
}
void loop() {
dht.read();
lcd.setCursor(2, 0);
lcd.print("Tem: ");
lcd.print(dht.getTemperature());
lcd.print(" C");
lcd.setCursor(2, 1);
lcd.print("Hum: ");
lcd.print(dht.getHumidity());
lcd.print(" %");
delay(500);
}
Si necesitas más ayuda con las pantallas LCD, echa un vistazo a los tutoriales Interfacing 128 x 64 Graphical LCD With Arduino y How to use a 16×2 character LCD with Arduino.
Starter Kit con Pico 2
El Starter Kit basado en el microcontrolador Raspberry Pico 2 viene con sensores de tacto, luz, campos magnéticos, gas, sonido, temperatura, humedad y un sensor ultrasónico de distancia.
En cuanto a actuadores y otros dispositivos de salida, hay un zumbador, un servo, un motor de vibración, un relé, un potenciómetro, varios botones, tres LEDs, dos tiras de LEDs RGB y una pantalla TFT. La imagen a continuación muestra el panel frontal del kit con sus sensores y actuadores.

Este kit también viene con Demo Cod, un Tutorial/Manual, un Wiki y el Schematics para los circuitos de hardware.
Programando el Starter Kit Pico
Antes de poder programar el Pico 2 con el Arduino IDE necesitas instalar el core RP2350. Ve a File -> Preferences en el Arduino IDE y abre el diálogo de Preferencias

En el diálogo de Preferencias ve a la pestaña Settings. En la parte inferior verás «Additional boards manager URLs:». Haz clic en el botón a la derecha (marcado en amarillo) para abrir el editor de URLs

En el editor de URLs añade la siguiente URL a la lista (marcada en amarillo abajo):
«https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json»

A pesar de su nombre, el package_rp2040_index soporta el chip RP2040 y el RP2350, que es usado en el Starter Kit Pico.
Como puedes ver, también he instalado los cores ESP8266 y ESP32, pero solo necesitas el core RP2350 para el Starter Kit basado en Pico.
Instalación de placas RP2350
Luego necesitamos instalar las placas RP2350. Ve a Tools -> Board -> Board Manager y busca RP2350 usando la barra de búsqueda. Instala las placas Raspberry Pi Pico/RP2040/RP2350 de Earle F. Philhower. Después de la instalación debería verse así.

Seleccionar placa Raspberry Pi Pico 2
Una vez completada la instalación del core RP2350, conecta el Starter Kit Pico al puerto USB de tu ordenador. Luego ve al Board Manager y selecciona la placa «Raspberry Pi Pico 2» como se muestra abajo:

La placa debería ser reconocida por el Arduino IDE y deberías verla conectada a un puerto COM vía USB (ver captura arriba).
Ahora estamos listos para programarla. Para mayor comodidad, aquí tienes una tabla con algunos de los pines GPIO y los sensores o actuadores a los que están conectados (source):
| Pin GPIO | Función |
|---|---|
| GP0_LED_BK | LED_BK |
| GP1_PSRAM_CS | Selección chip PSRAM |
| GP4/I2C0_SDA | Tacto pantalla TFT |
| GP5/I2C0_SCL | |
| GP2/I2C1_SDA | Temperatura y Humedad DHT20 (0X38) MPU-6050 (0x68) SENSOR DE LUZ (0x5C) |
| GP3/I2C1_SCL | |
| GP6_SPI0_CLK_TFT | Pantalla TFT display |
| GP7_SPI0_MOSI_TFT | |
| GP16_RS_TFT | |
| GP17_SPI0_CS_TFT | |
| GPIO24_TP_RST | |
| GPIO25_TP_INT | |
| GP26_A0_GAS | Sensor de humo |
| GP27_A1_KEY | 4 botones |
| GP28_A2_POT | Potenciómetros deslizantes |
| GP29_A3_SOUND | Módulo sensor de sonido |
| QSPI_SD3 | Memoria NORFlash W25Q64 & APS6404L PSRAM |
| QSPI_SCLK | |
| QSPI_SD0 | |
| QSPI_SD2 | |
| QSPI_SD1 | |
| QSPI_SS | |
| GPIO8_US_ECHO | Módulo ultrasónico |
| GPIO9_US_TRIG | |
| GPIO10_BUZZER | Módulo zumbador |
| GPIO11_IR | Módulo IR |
| GPIO12_RELAY | Módulo relé |
| GPIO13_SERVO | Módulo servo |
| GPIO14_TOUCH | Módulo táctil |
| GPIO15_VIB | Módulo motor de vibración |
| GPIO18_LED_RED | LED |
| GPIO19_LED_GREEN | LED |
| GPIO20_LED_YELLOW | LED |
| GPIO21_HALL | Módulos sensor Hall |
| GPIO22_RGB | LED RGB*20 |
| GPIO23_RGB_EN |
El Starter Kit Pico viene con algunos Demo Code y un Tutorial pero el código es un gran bloque y no es muy adecuado para aprender a usar los diferentes sensores del kit. Por eso implementé algunos ejemplos simples que te ayudarán a empezar fácilmente.
Ejemplo de Código: Parpadeo de tres LEDs
Este primer ejemplo simplemente hace parpadear los tres LEDs (rojo, verde, amarillo) uno tras otro:
// red, green, yellow LEDS
const int leds[] = { 18, 19, 20 };
void setup() {
for (int i = 0; i < 3; i++) {
pinMode(leds[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i < 3; i++) {
digitalWrite(leds[i], HIGH);
delay(500);
digitalWrite(leds[i], LOW);
}
}
Ejemplo de Código: Sensor de Gas y Monitor Serial
En el siguiente ejemplo leemos el valor del sensor de gas y lo imprimimos en el monitor serial:
void setup() {
Serial.begin(115200);
}
void loop() {
int sensorValue = analogRead(A0);
Serial.print("Gas:");
Serial.println(sensorValue);
delay(1000);
}
Si quieres aprender más sobre el sensor de gas MQ-2 y cómo interpretar esos valores, echa un vistazo a nuestro tutorial How to use the MQ-2 Gas Sensor with Arduino.
Ejemplo de Código: Sensor táctil y zumbador
El siguiente código lee el sensor táctil y emite un tono en el zumbador si se detecta un toque:
const int touchPin = 14;
const int buzzerPin = 10;
void setup() {
pinMode(buzzerPin, OUTPUT);
pinMode(touchPin, INPUT);
}
void loop() {
delay(50);
if (digitalRead(touchPin)) {
tone(buzzerPin, 2000);
} else {
noTone(buzzerPin);
}
}
Para más información sobre zumbadores, echa un vistazo al tutorial Use A Piezo Buzzer With Arduino.
Ejemplo de Código: Sensor de Sonido y LED
El siguiente ejemplo usa el micrófono para detectar sonido y si el volumen supera un cierto umbral, el LED rojo se enciende.
const int ledPin = 18;
const int soundPin = 29;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(soundPin, INPUT);
}
void loop() {
if (analogRead(soundPin) > 50) {
digitalWrite(ledPin, HIGH);
delay(100);
} else {
digitalWrite(ledPin, LOW);
}
}
Ejemplo de Código: Servo y Potenciómetro
Con este ejemplo puedes usar el potenciómetro lineal para controlar la posición del brazo del servo:
#include "Servo.h"
const int servoPin = 13;
Servo servo;
void setup() {
servo.attach(servoPin, 600, 2520);
}
void loop() {
int pot = analogRead(A2);
int pos = map(pot, 0, 1024, 0, 180);
servo.write(pos);
delay(10);
}
Para más información sobre servos, echa un vistazo a los tutoriales How to control servo motors with Arduino y Positional versus Continuous Servos. Si quieres controlar el servo mediante un mando IR usando el sensor IR incorporado del kit, el tutorial How to Control a Servo with an IR Remote te será útil.
Ejemplo de Código: Sensor Ultrasónico y Relé
En el siguiente ejemplo de código encendemos el relé (y el LED rojo) si la distancia medida por el sensor ultrasónico es menor a 10 cm:
#include "HCSR04.h"
const int triggerPin = 9;
const int echoPin = 8;
const int relayPin = 12;
const int ledPin = 18;
UltraSonicDistanceSensor sensor(triggerPin, echoPin);
void setup() {
pinMode(relayPin, OUTPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
float dist = sensor.measureDistanceCm();
if (dist > 0 && dist < 10) {
digitalWrite(relayPin, HIGH);
digitalWrite(ledPin, HIGH);
delay(1000);
}
digitalWrite(relayPin, LOW);
digitalWrite(ledPin, LOW);
}
Si quieres aprender más sobre el sensor ultrasónico de distancia, puedes leer nuestro tutorial How to use an HC-SR04 Ultrasonic Distance Sensor with Arduino. Y para más información sobre relés, echa un vistazo al tutorial How To Use A Relay With Arduino.
Ejemplo de Código: Pantalla TFT
El Starter Kit Pico contiene una pantalla TFT y aquí tienes un ejemplo simple de cómo usar esta pantalla con el Adafruit-ST7735-Library. El código simplemente escribe el texto «Makerguides» en la pantalla.
#include "Adafruit_GFX.h"
#include "Adafruit_ST7789.h"
#include "SPI.h"
#define TFT_CS 17
#define TFT_RST -1
#define TFT_DC 16
#define TFT_MOSI 7
#define TFT_SCLK 6
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
const int tftBacklight = 0;
void setup() {
pinMode(tftBacklight, OUTPUT);
digitalWrite(tftBacklight, HIGH);
tft.init(240, 320);
tft.fillScreen(ST77XX_BLACK);
tft.setRotation(3);
tft.setCursor(60, 100);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(3);
tft.print("Makerguides");
}
void loop() {}
Si quieres hacer más que solo escribir texto, echa un vistazo al tutorial Adafruit GFX Graphics Library documentation. Además de texto, puedes mostrar todo tipo de gráficos (líneas, rectángulos, …) y colores.
Otra información relevante también está disponible en los tutoriales Interface TFT ST7789 Display with ESP32 y Interfacing 1.8-inch TFT Color Display With Arduino.
Ejemplo de Código: Pantalla TFT y Sensor de Temperatura y Humedad
Este ejemplo final demuestra cómo leer datos del sensor de temperatura y humedad, y cómo mostrar los valores medidos en la pantalla TFT:
#include "Adafruit_GFX.h"
#include "Adafruit_ST7789.h"
#include "SPI.h"
#include "DHT20.h"
const int tftBacklight = 0;
// CS, DC, MOSI, SCLK, RST
Adafruit_ST7789 tft = Adafruit_ST7789(17, 16, 7, 6, -1);
DHT20 dht(&Wire1);
void setup() {
pinMode(tftBacklight, OUTPUT);
digitalWrite(tftBacklight, HIGH);
tft.init(240, 320);
tft.fillScreen(ST77XX_BLACK);
tft.setRotation(3);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(3);
Wire1.setSDA(2);
Wire1.setSCL(3);
Wire1.begin();
dht.begin();
}
void loop() {
dht.read();
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(30, 50);
tft.printf("Tmp: %.2f C", dht.getTemperature());
tft.setCursor(30, 100);
tft.printf("Hum: %.2f %%", (double)dht.getHumidity());
delay(1000);
}
Notarás que la pantalla parpadea con cada actualización de los valores mostrados. Necesitamos limpiar la pantalla entre cada actualización, ya que el texto se escribe con un transparent background y por lo tanto se sobreescribiría a sí mismo. Puedes evitar esto escribiendo primero en un canvas y luego actualizando la pantalla. Echa un vistazo al tutorial Adafruit GFX Graphics Library documentation si quieres hacer esto.
Comparación de los Starter Kits
La principal diferencia entre los dos Starter Kits es el microcontrolador. Uno usa un Arduino (ATmega328P) como microcontrolador, mientras que el otro usa el Pico 2 (RP2350). El Pico es mucho más potente pero es más nuevo y por lo tanto tiene menos soporte en cuanto a librerías, información y ayuda general.
Además, el Starter Kit basado en Pico viene con una pantalla TFT que tiene mucha mayor resolución (y color), comparado con la pantalla LCD del kit basado en Arduino. Sin embargo, es un poco más fácil escribir código para la pantalla LCD.
El kit Pico tiene más LEDs incluyendo LEDs RGB, y más sensores como sensor de gas, sensor Hall y un sensor táctil. También tiene un motor de vibración que el kit Arduino no tiene. Y el kit Pico tiene cuatro botones, mientras que el kit Arduino solo tiene uno.
Por otro lado, el kit Pico no tiene interfaces Crowtail ni pines GPIO expuestos que puedan usarse para conectar sensores externos, como el sensor de humedad que viene con el kit Arduino.
Ambos Starter Kits tienen pines GPIO y direcciones I2C para los sensores y actuadores etiquetados en la serigrafía (panel), lo cual es muy útil al escribir el código de control.
Aparte de la pantalla TFT del kit Pico, puedes escribir código muy similar y construir muchos proyectos similares con ambos kits, ya que los sensores son en gran parte los mismos y pueden programarse de la misma manera.
Conclusiones
Ambos kits son geniales si quieres aprender a escribir código Arduino para leer datos de sensores y controlar actuadores. Sin embargo, los tutoriales y ejemplos de código proporcionados podrían ser mejores. Especialmente el código de ejemplo para el Starter Kit basado en Pico viene como un gran bloque de código y no está dividido en tutoriales individuales para cada sensor.
El objetivo de ambos Starter Kits es claramente proporcionar una plataforma de hardware fácil para la educación STEM y en eso tienen éxito. Son fantásticos si quieres probar y jugar rápidamente con diferentes sensores o actuadores. El formato de maleta es muy práctico y no tienes que preocuparte por perder cables o sensores.
Por otro lado, no aprenderás a construir un circuito tú mismo. Los circuitos internos de los kits son más complejos (más robustos) de lo que uno construiría para fines educativos y por lo tanto no son ejemplos adecuados para principiantes. Aunque tener los esquemas de ambos kits es muy útil.
Si quieres una plataforma de hardware para educación STEM, yo optaría por el kit basado en Arduino, ya que el Arduino (ATmega328P) tiene mejor soporte que el Pico y la pantalla LCD es más fácil de usar.
Sin embargo, si el enfoque está más en efectos de iluminación o desarrollo de juegos, el kit basado en Pico es la mejor opción debido a las tiras de LEDs RGB, la pantalla TFT y los cuatro botones que pueden usarse para el control de juegos. Además, si prefieres MicroPython, el Pico con mayor potencia de cálculo y memoria es lo que buscas.
¡Feliz bricolaje ; )

