Materias · 🏛️ Universidad y trabajo

Raspberry Pi

Ejercicios resueltos de Raspberry Pi paso a paso, con el error que más se comete en cada uno: GPIO y niveles lógicos de 3,3 V, Numeración de pines: BCM frente a BOARD y más. Gratis y en español.

Preguntarle al tutor de Raspberry Pi

Sin instalar nada. Puedes probar antes de crear cuenta.

Ejercicios resueltos de Raspberry Pi

Resueltos paso a paso, como te los explicaría el tutor, y con el error que más se comete.

GPIO y niveles lógicos de 3,3 V

Un sensor de barrera entrega una salida digital de 5 V y quieres leerla con una GPIO de la Raspberry Pi, que solo tolera 3,3 V. Diseña un divisor de voltaje con resistencias comerciales y comprueba que el nivel alto siga siendo válido.

Cómo se resuelve

  1. 1Antes que nada, lo que está en juego: las GPIO de la Raspberry Pi NO son tolerantes a 5 V. No hay diodo de protección hacia los 3,3 V como en otras placas; meterle 5 V daña el pin o el chip completo, y no hay reparación posible.
  2. 2Un divisor de dos resistencias da Vsal = Ventrada × R2/(R1 + R2), con R1 arriba (del sensor al nodo) y R2 abajo (del nodo a tierra). Queremos que 5 V se conviertan en algo por debajo de 3,3 V.
  3. 3La relación necesaria es R2/(R1 + R2) ≤ 3,3/5 = 0,66. Se buscan valores comerciales que cumplan con algo de margen: R1 = 1,8 kΩ y R2 = 3,3 kΩ.
  4. 4Se comprueba: Vsal = 5 × 3,3/(1,8 + 3,3) = 5 × 3,3/5,1 = 5 × 0,6471 = 3,235 V. Queda justo debajo de los 3,3 V, con margen suficiente.
  5. 5Falta verificar que ese nivel se lea como un 1 lógico. La hoja de datos del BCM garantiza el nivel alto desde 1,3 V, y la regla de diseño conservadora es apuntar a 0,6 × 3,3 = 1,98 V o más: los 3,235 V superan de sobra cualquiera de los dos umbrales.
  6. 6Última comprobación, la corriente que se le pide al sensor: I = 5 V / (1,8 kΩ + 3,3 kΩ) = 5/5.100 = 0,98 mA. Cualquier salida digital la entrega sin problema, y es lo bastante baja como para no calentar nada.

Respuesta: Divisor con R1 = 1,8 kΩ del sensor al pin y R2 = 3,3 kΩ del pin a tierra. La GPIO recibe 3,235 V, se lee como nivel alto y el sensor solo entrega 0,98 mA.

El error de siempre: Montar el divisor al revés, con 3,3 kΩ arriba y 1,8 kΩ abajo: daría 5 × 1,8/5,1 = 1,76 V. Ese valor está apenas por encima del umbral garantizado y por debajo del 0,6 × 3,3 = 1,98 V con el que se diseña, así que se queda sin margen: basta con que el sensor no entregue los 5 V exactos bajo carga, o con algo de ruido en el cable, para que la entrada empiece a leer alto o bajo según el momento. El otro error, más grave, es dar por hecho que la Pi aguanta 5 V porque un Arduino UNO sí lo hace: son chips distintos, y en la Pi eso se paga con la placa. Y ojo: el divisor sirve para bajar de 5 V a 3,3 V en una ENTRADA; para el camino contrario, o para I2C y SPI, se necesita un conversor de nivel bidireccional, no un divisor.

Numeración de pines: BCM frente a BOARD

Conectas un LED al pin físico 11 del conector de 40 pines de una Raspberry Pi y escribes este código, que corre sin dar ningún error pero no enciende el LED. ¿Qué está pasando? import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(11, GPIO.OUT) GPIO.output(11, GPIO.HIGH)

Cómo se resuelve

  1. 1La Raspberry Pi tiene dos formas de nombrar el mismo pin, y el programa está usando una mientras el montaje usa la otra.
  2. 2GPIO.BOARD numera por posición física en el conector: del 1 al 40, contándolos como están soldados en la placa.
  3. 3GPIO.BCM numera por el nombre que el chip Broadcom le da a cada línea: GPIO2, GPIO17, GPIO27… Esos números no tienen relación con la posición física.
  4. 4El código declara setmode(GPIO.BCM), así que el 11 que escribe se refiere a GPIO11, que está en el pin físico 23 y además es la señal SCLK del bus SPI.
  5. 5El LED está en el pin físico 11, que en nomenclatura BCM es GPIO17. Por eso el programa funciona sin errores pero le manda el voltaje a otro pin.
  6. 6Hay dos arreglos, y cualquiera sirve: dejar BCM y cambiar el número a 17, o dejar el 11 y cambiar el modo a GPIO.setmode(GPIO.BOARD).

Respuesta: El pin físico 11 es GPIO17 en numeración BCM. Se corrige con GPIO.setup(17, GPIO.OUT) y GPIO.output(17, GPIO.HIGH), o bien cambiando setmode a GPIO.BOARD para seguir usando el 11.

El error de siempre: Mezclar las dos numeraciones dentro del mismo proyecto: leer un tutorial que usa BOARD, copiar de otro que usa BCM y terminar con pines cruzados. La regla es escoger una y escribirla al principio del archivo. Conviene BCM, porque es la que usan gpiozero, la documentación oficial, los overlays de I2C y SPI y el comando `pinout`, que es justamente el que hay que correr en la terminal de la Pi para ver la correspondencia de la placa que uno tiene en la mano en vez de confiar en un diagrama de internet.

¿Y si tu ejercicio no es ninguno de estos?

No hace falta buscar el ejercicio exacto en internet. Trae el tuyo, o pide los que te falten.

Todo esto es gratis y sin instalar nada. Puedes probar antes de crear cuenta.

Lo que cubre

  • GPIO y niveles lógicos de 3,3 V
  • Numeración de pines: BCM frente a BOARD

Preguntas que le puedes hacer

  • GPIO y niveles lógico…Explícame «GPIO y niveles lógicos de 3,3 V» con un ejemplo práctico y dime en qué suele equivocarse la gente.
  • Numeración de pines: …Explícame «Numeración de pines: BCM frente a BOARD» con un ejemplo práctico y dime en qué suele equivocarse la gente.

Cómo enseña este tutor

Es riguroso y completo: justifica cada paso y nombra el teorema, la norma o la buena práctica que está aplicando, para que puedas citarla en tu trabajo o en el parcial.

  • · Te muestra el camino completo, no solo el resultado.
  • · Si algo no te cuadra, te lo explica otra vez de otra manera.
  • · Comprueba las cuentas con matemática simbólica antes de dártelas.
  • · Con una foto de tu cuaderno te dice dónde está el error.
  • · Te arma quizzes de lo que acabas de ver para saber si de verdad quedó.

Otras materias de Universidad y trabajo