pyton

Programación en Python — saberes esenciales MEP / CTP
Electrónica Industrial · CTP · Programación

Programación en Python: de la consola al CircuitPython

Saberes esenciales: entorno, tipos, operadores, control de flujo, listas, tuplas, diccionarios, funciones, archivos, errores, librerías, POO, innovación e IoT / IIoT con CircuitPython. Teoría corta y ejemplos para copiar en Thonny.

1. Preparación del software

Python es un lenguaje interpretado. El estudiante escribe un archivo .py y el intérprete lo ejecuta línea por línea. En el CTP conviene un IDE simple: Thonny (también sirve para CircuitPython) o IDLE que viene con la instalación oficial.

Descarga

  • Sitio oficial: python.org → Downloads. En Windows marcar Add python.exe to PATH.
  • Thonny: thonny.org (trae su propio Python; útil si el laboratorio no deja instalar como administrador).
  • Versión recomendada de taller: 3.11 o 3.12. No usar Python 2.

Instalación

PasoQué hacerCómo comprobar
1Ejecutar el instalador. PATH activado.Reiniciar la terminal.
2Abrir CMD o PowerShell.python --version debe mostrar 3.x
3Probar el REPL.python → sale >>>
4Salir del REPL.exit() o Ctrl+Z Enter

Configuración

  • Thonny: Herramientas → Opciones → Intérprete → Python 3 local, o CircuitPython (generic) cuando haya una placa.
  • Sangría: 4 espacios. Nunca mezclar tabuladores. Thonny lo fuerza.
  • Codificación del archivo: UTF-8 (tildes y eñes).
  • Carpeta de trabajo del curso, por ejemplo Documentos/python-ctp/. Un archivo por práctica.
print("Hola, taller de Electrónica")
print(2 + 3)
Salida: Hola, taller de Electrónica 5
Falla típica de laboratorio: “python no se reconoce como comando”. El PATH no se marcó. Reinstalar o usar Thonny, que no depende del PATH del sistema.

2. Tipos de datos

Un tipo dice qué clase de valor guarda la variable y qué operaciones admite. La función nativa type() lo revela.

FamiliaTipo en PythonEjemploUso en taller
Textostr"Pico", 'LED'Nombre de sensor, mensaje serial
Numéricosint12, -3Contador, pin, samples
float3.3, 12.0Voltaje, temperatura
BooleanosboolTrue, FalsePulsador, alarma, habilitar
Secuenciaslist, tuple[1,2], (1,2)Muestras, coordenadas
Mapeodict{"V":12}Hoja de datos resumida
tension = 12          # int
rizado = 0.35         # float
placa = "Pico W"      # str
alarma = True         # bool
print(type(tension), type(rizado), type(placa), type(alarma))
Salida: <class ‘int’> <class ‘float’> <class ‘str’> <class ‘bool’>
Ojo: True y False van con mayúscula. true es un NameError. En electrónica, 1 y 0 no son lo mismo que True y False hasta que se convierten.

3. Palabras reservadas y variables

Palabras clave (no se pueden usar como nombre)

Python reserva palabras para la gramática del lenguaje. Si las usa como variable, hay SyntaxError.

import keyword
print(keyword.kwlist)

Las que más salen en 10°/11°: if elif else while for def return class import from as try except finally True False None and or not in is pass break continue global.

Manejo de variables

  • Nombre: letras, dígitos y _. No empieza con dígito. Sensible a mayúsculas: Vout ≠ vout.
  • Estilo del curso: snake_case → voltaje_salida, pin_led.
  • Asignación con =. El valor de la derecha se guarda a la izquierda.
  • Se puede reasignar y hasta cambiar de tipo (tipado dinámico).
pin_led = 25
pin_led = "GP25"      # ahora es texto; legal, pero confunde
v_in, v_out = 12.0, 5.0
print(v_in - v_out)
Salida: 7.0
No use nombres como l, O, list, type, str. Chocan con funciones nativas o se leen mal en pizarra.

4. Operadores, prioridad y conversiones

