Aprende a dominar el uso de un botón en Arduino con la resistencia pull up interna, evitando cortos, ahorrando componentes y controlando un LED como salida. Además, recuerda las bases vistas: lectura analógica con potenciómetro y PWM para brillo de LED y futura velocidad de motor. Con estas prácticas, tus proyectos serán más limpios y confiables.
¿Cómo funciona la resistencia pull up con un botón en Arduino?
La resistencia pull up asegura que la entrada digital tenga un estado estable siempre. Con el botón conectado entre el pin y tierra, al presionar se crea el camino de menor resistencia hacia GND y la lectura es 0, es decir, estado bajo o low. Al soltar, el circuito se abre y la entrada “sube” a VCC, lectura 1, estado alto o high.
La corriente toma el camino de menor resistencia. Por eso, al presionar, va a GND.
La resistencia evita un cortocircuito entre VCC y GND. Sin ella, el consumo sería alto y dañino.
Valores típicos mencionados: 5 a 10 kΩ para pull up externo cuando se usa fuera del microcontrolador.
Nivel de referencia común: 5 V en Arduino Uno.
Con pull up la lógica queda invertida: presionar equivale a low; soltar equivale a high.
¿Cómo activar INPUT_PULLUP y cablear el push button al LED?
El microcontrolador Atmel del Arduino Uno incluye resistencias pull up internas en pines digitales. Así se evita montar una resistencia externa: solo conecta el botón del pin digital a GND y activa la configuración por código con INPUT_PULLUP.
Conecta el botón entre pin digital y GND. Sin resistencia externa.
Usa el LED interno en el pin 13 y el botón en el pin 12 para simplificar.
Carga el sketch antes de cablear: los pull ups se activan por código.
Evitas ocupar espacio en protoboard y ahorras pads en tu PCB.
Ejemplo mínimo funcional en Arduino:
constint LED1 =13;// LED interno.constint BOTON1 =12;// Botón entre pin y GND.voidsetup(){pinMode(BOTON1, INPUT_PULLUP);// Activa resistencia pull up interna.pinMode(LED1, OUTPUT);// LED como salida.}voidloop(){if(digitalRead(BOTON1)== LOW){// Presionado lee LOW.digitalWrite(LED1, HIGH);// Enciende LED.}else{digitalWrite(LED1, LOW);// Apaga LED.}}
Tips de implementación:
Declara pines como constantes: const int. Claridad y seguridad.
Cuida la indentación para legibilidad del código.
En comparaciones usa ==, no =. Evita el error clásico de asignación.
Verifica y compila antes de conectar el botón a GND.
¿Qué habilidades, keywords y buenas prácticas se refuerzan?
Más allá del botón, se consolidan habilidades ya vistas y esenciales para proyectos reales con Arduino.
Lectura analógica con potenciómetro: base para cualquier sensor analógico.
PWM para controlar brillo de LED y, más adelante, velocidad de motor.
Uso de la resistencia pull up interna: menos componentes y menos errores.
Cableado correcto del push button: pin digital a GND.
Manejo de funciones: pinMode, digitalRead, digitalWrite.
Lógica invertida con INPUT_PULLUP: presionar es low; soltar es high.
Corrección de errores típicos en C: usar == para comparación.
Trabajo con IDE y sketch: verificar, compilar y cargar antes de cablear.
Componentes citados: switch o push button, LED interno del pin 13, LED ultrabrillante, cables macho-hembra.
¿Quieres que en la siguiente entrega se conecte un sensor de temperatura y un LCD para leer, procesar y mostrar grados centígrados? Cuéntame en los comentarios qué sensor te interesa integrar y qué quieres visualizar en pantalla.
la pregunta es cual es la diferencia entre asignar un pin para recibir la señal del botón y encender el led.
O conectar gnd al botón y al pin negativo del led y usarlo como un interruptor
Cuando utilizas:
pinMode(2,OUTPUT) Estas diciendo que el pin 2 funcionará como una salida digital.
pinMode(2,INPUT) Estas diciendo que ese pin 2 funcionará como una entrada digital.
Cuando se utiliza:
digitalWrite(2,HIGH) Significa que el pin 2 tendrá un estado alto (un 1 lógico / +5V)
digitalWrite(2,LOW) Significa que el pin 2 tendrá un estado bajo (un 0 lógico / 0V)
Para utilizar digitalWrite() previamente se tiene que declarar el pin como salida.
el motivo por el que el led no brilla tanto es por que el profesor en el setup escribio pinmode(led1,HIGH) ¿HIGH? debe de ser OUTPUT ya que HIGH es para digitalWrite. Gracias.
Hola Jeronimo! esta en la seccion de archivos, algo que si aprovecho y te comento es que todos los pines que pueden ser entradas del arduino tienen pull ups!
A veces los botones suelen ser demasiado sensibles al ruido que generamos al pulsarlos, este efecto se es conocido como debounce y cuando se necesita pulsos precisos puede ser bastante molesto. Hay dos formas de solucionar esto, mediante software con el uso de retardos, o mediante hardware con el uso de un capacitor de 1uF (generalmente electrolítico) en paralelo al pulsante.
Las resistencias “pull-up” (y “pull-down”) son resistencias normales, solo que llevan ese nombre por la función que cumplen: sirven para asumir un valor por defecto de la señal recibida en una entrada del circuito cuando por ella no se detecta ningún valor concreto (ni ALTO ni BAJO), que es lo que ocurre cuando la entrada no está conectada a nada (es decir, está “al aire”). Así pues, este tipo de resistencias aseguran que los valores binarios recibidos no fluctúan sin sentido en ausencia de señal de entrada.
si existen las resistencias de pulldown, el botón va entre Vcc y la entrada y la resistencia va entre la entrada y tierra, el tema es que está configuración consume un poco más de corriente (fundamental cuando piensas en montar algo que usa baterías)
¿Se debe poner una resitencia en el led?, al hacer la simulacion en tinkercad indica que es necesaria, porque sino se dañaria el led externo y la tarjeta arduino
El uso del push button con código, puede servirnos para poder capturar un dato al momento de presionar. Creo que se llama pulsador. Como ejemplo, agregué el valor de a = 0 y cada vez que presionabas aumentaba en 1. Se puede ver desde el Monitor Serial.
Tuve que colocarle un delay de 400ms ya que si mantienes presionado, el valor sube sin control hasta que dejes de presionar:
const int led1 =13;const int boton1 =12;int a =0;voidsetup(){pinMode(boton1,INPUT_PULLUP);pinMode(led1,HIGH);Serial.begin(9600);}voidloop(){if(digitalRead(boton1)==LOW){digitalWrite(led1,HIGH); a = a +1;delay(400);Serial.println(a);}else{digitalWrite(led1,LOW);}}
<code>int rojo1 =11;int verde1 =10;int amarillo1 =9;int gira1 =8;int peaton1=13;int boton1 =7;int rojo2 =6;int verde2 =5;int amarillo2 =3;int gira2 =2;int peaton2=12;voidsetup(){// put your setup code here, to run once:pinMode(rojo1,OUTPUT);pinMode(verde1,OUTPUT);pinMode(amarillo1,OUTPUT);pinMode(gira1,OUTPUT);pinMode(rojo2,OUTPUT);pinMode(verde2,OUTPUT);pinMode(amarillo2,OUTPUT);pinMode(gira2,OUTPUT);pinMode(boton1,INPUT_PULLUP);}voidloop(){// put your main code here, to run repeatedly:if(digitalRead(boton1)==LOW){digitalWrite(rojo1,HIGH);digitalWrite(verde1,LOW);digitalWrite(amarillo1,LOW);digitalWrite(rojo2,HIGH);digitalWrite(amarillo2,LOW);digitalWrite(verde2,LOW);delay(5000);}else{digitalWrite(rojo1,HIGH);digitalWrite(verde1,LOW);digitalWrite(amarillo1,LOW);digitalWrite(rojo2,LOW);digitalWrite(amarillo2,LOW);digitalWrite(verde2,HIGH);delay(2000);analogWrite(rojo1,255);analogWrite(amarillo1,0);analogWrite(verde1,255);analogWrite(rojo2,255);analogWrite(amarillo2,0);analogWrite(verde2,255);delay(1500);digitalWrite(rojo1,LOW);digitalWrite(amarillo1,LOW);digitalWrite(verde1,HIGH);digitalWrite(rojo2,HIGH);digitalWrite(verde2,LOW);digitalWrite(amarillo2,LOW);delay(3000);digitalWrite(rojo1,LOW);//gira para ambos caminos giran en diferentes direccionesdigitalWrite(amarillo1,HIGH);//PRENDE EL AZUL DEL LED DE TRES ESTADOSdigitalWrite(verde1,LOW);digitalWrite(rojo2,LOW);digitalWrite(verde2,LOW);digitalWrite(amarillo2,HIGH);delay(2000);analogWrite(rojo1,255);analogWrite(amarillo1,0);analogWrite(verde1,255);analogWrite(rojo2,255);analogWrite(amarillo2,0);analogWrite(verde2,255);delay(1500);}}