Vas a leer un TMP36 por A0 y pasar la tensión a grados Celsius con la fórmula (analogRead * 5.0 / 1023.0 - 0.5) * 100. Esa cuenta supone la referencia de 5 V de la Uno, así que no la cambies por 3,3 V. El número sale en el monitor serie a 9600 baudios y debe subir si calientas el encapsulado con el dedo.
Vas a medir temperatura y humedad con un DHT11 y la librería DHT, llamando a readTemperature y a readHumidity. El pin de datos, D2, lleva una resistencia de pull-up de 10k hacia 5 V porque el sensor suelta la línea entre bits. Las dos cifras salen por el monitor serie a 9600 baudios, con unos dos segundos entre muestras.
10k entre DATA y 5 V. Si el módulo ya trae la pull-up, no pongas otra.
La franja sale del catálogo de Hardware. No es un precio de tienda.
Cableado
Código
// AP-BIR-02 DHT11 en D2 con pull-up de 10k a 5 V.
// Librería DHT: instálala en el gestor del IDE. No lleva URL.
#include <DHT.h>
const int pinDht = 2;
DHT dht(pinDht, DHT11);
void setup() {
Serial.begin(9600);
dht.begin();
delay(2000);
}
void loop() {
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
Serial.println("Lectura no valida: revisa DATA, la pull-up y el tipo DHT11");
} else {
Serial.print("Temperatura C: ");
Serial.print(t, 1);
Serial.print(" Humedad %: ");
Serial.println(h, 1);
}
delay(2000);
}
Pasos
Instala la librería DHT desde el gestor de librerías del IDE y reinicia el IDE si no aparece la cabecera.
Alimenta el DHT11 entre 5 V y GND.
Une DATA a D2 y coloca 10k entre DATA y 5 V. Si tu módulo ya trae esa resistencia, no añadas otra.
Elige la placa Arduino Uno (R3 o CH340) y carga el programa.
Abre el monitor serie a 9600 baudios y espera el primer par de segundos.
Sopla suave cerca del sensor: la humedad relativa debe moverse, la temperatura casi no.
Variantes
Cambia el texto de salida para imprimir solo un decimal, que es la resolución real del DHT11.
Guarda la última humedad válida y no borres la cifra cuando una muestra falle.
Añade un LED en otro pin que se encienda si la humedad pasa un umbral que tú elijas.
Depuración
Sin pull-up de 10k a 5 V la línea de datos se queda flotando y readTemperature o readHumidity devuelven NaN.
Leer más rápido que cada dos segundos satura al DHT11: parece un fallo del cable y es el ritmo.
Constructor con DHT22 en un sensor DHT11: los números salen disparados o siempre no válidos. El segundo argumento tiene que ser DHT11.
DATA en un pin que no es el 2, o VCC en 3,3 V en un módulo que no regula: el programa compila igual y no mide.
Vas a medir una distancia en centímetros con el HC-SR04 sin librería. Generas un pulso corto de disparo en el trig por D9 y mides cuánto dura el eco en D8 con pulseIn. Ese tiempo se pasa a centímetros y se imprime en el monitor serie a 9600 baudios.
Vas a hacer que un servo recorra de 0 a 180 grados y vuelva, sin potenciómetro. El pulso lo genera la cabecera Servo.h que ya trae el núcleo del IDE: no instales otra librería. Verás el barrido completo y el tope mecánico del engranaje, que no siempre llega al número que escribes.
SG90 o similar de 5 V. Un solo servo puede salir del regulador de la Uno.
La franja sale del catálogo de Hardware. No es un precio de tienda.
Cableado
Código
// AP-BIR-04 Barrido 0 a 180 con Servo.h del núcleo. Señal en D9.
#include <Servo.h>
Servo barrido;
const int pinServo = 9;
void setup() {
barrido.attach(pinServo);
}
void loop() {
for (int ang = 0; ang <= 180; ang += 1) {
barrido.write(ang);
delay(15);
}
for (int ang = 180; ang >= 0; ang -= 1) {
barrido.write(ang);
delay(15);
}
}
Pasos
Identifica los tres cables del servo: alimentación, masa y señal. En el SG90 suelen ser rojo, marrón y naranja.
Une alimentación a 5 V, masa a GND y señal a D9.
Deja el cuerno libre de chocar con la mesa en ambos extremos.
Comprueba que el programa incluye Servo.h del núcleo, sin librerías añadidas.
Carga el programa en la Uno (R3 o CH340).
Observa un viaje de 0 a 180 y la vuelta. Si la placa se reinicia al arrancar, el servo pide más corriente de la que da el USB.
Variantes
Recorre solo de 30 a 150 grados para no forzar el tope mecánico del SG90.
Para dos segundos en 0, 90 y 180 y así marcas el centro.
Cambia el retardo de 15 ms y compara un barrido lento con uno más nervioso.
Depuración
Señal en un pin que no es el 9, o attach a otro número: el servo no se mueve y el programa no avisa.
Masa y alimentación cruzadas: el servo no gira y puede calentarse. Corta la alimentación antes de insistir.
El USB no aguanta el pico de corriente y la Uno se reinicia a mitad del barrido. Un servo, o 5 V externos con la masa unida.
Pides 0 y 180 y el brazo no llega porque el mecanismo interno ya hace tope: no es un fallo del pulso.
Vas a mandar el ángulo de un servo con un potenciómetro leído en A0. La cuenta de 0 a 1023 se traduce a un ángulo de 0 a 180 y se envía con Servo.h, la cabecera que trae el núcleo. Al girar el cursor, el cuerno sigue la posición sin dar saltos grandes.
Vas a encender un solo dígito en un display de 7 segmentos de cátodo común. Cada segmento tiene su resistencia y entra por un pin, de D2 a D8, en el orden a, b, c, d, e, f y g. El programa fija un número para que veas la máscara antes de poner el display a contar.
Vas a contar de 0 a 9 en el display de 7 segmentos de cátodo común, con los mismos pines D2 a D8 de la práctica del dígito fijo. El cambio de cifra lo marca millis, así el programa sigue libre para otra tarea y no se queda dormido en un retardo. Al pasar de 9 la cuenta vuelve a 0.
Vas a mover un punto de luz por ocho LED usando un 74HC595, sin librería de registro. Los datos entran por DS en D11, el reloj de desplazamiento SHCP por D12 y el cerrojo STCP por D8. shiftOut empuja un byte y un pulso en el cerrojo lo publica en Q0 a Q7.
Vas a leer una tecla de un teclado de membrana 4×4 sin la librería Keypad, barriendo filas y columnas tú mismo. Las filas salen por D2 a D5 y las columnas entran por D6 a D9 con INPUT_PULLUP. Cuando una columna cae a nivel bajo, el carácter se imprime en el monitor serie a 9600 baudios.
Vas a tocar una escala de do mayor en un zumbador pasivo con tone, subiendo de nota en nota. Cada frecuencia suena un momento y luego se corta, para que el oído separe los grados. Si el zumbador es activo solo oirás un pitido fijo: esta práctica necesita el pasivo, el que no trae oscilador dentro.
Vas a guardar una melodía corta en dos arrays: uno con las frecuencias y otro con la duración de cada figura. El bucle recorre las dos tablas a la vez y llama a tone en el zumbador pasivo. Un cero en la tabla de notas es un silencio, así la pausa vive dentro del propio array.
Vas a distinguir si un sensor de inclinación está en reposo o volcado. Es un contacto, así que se lee en D2 con INPUT_PULLUP: cerrado contra masa significa inclinado y abierto significa en reposo. El estado se escribe en el monitor serie a 9600 baudios, con una pausa corta para no llenar la pantalla de rebotes.
Vas a saber si una puerta está abierta o cerrada con un reed y un imán. El contacto se lee en D2 con INPUT_PULLUP y, con el imán cerca, cae a nivel bajo: eso lo tomamos como puerta cerrada. Un LED repite el estado en la mesa y el monitor serie a 9600 baudios escribe la frase.
Vas a detectar un obstáculo cercano con un módulo de infrarrojos digital, no una distancia en centímetros. La salida entra por D2 y, en la mayoría de estas placas, baja a nivel bajo cuando hay algo delante. El monitor serie a 9600 baudios dice si el camino está libre o hay obstáculo.
Módulo de obstáculo con salida digital. Lleva un tornillo de alcance.
La franja sale del catálogo de Hardware. No es un precio de tienda.
Cableado
Código
// AP-BIR-14 Obstáculo IR digital en D2.
// En la mayoría de módulos, LOW significa que hay algo delante.
const int pinIr = 2;
void setup() {
pinMode(pinIr, INPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(pinIr) == LOW) {
Serial.println("Obstaculo");
} else {
Serial.println("Libre");
}
delay(120);
}
Pasos
Alimenta el módulo entre 5 V y GND y une OUT a D2.
No uses el receptor de un mando: esta práctica es el módulo de obstáculo, con emisor y receptor juntos.
Carga el programa en la Uno R3 o CH340 y abre el monitor serie a 9600 baudios.
Apunta a un espacio vacío. Si dice obstáculo sin nada delante, gira un poco el tornillo.
Pon la mano a unos 8 cm y mira el cambio de frase.
Prueba una superficie negra y otra blanca: el alcance no es el mismo, y eso es del óptico, no del código.
Variantes
Invierte la frase si tu módulo entrega HIGH al detectar, después de comprobarlo con la mano.
Enciende el LED de D13 solo mientras haya obstáculo.
Cuenta transiciones de libre a obstáculo para saber cuántas veces ha pasado algo.
Depuración
OUT desconectado: D2 flota y la frase parpadea. La salida del módulo es activa; únela de verdad.
El tornillo de alcance está a tope y el módulo ve obstáculo siempre, o nunca. Ajusta antes de cambiar el programa.
Superficie negra o cristal: el infrarrojo no vuelve y crees que D2 está mal. Prueba con la palma de la mano.
Has cruzado VCC y OUT, o lees otro pin: el monitor serie no sigue a la mano. El programa espera el dato en D2.
Vas a arrancar un motor de continua solo mientras mantienes un pulsador. Un transistor conmuta la corriente y un diodo frena el pico al cortar. La alimentación del motor va aparte: la placa solo manda la base del transistor a través de una resistencia, y el pin de la Uno no alimenta el motor.
220 a 1000 ohmios entre D3 y la base. No unas la base directo al pin.
La franja sale del catálogo de Hardware. No es un precio de tienda.
Cableado
Código
// AP-BIR-15 Motor con transistor. Pulsador en D2, base en D3.
// El motor NO se alimenta del pin: pila aparte, masa común, diodo en antiparalelo.
// Raya del diodo hacia el positivo de la pila. Resistencia entre D3 y la base.
const int pinBoton = 2;
const int pinBase = 3;
void setup() {
pinMode(pinBoton, INPUT_PULLUP);
pinMode(pinBase, OUTPUT);
digitalWrite(pinBase, LOW);
}
void loop() {
if (digitalRead(pinBoton) == LOW) {
digitalWrite(pinBase, HIGH);
} else {
digitalWrite(pinBase, LOW);
}
}
Pasos
Corta la pila del motor mientras cableas. No la conectes al conector de 5 V de la Uno.
Pon el pulsador entre D2 y GND.
Pon la resistencia entre D3 y la base. Emisor a GND de la placa.
Negativo de la pila a ese mismo GND. Positivo de la pila a un borne del motor. El otro borne, al colector.
Coloca el diodo en antiparalelo con el motor, raya hacia el positivo de la pila.
Carga el programa en la Uno R3 o CH340, conecta la pila y mantén el pulsador: el motor gira solo mientras lo pulsas.
Suelta el pulsador y comprueba que el motor para. Si la placa se reinicia, el motor está chupando del USB.
Variantes
Invierte los dos bornes del motor, con la pila desconectada, para cambiar el sentido.
Añade un segundo pulsador que impida el arranque si no está pulsado, como un permiso.
Pasa la base a un PWM suave en D3 solo después de ver que el transistor y el diodo van bien.
Depuración
Motor enchufado a un pin o al 5 V de la Uno: la placa se reinicia o el pin se daña. La alimentación del motor va aparte.
Sin diodo, o con la raya al revés: al soltar el pulsador el transistor encaja el pico. Raya al positivo de la pila.
Sin masa común entre la pila y la Uno el transistor no tiene referencia y el motor no gira.
Base unida a D3 sin resistencia, o emisor y colector cambiados: el pin sufre o el motor no arranca.
Vas a conmutar un circuito de baja tensión, entre 5 y 12 V, con un módulo de relé mandado por un pin digital. La carga de esta práctica es un LED con su resistencia. No se toca la red de casa: los contactos del relé no ven un enchufe ni una lámpara de la instalación.
La franja sale del catálogo de Hardware. No es un precio de tienda.
Cableado
Código
// AP-BIR-16 Relé en D8. Solo conmuta 5 a 12 V.
// No se toca la red de casa. Carga de prueba: LED con resistencia en NO.
// Módulo típico activo a nivel bajo: HIGH = suelto, LOW = armado.
const int pinRele = 8;
void setup() {
pinMode(pinRele, OUTPUT);
digitalWrite(pinRele, HIGH);
}
void loop() {
digitalWrite(pinRele, LOW);
delay(1000);
digitalWrite(pinRele, HIGH);
delay(1000);
}
Pasos
Aparta cualquier cable de red. En esta práctica no se toca la red de casa.
Alimenta el módulo: VCC a 5 V, GND a masa, IN a D8.
En el borne de tornillo usa solo COM y NO para un circuito de 5 a 12 V.
Aquí COM va a 5 V de la placa y NO al LED con resistencia. Deja NC sin usar.
Carga el programa en la Uno R3 o CH340.
Cada segundo debes oír el clic y ver el LED de prueba encenderse y apagarse.
Si el clic va al revés del LED, estás en NC o el módulo es activo a nivel alto: corrige el borne o la lógica, sin subir de 12 V.
Variantes
Sustituye el parpadeo por un pulsador en D2 que arme el relé solo mientras lo mantienes.
Pasa la carga de 5 V a una pila de 9 o 12 V, con masa común, y deja el LED con su resistencia. Sigue sin red.
Escribe el estado en el monitor serie a 9600 cada vez que cambies el pin, para separar el clic del LED.
Depuración
Has llevado la red de casa al borne: para y desconecta. No se toca la red de casa; este relé de práctica solo conmuta 5 a 12 V.
Módulo activo a nivel bajo y el programa deja el pin en HIGH: no hay clic y crees que D8 está mal. Prueba el nivel contrario.
LED en NC en lugar de NO: luce en reposo y se apaga cuando el relé arma. No es un fallo de la bobina.
VCC del módulo suelto o el puente de la bobina quitado: el pin cambia y no oyes nada. La bobina también necesita 5 V y masa.
Vas a mezclar color en un LED RGB de cátodo común con tres PWM: rojo en D3, verde en D5 y azul en D6. analogWrite fija cada canal entre 0 y 255 y el ojo suma la luz. El cátodo común va a masa; si lo llevas a 5 V el LED no enciende como esperas.
Vas a leer los dos ejes de un joystick y el pulsador del mango. VRx entra por A0, VRy por A1 y el pulsador SW por D2 con INPUT_PULLUP, así que pulsado es nivel bajo. Las tres lecturas salen en una sola línea del monitor serie a 9600 baudios.
Vas a escribir un texto de dos líneas en un LCD 16×2 con mochila I2C, usando LiquidCrystal_I2C en la dirección 0x27. En la Uno, SDA es A4 y SCL es A5. Tras init y backlight debes ver el mensaje, señal de que el bus y el contraste responden.
Vas a imprimir cada muestra en una sola línea del monitor serie: el tiempo de millis, la temperatura del TMP36 y la posición de un potenciómetro. Una fila es una muestra, así puedes copiar el texto sin recomponer columnas a mano. La puerta serie va a 9600 baudios y la fórmula del TMP36 es la misma de la práctica de temperatura.
La franja sale del catálogo de Hardware. No es un precio de tienda.
Cableado
Código
// AP-BIR-20 Una línea por muestra: millis, TMP36 en A0, potenciómetro en A1.
// Monitor serie a 9600. Separador ';' para copiar la columna.
const int pinTmp = A0;
const int pinPot = A1;
unsigned long ultima = 0;
void setup() {
Serial.begin(9600);
Serial.println("ms;tempC;pot");
}
void loop() {
unsigned long ahora = millis();
if (ahora - ultima >= 500) {
ultima = ahora;
int cruda = analogRead(pinTmp);
float tempC = (cruda * 5.0 / 1023.0 - 0.5) * 100.0;
int pot = analogRead(pinPot);
Serial.print(ahora);
Serial.print(';');
Serial.print(tempC, 1);
Serial.print(';');
Serial.println(pot);
}
}
Pasos
Cablea el TMP36: Vs a 5 V, GND a masa, Vout a A0.
Cablea el potenciómetro: extremos a 5 V y GND, cursor a A1, no a A0.
Carga el programa en la Uno R3 o CH340.
Abre el monitor serie a 9600 baudios y espera la cabecera ms;tempC;pot.
Comprueba que cada muestra ocupa una sola línea, con dos separadores.
Gira el potenciómetro y calienta el TMP36: solo debe cambiar su campo, sin partir la línea.
Variantes
Acorta el periodo a 200 ms o alárgalo a 2 s cambiando la comparación con millis.
Añade un cuarto campo con la lectura cruda del TMP36, sin dejar de cerrar la muestra con println.
Sustituye el punto decimal por una coma solo en el texto, si tu hoja de cálculo es de España.
Depuración
Usas println en cada campo: una muestra queda en varias líneas y ya no puedes seguir una fila. Solo el último print cierra la línea.
Cursor del potenciómetro en A0 junto al TMP36, o Vout en A1: las columnas existen pero dicen lo contrario de su cabecera.
Fórmula distinta de (lectura * 5.0 / 1023.0 - 0.5) * 100: la columna de temperatura no coincide con la práctica del TMP36.
Monitor serie a otra velocidad, o la resta de millis hecha con enteros con signo: líneas ilegibles o un periodo que se estira.