Aritméticos

OpNombreEjemploResultado
+ - *suma, resta, producto10 - 37
/división real10 / 42.5 (siempre float)
//división entera10 // 42
%módulo (resto)10 % 42
**potencia2 ** 101024

Comparación, lógicos, identidad, asignación, concatenación

FamiliaOperadoresIdea
Comparación== != < > <= >=Devuelven bool. == no es =.
Lógicosand or notCombinan condiciones.
Identidadis / is not¿Es el mismo objeto en memoria? Para None use is None.
Pertenenciain / not in¿Está en la cadena, lista o dict?
Asignación= += -= *= /= //= %= **=n += 1 equivale a n = n + 1.
Concatenación+ entre str o listas"GP" + "25" → "GP25"
v = 11.4
print(v >= 11.0 and v <= 12.6)   # rango de batería 12 V
print("LED" in "LED rojo")
print(5 == 5.0)                  # True: mismo valor
print(5 is 5.0)                  # False: no es el mismo objeto

Prioridad de operadores (de mayor a menor)

  1. () paréntesis
  2. **
  3. * / // %
  4. + -
  5. Comparaciones
  6. not
  7. and
  8. or
print(2 + 3 * 4)        # 14, no 20
print((2 + 3) * 4)      # 20
print(not False and True)

Conversiones de tipo

adc = "847"
volts = int(adc) * 3.3 / 65535
print(volts)
print(str(12) + " V")
print(bool(0), bool(5), bool(""))
Idea: int(“847”) sí; int(“12 V”) lanza ValueError. bool(0) y bool(“”) son False. Cualquier otro número o texto no vacío es True.

5. Manejo de cadenas de texto

Una cadena (str) es inmutable: los métodos devuelven otra cadena, no cambian la original.

msg = "  Sensor DHT22  "
print(len(msg))
print(msg.strip())
print(msg.lower())
print(msg.upper())
print("DHT22" in msg)
print(msg.replace("DHT22", "LM35"))
print(f"Temperatura = {26.4:.1f} °C")
print("GP25".startswith("GP"))
pines = "2,3,4,5".split(",")
print(pines)
print("-".join(pines))
Métodos clave: strip, lower/upper, replace, split, join, find, startswith, f-strings.

Ejemplo de taller — etiqueta de medición

canal = 1
v = 4.97
print(f"CH{canal}: {v:.2f} V")
CH1: 4.97 V

6. Estructuras condicionales y bucles

Indentación

Python no usa llaves. El bloque que “pertenece” a un if, for o def va sangrado 4 espacios. Si la sangría se rompe, IndentationError.

if, if-else, elif

vbat = 11.2
if vbat >= 12.4:
    estado = "cargada"
elif vbat >= 11.8:
    estado = "normal"
elif vbat >= 11.0:
    estado = "baja"
else:
    estado = "crítica — no arrancar"
print(estado)
baja

while

Repite mientras la condición sea True. Hay que cambiar la variable o el bucle no termina.

n = 3
while n > 0:
    print("tick", n)
    n -= 1
print("listo")

for, range, break y continue

for i in range(5):          # 0 1 2 3 4
    print(i, end=" ")
print()
for i in range(1, 6):       # 1 a 5
    if i == 3:
        continue            # salta este giro
    if i == 5:
        break               # sale del for
    print(i)
HerramientaQué hace
range(n)0, 1, …, n−1
range(a, b)a … b−1
range(a, b, paso)con salto (puede ser negativo)
breakSale del bucle enseguida
continuePasa al siguiente giro, no ejecuta el resto del cuerpo

7. Listas

La lista es una secuencia mutable y ordenada. Admite tipos mezclados, pero en taller se usa un solo tipo (muestras, pines, nombres).

Crear, usar, agregar y quitar

