Objetivos
En este laboratorio aprenderás a:
- Entender qué es una variable en programación.
- Usar botones físicos como entrada de información.
- Tomar decisiones con código (condicionales).
- Crear un programa interactivo.
- Conectar acciones físicas con lógica digital.
Material necesario
- Circuit Playground Express
- Cable USB
- Computadora con CircuitPython funcionando
- Programa del laboratorio anterior como referencia
Introducción
Hasta ahora, tu programa hacía algo muy simple:
👉 Encender una luz y luego apagarla.
Pero los programas reales hacen algo más interesante:
👉 reaccionan a lo que ocurre
Por ejemplo:
- Si presionas un botón → pasa algo
- Si no presionas nada → pasa otra cosa
- Si la temperatura sube → se activa un ventilador
- Si hay oscuridad → se enciende una luz
Esto se llama programación interactiva.
¿Qué es una variable?
Una variable es como una caja donde guardas información.
Imagina una caja con una etiqueta:
- “color”
- “estado”
- “contador”
Dentro puedes guardar valores que pueden cambiar.
Ejemplo:
- edad = 12
- color = “verde”
- luz_encendida = True
🧠 Curiosidad:
Las variables son como post-its digitales que la computadora puede leer y cambiar.
¿Qué es una condición?
Una condición es una pregunta que el programa se hace.
Ejemplo:
- ¿Está presionado el botón A?
- ¿El valor es mayor que 10?
- ¿La luz está encendida?
Dependiendo de la respuesta:
- SI → hago algo
- NO → hago otra cosa
Conociendo la interacción de la placa
En este laboratorio usaremos:
- Botón A
- Botón B
- NeoPixels
🔘 Botones A y B
Los botones son como interruptores de decisión.
Ejemplo mental:
- Botón A → “acción positiva”
- Botón B → “acción diferente”
🔵 NeoPixels como respuesta
Las luces ahora no solo se encienden:
👉 reaccionan a lo que tú haces
Nuestro segundo programa
Vamos a crear un programa donde:
- Si presionas el botón A → luz verde
- Si presionas el botón B → luz roja
- Si no presionas nada → luz apagada
Código completo
import time
from adafruit_circuitplayground import cp
VERDE = (0, 255, 0)
ROJO = (255, 0, 0)
APAGADO = (0, 0, 0)
cp.pixels.brightness = 0.2
while True:
if cp.button_a:
cp.pixels[0] = VERDE
elif cp.button_b:
cp.pixels[0] = ROJO
else:
cp.pixels[0] = APAGADO
time.sleep(0.1)
Explicación del código
1. Bucle infinito
while True:
Esto significa:
👉 “repite esto para siempre”
Es como un videojuego que nunca se detiene.
2. Leer el botón A
if cp.button_a:
Esto pregunta:
👉 ¿El usuario está presionando el botón A?
Si la respuesta es sí → entra aquí.
3. Encender luz verde
cp.pixels[0] = VERDE
Si presionas el botón A, la luz se vuelve verde.
4. Condición alternativa (B)
elif cp.button_b:
“elif” significa:
👉 “si no fue A, entonces revisa B”
5. Luz roja
cp.pixels[0] = ROJO
Botón B → luz roja.
6. Si no haces nada
else:
cp.pixels[0] = APAGADO
Si no presionas nada:
👉 la luz se apaga
💡 Curiosidad:
Los videojuegos usan este mismo principio: botones + decisiones + resultados.
Cómo funciona físicamente
Cuando presionas un botón:
- El circuito se cierra
- La placa detecta corriente eléctrica
- El microcontrolador lo interpreta como “True”
- El programa ejecuta una acción
Es como si la placa “sintiera” tus acciones.
Retos del laboratorio
🟢 Reto 1: Tres colores, tres acciones
Modifica el programa:
- Botón A → verde
- Botón B → rojo
- Botón A + B juntos → azul
💡 Pista: para saber si están los dos botones presionados a la vez, une las dos
condiciones con and:
if cp.button_a and cp.button_b:
cp.pixels[0] = AZUL
💡 Objetivo: aprender combinaciones de condiciones.
🟡 Reto 2: Modo semáforo
Haz un sistema tipo semáforo:
- A → verde (avanzar)
- B → rojo (detener)
- Sin botones → amarillo (espera)
💡 Objetivo: lógica aplicada a situaciones reales.
🔴 Reto 3: Mensaje oculto
Haz que:
- Botón A → encienda luz en posición 0
- Botón B → encienda luz en posición 9
💡 Objetivo: controlar diferentes LEDs.
🍎 Proyecto: convierte una fruta en un botón
Hasta ahora usaste los botones A y B de la placa. Pero… ¿y si te dijéramos que
puedes convertir un plátano en un botón?
👉 En este proyecto vas a crear botones usando objetos cotidianos, como frutas.
Esto se llama toque capacitivo, y es la misma tecnología que usan las pantallas
de los celulares.
🧪 Material extra para este proyecto
- Cables con pinzas de cocodrilo
- Una o varias frutas (plátano, manzana, naranja…)
También puedes probar con otros objetos: una cuchara de metal, una moneda, agua…
⚡ Principio físico: el toque capacitivo
Tu cuerpo guarda pequeñas cargas eléctricas.
La placa mide algo llamado capacitancia en unos puntos especiales llamados
pads de toque. Cuando tocas uno de esos pads:
👉 tu cuerpo cambia esa capacitancia y la placa lo detecta como un toque.
No necesitas apretar nada: basta con tocar.
¿Y por qué funciona una fruta? Porque las frutas tienen agua y sales, y eso
conduce la electricidad. Al conectar la fruta al pad con un cable, la fruta se
convierte en una “extensión” del pad:
👉 tocar la fruta es como tocar el pad.
💡 Curiosidad:
Los objetos que conducen electricidad (frutas, metal, agua) pueden ser botones.
Los que no conducen (plástico, madera seca) no funcionan.
🔌 Cómo se implementa en Circuit Playground Express
La placa tiene 7 pads de toque en su borde, marcados A1 a A7.
En el código se leen así:
cp.touch_A1
cp.touch_A2
cp.touch_A3
Cada uno devuelve True cuando lo tocas (o cuando tocas la fruta conectada a él).
Pasos para conectar una fruta:
- Conecta un extremo del cable con pinza de cocodrilo al pad (por ejemplo, A1).
- Conecta el otro extremo a la fruta (clávalo en un plátano).
- Con todo ya conectado, reinicia el programa (guarda
code.pyotra vez o pulsa
reset). La placa se calibra al arrancar, así que si conectas las pinzas después
creerá que ya la estás tocando. Conecta primero, arranca después. - Al tocar el plátano,
cp.touch_A1se vuelveTrue.
🔧 Notas:
- El pad A0 no sirve para toque (se usa para sonido). Usa de A1 a A7.
Si lo pides en el código (cp.touch_A0), la placa dará el errorAttributeError: 'Express' object has no attribute 'touch_A0'.- A diferencia de otros kits, aquí no necesitas un cable de tierra: el toque
funciona solo con tu cuerpo.- Si aun así se enciende solo, baja la sensibilidad con
cp.adjust_touch_threshold(200)
al inicio (número más alto = menos sensible; prueba 100, 200, 300…).
Código de ejemplo
Tres frutas, tres colores:
import time
from adafruit_circuitplayground import cp
VERDE = (0, 255, 0)
ROJO = (255, 0, 0)
AZUL = (0, 0, 255)
APAGADO = (0, 0, 0)
cp.adjust_touch_threshold(200) # menos sensible (evita falsos toques)
cp.pixels.brightness = 0.2
while True:
if cp.touch_A1:
cp.pixels.fill(VERDE)
elif cp.touch_A2:
cp.pixels.fill(ROJO)
elif cp.touch_A3:
cp.pixels.fill(AZUL)
else:
cp.pixels.fill(APAGADO)
time.sleep(0.1)
Explicación del código
1. Leer un pad de toque
if cp.touch_A1:
Pregunta: ¿estás tocando la fruta conectada al pad A1?
2. Encender todas las luces
cp.pixels.fill(VERDE)
fill es un atajo nuevo: enciende todas las luces de golpe con el mismo color,
sin escribirlas una por una.
3. Otras frutas
elif cp.touch_A2:
cp.pixels.fill(ROJO)
Cada fruta enciende un color distinto.
4. Sin tocar nada
else:
cp.pixels.fill(APAGADO)
Si no tocas ninguna fruta, las luces se apagan.
🔧 Retos del proyecto
🟢 Reto 1: Cuarta fruta
Conecta una cuarta fruta al pad A4 y haz que encienda un color nuevo
(por ejemplo, amarillo).
💡 Objetivo: ampliar el sistema con más entradas.
🟡 Reto 2: Piano de frutas
Haz que cada fruta suene como una nota musical usando:
cp.play_tone(262, 0.3) # 262 Hz = nota Do
Notas de la escala de Do (en Hz):
- Do = 262
- Re = 294
- Mi = 330
- Fa = 349
- Sol = 392
- La = 440
- Si = 494
- Do (alto) = 523
La placa tiene 7 pads de toque (A1–A7), así que puedes asignar 7 frutas (de Do a Si).
Para completar la octava, usa un botón (A o B) para el Do alto.
Código completo del piano de frutas:
import time
from adafruit_circuitplayground import cp
cp.adjust_touch_threshold(200) # menos sensible (evita falsos toques)
cp.pixels.brightness = 0.2
while True:
if cp.touch_A1:
cp.pixels.fill((255, 0, 0)) # rojo
cp.play_tone(262, 0.3) # Do
elif cp.touch_A2:
cp.pixels.fill((255, 128, 0)) # naranja
cp.play_tone(294, 0.3) # Re
elif cp.touch_A3:
cp.pixels.fill((255, 255, 0)) # amarillo
cp.play_tone(330, 0.3) # Mi
elif cp.touch_A4:
cp.pixels.fill((0, 255, 0)) # verde
cp.play_tone(349, 0.3) # Fa
elif cp.touch_A5:
cp.pixels.fill((0, 255, 255)) # cian
cp.play_tone(392, 0.3) # Sol
elif cp.touch_A6:
cp.pixels.fill((0, 0, 255)) # azul
cp.play_tone(440, 0.3) # La
elif cp.touch_A7:
cp.pixels.fill((255, 0, 255)) # magenta
cp.play_tone(494, 0.3) # Si
elif cp.button_a:
cp.pixels.fill((255, 255, 255)) # blanco
cp.play_tone(523, 0.3) # Do alto
else:
cp.pixels.fill((0, 0, 0)) # apagado
time.sleep(0.05)
Cada nota enciende un color distinto y suena con cp.play_tone. El Do alto se
toca con el botón A.
💡 Objetivo: combinar toque con sonido y crear un instrumento.
🔴 Reto 3: Detector de materiales
Prueba a conectar distintos objetos y descubre cuáles funcionan como botón:
- fruta, agua, cuchara de metal, moneda…
- plástico, madera seca, goma…
💡 Objetivo: entender qué materiales conducen la electricidad.
🔴 Reto avanzado: Combinación secreta
Haz que solo se “desbloquee” cuando se tocan dos frutas a la vez.
Para comprobar dos condiciones al mismo tiempo se usa la palabra and:
if cp.touch_A1 and cp.touch_A2:
cp.pixels.fill((0, 255, 0)) # verde: desbloqueado
else:
cp.pixels.fill((255, 0, 0)) # rojo
💡 Objetivo: combinar dos condiciones con and.
🔒 ¿Y una clave por orden (A1 → A2 → A1)?
Esa es más difícil: la placa tiene que recordar por dónde vas en la secuencia.
Para eso hacen falta los estados, que verás en el Laboratorio 8. ¡Ahí está el reto!
Resumen del laboratorio
En este laboratorio aprendiste:
- Qué es una variable y cómo almacena información.
- Cómo funcionan los botones como entrada física.
- Qué es una condición en programación.
- Cómo crear programas interactivos.
- Cómo la placa reacciona en tiempo real a tus acciones.
- Cómo convertir objetos cotidianos (¡hasta frutas!) en botones con el toque capacitivo.
Ahora tu programa ya no solo ejecuta instrucciones:
👉 ahora toma decisiones contigo
Valentina Tech