Skip to Content

Arduino vs Pico Elecrow Starter Kit

Arduino vs Pico Elecrow Starter Kit

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.

Front Panel of Arduino Starter Kit
Panel Frontal del Starter Kit Arduino (source)

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:

SensorPin GPIOI2C
I2CA5/SCLA4/SDA
UARTD0/RXD1/TX
Entrada AnalógicaA3
Entrada AnalógicaA6
IO DigitalD11
Sensor de LuzA5/SCLA4/SDA0X5C
LEDD10
BotónD7
ServoD9
PIRA2
MPU-6050A5/SCLA4/SDA0x68
ZumbadorD3
Potenciómetro LinealA0
ReléD4
Sensor de SonidoA1
Sensor Remoto IRD2
Temperatura y HumedadA5/SCLA4/SDA0X38
Sensor UltrasónicoD5_US_ECHOD6_US_TRIG
LCDA5/SCLA4/SDA0X21

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.

Select Arduino Uno in Board Manager
Selecciona Arduino Uno en Board Manager

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.

Front Panel of Pico Starter Kit
Panel Frontal del Starter Kit Pico (source)

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

File -> Preferences Menu
Menú File -> Preferences

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

Settings Tab in Preferences Dialog
Pestaña Settings en diálogo de Preferencias

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»

Add package_rp2040_index URL to board manager
Añadir URL package_rp2040_index al board manager

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í.

Install Raspberry Pi Pico/RP2040/RP2350 board
Instalar placa Raspberry Pi Pico/RP2040/RP2350

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:

Raspberry Pi Pico 2 in Bord Manager
Raspberry Pi Pico 2 en Board Manager

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 GPIOFunción
GP0_LED_BKLED_BK
GP1_PSRAM_CSSelección chip PSRAM
GP4/I2C0_SDATacto pantalla TFT
GP5/I2C0_SCL
GP2/I2C1_SDATemperatura y Humedad DHT20 (0X38) MPU-6050 (0x68) SENSOR DE LUZ (0x5C)
GP3/I2C1_SCL
GP6_SPI0_CLK_TFTPantalla TFT display
GP7_SPI0_MOSI_TFT
GP16_RS_TFT
GP17_SPI0_CS_TFT
GPIO24_TP_RST
GPIO25_TP_INT
GP26_A0_GASSensor de humo
GP27_A1_KEY4 botones
GP28_A2_POTPotenciómetros deslizantes
GP29_A3_SOUNDMódulo sensor de sonido
QSPI_SD3Memoria NORFlash W25Q64 & APS6404L PSRAM
QSPI_SCLK
QSPI_SD0
QSPI_SD2
QSPI_SD1
QSPI_SS
GPIO8_US_ECHOMódulo ultrasónico
GPIO9_US_TRIG
GPIO10_BUZZERMódulo zumbador
GPIO11_IRMódulo IR
GPIO12_RELAYMódulo relé
GPIO13_SERVOMódulo servo
GPIO14_TOUCHMódulo táctil
GPIO15_VIBMódulo motor de vibración
GPIO18_LED_REDLED
GPIO19_LED_GREENLED
GPIO20_LED_YELLOWLED
GPIO21_HALLMódulos sensor Hall
GPIO22_RGBLED 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 ; )