muestras = [512, 520, 498, 530]
pines = ["GP2", "GP3", "GP4"]
vacia = []
print(muestras[0], muestras[-1])     # primero y último
print(muestras[1:3])                 # rebanada: índices 1 y 2
muestras.append(505)                 # al final
muestras.insert(0, 500)              # en una posición
muestras.remove(498)                 # por valor (primera aparición)
ultimo = muestras.pop()              # saca el último
del muestras[0]                      # por índice
print(len(muestras), min(muestras), max(muestras), sum(muestras))

Ordenamiento y funciones nativas

temps = [26.1, 24.0, 27.3, 25.5]
ordenadas = sorted(temps)            # nueva lista
temps.sort(reverse=True)             # cambia la original
print(ordenadas)
print(temps)
print(temps.index(24.0))
print(temps.count(24.0))
Método / funciónEfecto
append insert extendAgregar
remove pop clearQuitar
sort / sorted / reverseOrden
len min max sumNativas que recorren la lista
index countBuscar

Promedio de 5 lecturas ADC

lecturas = [1840, 1855, 1832, 1860, 1848]
prom = sum(lecturas) / len(lecturas)
print(round(prom, 1))
1847.0

8. Matrices: concepto y operaciones

En Python básico una matriz es una lista de listas (filas). Todas las filas deben tener la misma cantidad de columnas.

A = [
    [1, 2, 3],
    [4, 5, 6],
]
print(A[1][2])          # fila 1, columna 2 → 6
filas, cols = len(A), len(A[0])
# suma elemento a elemento con B
B = [[7, 8, 9], [1, 1, 1]]
C = []
for i in range(filas):
    fila = []
    for j in range(cols):
        fila.append(A[i][j] + B[i][j])
    C.append(fila)
print(C)
[[8, 10, 12], [5, 6, 7]]

Operaciones de taller: recorrer, sumar dos matrices iguales, multiplicar por un escalar, transponer. El producto matricial completo se deja para cuando se importe numpy (12° o proyecto).

9. Tuplas

La tupla es una secuencia inmutable: una vez creada no se le agregan ni cambian elementos. Sirve para datos que no deben “moverse” (tamaño de pantalla, color RGB, pines fijos).

rgb = (255, 80, 0)
origen = (0, 0)
uno = (7,)                 # la coma hace la tupla de un solo dato
print(rgb[0], len(rgb))
print(rgb.count(0), rgb.index(80))
x, y, z = rgb              # desempaquetado
print(z)
ListaTupla
Se escribe[1, 2](1, 2)
¿Se cambia?Sí (mutable)No (inmutable)
Métodosmuchoscasi solo count e index
Usocolección que creceregistro fijo, clave de dict, return múltiple
Mutabilidad: si un objeto se puede modificar “por dentro” es mutable (list, dict). Si hay que crear otro objeto para “cambiarlo”, es inmutable (int, float, str, tuple).

10. Diccionarios

El diccionario mapea clave → valor. Las claves son únicas y, en la práctica del curso, textos o números.

sensor = {
    "nombre": "LM35",
    "unidad": "°C",
    "escala": 10.0,      # mV / °C
    "pines": (26,),
}
print(sensor["nombre"])
sensor["offset"] = 0.0
print(sensor.get("rango", "no definido"))
for clave, valor in sensor.items():
    print(clave, "=", valor)
print(list(sensor.keys()))
print(list(sensor.values()))
MétodoPara qué
d[k] / d.get(k, default)Leer. get no explota si falta la clave
d[k] = vCrear o actualizar
pop delBorrar
keys values <
Programación en Python — videos e imágenes sugeridas
Electrónica Industrial · CTP · Material audiovisual

Programación en Python: videos e imágenes sugeridas

Pulse la miniatura: se abre YouTube. No se embebe el reproductor (en archivo local el embed suele fallar). Teoría y ejemplos: programacion-python.html.

En clase: el estudiante abre el video, anota lo de Observe y vuelve a la guía. Si YouTube está bloqueado, copie el título de la tabla final. Hay dos cursos largos con capítulos (freeCodeCamp Español y HolaMundo): úselos como “salto al minuto”, no para verlos enteros en una lección.

4. Listas, tuplas, matrices y diccionarios

Listas, tuplas, conjuntos y diccionarios

FRIKIdelTO · 30:48

Observe: append / insert / remove / pop; tupla inmutable; dict se recorre con items(). Conjuntos no están en el temario: sáltelos.

Abrir en YouTube
Thonny con variables visibles

Imagen sugerida: panel Variables de Thonny al inspeccionar una lista y un dict. Busque: Thonny variables pane list.

Matriz = lista de listas. No hay video corto obligatorio: en clase armamos A[fila][col] en la pizarra y lo corren en Thonny (bloque 8 de la guía).

8. Librerías e instalación con PIP

Cómo instalar librerías: pip o conda

La Cartilla · 10:59

Observe: en el CTP use python -m pip install …. Conda no hace falta. CircuitPython no usa este pip: se copian librerías a CIRCUITPY/lib.

Abrir en YouTube
Comando de pizarra: python -m pip install --upgrade pip y luego el paquete. Thonny: Herramientas → Administrar paquetes (evita el pip “del otro Python”).
Programación en Arduino IDE — saberes esenciales MEP / CTP

1. Preparación del IDE Arduino

El IDE (entorno de desarrollo) escribe, compila y carga el programa (sketch) a la placa. En el CTP use Arduino IDE 2.x desde arduino.cc/en/software. El 1.8 todavía sirve, pero el 2 trae autocompletado y gestor de placas moderno.

Descarga e instalación

  1. Windows 64 bit, instalador oficial. Marcar Install USB driver.
  2. Primer arranque: permitir el firewall (el gestor de librerías lo necesita).
  3. Archivo → Preferencias → idioma Español → reiniciar.
  4. Carpeta de sketches, por ejemplo Documentos/Arduino-ctp/.

Configuración mínima antes de cargar

QuéDóndeTípico en taller
PlacaHerramientas → PlacaArduino UNO / Nano / Nano Every
PuertoHerramientas → PuertoCOMx en Windows
Procesador (Nano clone)Herramientas → ProcesadorATmega328P (Old Bootloader)
Arduino IDE 2

IDE 2: verificar (✓), cargar (→), selector de placa y puerto, Monitor Serie.

Falla #1 del laboratorio: “no hay puerto COM”. Causas: cable solo de carga, driver CH340/CP2102 ausente, placa china Nano con Old Bootloader. Desconecte, mire qué COM desaparece, reconecte.

2. El sketch: setup() y loop()

Un programa de Arduino es un archivo .ino. Siempre hay dos funciones obligatorias. El chip no “termina”: cuando acaba loop la vuelve a llamar.

void setup() {
  // corre UNA vez al reset o al energizar
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  // corre para siempre
  digitalWrite(LED_BUILTIN, HIGH);
  delay(300);
  digitalWrite(LED_BUILTIN, LOW);
  delay(300);
}
En UNO, LED_BUILTIN es el pin 13. En algunas ESP32 es el pin 2. No lo adivine: mire la seda de la placa.
  • void = la función no entrega un valor.
  • Cada sentencia termina en punto y coma.
  • Los bloques van entre llaves { }. La indentación no es ley como en Python, pero en taller se exige para leer.
  • Comentario de línea: //. De bloque: /* ... */.

3. Tipos de datos

En Arduino el tipo se declara. No es Python: int n = 5; no puede pasar luego a ser texto.

TipoRango típico (UNO 8 bit)Uso
booltrue / falsePulsador, alarma
byte / uint8_t0 … 255Pin, PWM
int−32768 … 32767Contador, analogRead (0–1023 cabe)
unsigned int0 … 65535Tiempos cortos
long±2 147 483 647millis() se guarda en unsigned long
floatdecimal ~6–7 dígitosVoltaje, °C. Lento en UNO
charun carácter'A'
char[] / StringtextoPrefiera arreglo de char en UNO (poca RAM)
int cuentas = 512;
float volts = cuentas * (5.0 / 1023.0);
bool alarma = volts > 3.3;
char unidad = 'V';
En UNO, int son 16 bit. Un resultado de millis() no cabe en int. Use unsigned long.

4. Variables, constantes y palabras reservadas

  • Nombre: letras, dígitos y _. No empieza con dígito. Sensible a mayúsculas.
  • Estilo de taller: pinLed o pin_led, pero sea consistente.
  • const int PIN_LED = 13; no se puede reasignar. Mejor que #define PIN_LED 13 (el define no tiene tipo).
  • Global: fuera de setup/loop. Vive todo el programa.
  • Local: dentro de una función. Muere al salir.

Palabras que no se usan como nombre: void setup loop if else for while switch case return const int float true false HIGH LOW INPUT OUTPUT INPUT_PULLUP y los nombres de las funciones del core (pinMode, delay…).

const int PIN_LED = 13;     // global, no cambia
int cuenta = 0;             // global, sí cambia

void loop() {
  int instantaneo = analogRead(A0);  // local
  cuenta++;
}

5. Operadores

FamiliaOperadoresNota de taller
Aritméticos+ - * / %5 / 2 es 2 si ambos son int. Use 5.0 / 2.
Asignación= += -= ++ --n++ suma 1
Comparación== != < > <= >=Un solo = dentro de un if es un bug clásico
Lógicos&& || !AND, OR, NOT. No son and or not de Python
Bits& | ^ << >>Útil con registros; no es prioridad de 10°
int adc = analogRead(A0);
float v = adc * 5.0 / 1023.0;
if (v >= 1.0 && v <= 4.0) {
  // rango válido
}

6. Monitor Serie y texto

El Monitor Serie (lupa / ícono de la derecha en IDE 2) es la “consola”. Baudios del sketch = baudios de la ventana. 9600 es el valor de aula.

void setup() {
  Serial.begin(9600);
}

void loop() {
  int adc = analogRead(A0);
  Serial.print("ADC=");
  Serial.print(adc);
  Serial.print("  V=");
  Serial.println(adc * 5.0 / 1023.0, 2);  // 2 decimales
  delay(300);
}

print no salta de línea; println sí. Para leer lo que escribe el estudiante en el monitor: Serial.available() y Serial.parseInt() / Serial.readStringUntil('\n').

7. Condicionales y bucles

int adc = analogRead(A0);

if (adc < 200) {
  digitalWrite(13, LOW);
} else if (adc < 800) {
  analogWrite(9, 80);          // pin PWM
} else {
  analogWrite(9, 255);
}

switch (modo) {
  case 0: break;
  case 1: digitalWrite(13, HIGH); break;
  default: break;
}

for (int i = 0; i < 5; i++) {
  digitalWrite(13, HIGH);
  delay(80);
  digitalWrite(13, LOW);
  delay(80);
}

int n = 3;
while (n > 0) {
  n--;
}

break sale del switch o del bucle. Sin break en un case, “cae” al siguiente. Un while(true) o un delay largo dentro de loop deja sorda a la placa: no lee el botón hasta que termine.

8. Arreglos (el equivalente a listas)

Arduino no trae listas ni diccionarios de Python. El arreglo tiene tamaño fijo y un solo tipo.

const int N = 8;
int muestras[N];
int pines[] = {2, 3, 4, 5};     // el compilador cuenta = 4

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(pines[i], OUTPUT);
  }
}

void loop() {
  long suma = 0;
  for (int i = 0; i < N; i++) {
    muestras[i] = analogRead(A0);
    suma += muestras[i];
    delay(10);
  }
  int promedio = suma / N;
}

Una “matriz” es un arreglo de dos índices: int A[2][3]; → A[fila][col].

Índice desde 0. pines[4] cuando hay 4 elementos es basura o un reset misterioso. No hay append.

9. Funciones: parámetros, return e indentación

float adcAVolt(int cuentas, float vref = 5.0) {
  return cuentas * vref / 1023.0;
}

void parpadear(int pin, int veces) {
  for (int i = 0; i < veces; i++) {
    digitalWrite(pin, HIGH);
    delay(80);
    digitalWrite(pin, LOW);
    delay(80);
  }
}

void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  float v = adcAVolt(analogRead(A0));
  if (v > 3.0) parpadear(13, 3);
  Serial.println(v, 2);
  delay(200);
}

Declare la función antes de usarla, o ponga solo el prototipo arriba y el cuerpo abajo. Recursión: posible, pero la pila del UNO es chica; un factorial didáctico sí, un árbol profundo no.

10. Pines digitales

FunciónQué hace
pinMode(pin, OUTPUT)Salida: LED, relé (con transistor)
pinMode(pin, INPUT)Entrada. Casi siempre con pull-up o pull-down externo
pinMode(pin, INPUT_PULLUP)Resistencia interna al 5 V. El pulsador va a GND
digitalWrite(pin, HIGH/LOW)5 V o 0 V en UNO
digitalRead(pin)Devuelve HIGH o LOW
const int PIN_BTN = 2;
const int PIN_LED = 13;

void setup() {
  pinMode(PIN_LED, OUTPUT);
  pinMode(PIN_BTN, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(PIN_BTN) == LOW) {   // presionado
    digitalWrite(PIN_LED, HIGH);
  } else {
    digitalWrite(PIN_LED, LOW);
  }
}
Arduino UNO R3

UNO R3: digitales 0–13 (PWM con ~), analógicos A0–A5, 5 V / 3.3 V / GND. Pines 0 y 1 son RX/TX: no los use si el Monitor Serie está abierto.

11. Analógico y PWM

ADC del UNO: 10 bit → analogRead entrega 0…1023 para 0…5 V (si AREF es 5 V).

V = cuentas × 5.0 / 1023.0   |   LM35: °C ≈ (V × 100) si está a 5 V y 10 mV/°C

PWM: pines con ~ (3, 5, 6, 9, 10, 11 en UNO). analogWrite(pin, 0..255) no es un DAC: es un tren de pulsos. Sirve para brillo de LED y, con MOSFET, para velocidad de motor.

int adc = analogRead(A0);
int pwm = map(adc, 0, 1023, 0, 255);
analogWrite(9, pwm);

map(x, in1, in2, out1, out2) es regla de tres con enteros. No satura sola: si x se sale, el resultado también.

12. Tiempo: delay vs millis

delay(ms) congela todo. Para leer un botón y parpadear a la vez se usa millis() (milisegundos desde el arranque, unsigned long).

unsigned long t0 = 0;
bool ledOn = false;

void loop() {
  if (millis() - t0 >= 300) {
    t0 = millis();
    ledOn = !ledOn;
    digitalWrite(LED_BUILTIN, ledOn);
  }
  // aquí puede leer el pulsador en cada giro
}
Reste millis() - t0 y compare. No escriba if (millis() == t0 + 300): se le pasa el instante exacto.

13. Librerías (el “pip” de Arduino)

Una librería es código ajeno que se incluye con #include <Nombre.h>. Se instala con Herramientas → Administrar bibliotecas (Library Manager), no con pip.

LibreríaPara qué
Servo.hServomotor SG90
LiquidCrystal.hLCD 16×2 paralelo
LiquidCrystal_I2CLCD con mochila I2C
DHT.h (Adafruit)DHT11 / DHT22
Wire.hBus I2C (viene de fábrica)
#include <Servo.h>
Servo puerta;
void setup() {
  puerta.attach(9);
}
void loop() {
  puerta.write(90);
  delay(800);
  puerta.write(0);
  delay(800);
}

Incluir de más no “pesa” tanto como en PC, pero cada objeto (Servo, SoftwareSerial) se come timers y RAM. En clones, si el Library Manager falla, se baja el .zip y se usa Croquis → Incluir biblioteca → Añadir biblioteca .ZIP.

14. Errores y fallas

TipoCuándoEjemplo
CompilaciónEl IDE no genera el .hexFalta ;, nombre mal escrito, placa incorrecta
Carga (upload)Compiló, no llegó a la placaCOM equivocado, Old Bootloader, cable
EjecuciónCargó, pero el comportamiento es raroPin malo, masa flotante, int desbordado

No hay try / except en el core de UNO. Usted valida:

int leerAdc(int pin) {
  int x = analogRead(pin);
  if (x < 0) return 0;          // no debería, pero documenta la idea
  if (x > 1023) return 1023;
  return x;
}

El Monitor Serie + un LED de “estoy vivo” evitan cazar fantasmas. Si la placa se resetea sola: alimentación débil, corto o un arreglo fuera de rango.

15. Sensores y actuadores

Sensor → magnitud a señal que el UNO entiende (0/5 V, 0–1023, pulso, I2C).

  • Analógicos: potenciómetro, LDR, LM35, NTC con divisor, ACS712.
  • Digitales: pulsador, fin de carrera, PIR, hall.
  • Tiempo de vuelo / eco: HC-SR04 (trigger + echo).
  • Bus: DHT22, DS18B20, MPU6050.

Actuador → el programa cambia el mundo.

  • LED, buzzer activo, servo SG90 (señal PWM de 50 Hz).
  • Relé o MOSFET para lámpara / ventilador / resistencia. Nunca la carga directo del pin (máx. ~20 mA en UNO).
  • Motor DC: puente H (L298N / TB6612), no el pin solo.
const int TRIG = 8, ECHO = 7;

float distanciaCm() {
  digitalWrite(TRIG, LOW); delayMicroseconds(2);
  digitalWrite(TRIG, HIGH); delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long us = pulseIn(ECHO, HIGH, 30000);   // timeout 30 ms
  if (us == 0) return -1;                 
						
Arduino IDE — videos e imágenes sugeridas
Electrónica Industrial · CTP · Material audiovisual

Arduino IDE: videos e imágenes sugeridas

Pulse la miniatura: se abre YouTube. Teoría y sketches: programacion-arduino.html.

En clase: abra el video, anote lo de Observe y vuelva a la guía. El eje del curso en español es Bitwise Ar (Arduino desde cero). Si YouTube está bloqueado, copie el título de la tabla final. Fotos locales en img-arduino/.

9. Sensores y actuadores

Entradas y salidas (visión general)

Brian Valdivieso · 5:39

Observe: sensor = leer; actuador = escribir. El pin no alimenta un motor.

Abrir en YouTube
Bitwise Ar tiene capítulos largos de sensor: ultrasónico (cap. 5 del curso extendido), LCD, DHT, LM35+LCD, servo, relé. Búsquelos por título en la tabla. En clase baste uno (HC-SR04 o LM35) y el sketch de la guía.

10. Lista para buscar si YouTube está bloqueado

TemaTítulo para buscarCanal
Instalar IDE + BlinkArduino desde cero Capítulo 2 Primer programa Instalación IDEBitwise Ar
IDE 2.0Arduino desde cero Capítulo 76 IDE 2.0 Descarga InstalaciónBitwise Ar
Puerto COMCómo reconocer placa Arduino en WindowsCaldo Tutoriales
IntroArduino desde cero Capítulo 1 IntroducciónBitwise Ar
PulsadorArduino desde cero Capítulo 3 Entradas Salidas digitales Pulsador LEDBitwise Ar
PWMArduino desde cero Capítulo 4 PWM LED PotenciómetroBitwise Ar
TiposCurso Arduino Capítulo 2 Tipos de datosBrian Valdivieso
if / for / whileCurso Arduino Capítulo 5 Estructuras de controlBrian Valdivieso
mapCurso Arduino Capítulo 6 Función mapBrian Valdivieso
Botón + ifUSA Botones en Arduino IF ELSEEdgar Pons
SerialPRINT How to view variables ArduinoEdgar Pons
LibreríasHablemos de FUNCIONES LIBRERIAS SHIELDS ArduinoEdgar Pons
ESP32 CH340Instalación ESP32 Driver CH340 Arduino IDE BLINKITC MENTOR Academy

Hoja compañera de programacion-arduino.html. Fotos en img-arduino/. Pair con la guía de Python si el grupo ve ambos entornos en la misma unidad.