EJERCICIOS DE ARQUITECTURA DE COMPUTADORAS SABADO 29
Este circuito implementa un sistema de embotellado automatizado utilizando un microcontrolador Arduino. Se simula el proceso de llenado y tapado de una botella de gaseosa mediante dos botones (S1 y S2), y un LED indica que el proceso ha sido completado exitosamente.
Componentes Utilizados
Arduino (cualquier modelo compatible)
Botón S1 (Inicio del llenado)
Botón S2 (Inicio del tapado)
LED indicador (Muestra que la botella está correctamente empacada)
Resistencias de pull-up internas (configuradas en el código para los botones)
Funcionamiento
El sistema sigue la siguiente lógica:
Se inicia en estado de espera con la botella vacía y sin tapa.
Cuando se presiona el botón S1, se simula el llenado de la botella. Se muestra un mensaje en el monitor serial indicando "Gaseosa llena".
Si la botella ya está llena y se presiona el botón S2, se simula el proceso de tapado. Se muestra un mensaje "Gaseosa tapada" en el monitor serial.
Una vez que la botella está tapada, el LED se enciende, indicando que el proceso ha concluido exitosamente y se muestra el mensaje "Gaseosa bien empacada".
Explicación del Código
El código está estructurado de la siguiente manera:
1. Definición de pines
const int S1 = 2; // Botón de llenado
const int S2 = 3; // Botón de tapado
const int LED = 13; // LED indicadorSe definen los pines de los botones y del LED.
2. Configuración inicial en setup()
void setup() {
pinMode(S1, INPUT_PULLUP);
pinMode(S2, INPUT_PULLUP);
pinMode(LED, OUTPUT);
Serial.begin(9600);
}Los botones se configuran como entradas con resistencias pull-up internas y el LED como salida. Se inicializa la comunicación serial.
3. Lógica en loop()
void loop() {
bool estadoS1 = !digitalRead(S1);
bool estadoS2 = !digitalRead(S2);Se leen los estados de los botones y se invierten porque están en configuración INPUT_PULLUP (cuando se presionan, el estado pasa a LOW).
4. Control de estado del proceso
if (estadoS1 && !llenado) {
llenado = true;
Serial.println("Gaseosa llena");
}Si el botón S1 se presiona y la botella no está llena, se cambia la variable llenado a true y se muestra el mensaje.
if (estadoS2 && llenado && !tapado) {
tapado = true;
Serial.println("Gaseosa tapada");
digitalWrite(LED, HIGH);
Serial.println("Gaseosa bien empacada");
}Si la botella ya está llena y se presiona el botón S2, se cambia la variable tapado a true, se enciende el LED y se muestran los mensajes correspondientes.
EJERCICIO CONTROL DE PARPADEO DE BOTONES
Este circuito implementa un sistema de control de parpadeo de un LED utilizando un microcontrolador Arduino. Se utilizan dos botones para ajustar la intermitencia del LED y enviar mensajes a la consola serie.
Componentes Utilizados
Arduino (cualquier modelo compatible)
Botón S1 (Aumenta el tiempo de intermitencia)
Botón S2 (Envía un mensaje y permite reiniciar la intermitencia)
LED indicador (Parpadea con la frecuencia ajustada por S1)
Resistencias de pull-up internas (configuradas en el código para los botones)
Funcionamiento
El sistema sigue la siguiente lógica:
Al presionar el botón S1, la variable
tiempoIntermitenciaincrementa en 20 milisegundos cada 200 milisegundos mientras se mantiene presionado.Al presionar el botón S2, se imprime "Hola Mundo" en el monitor serial y espera a que se suelte.
El LED parpadea con el tiempo definido por la variable
tiempoIntermitencia.Si ambos botones S1 y S2 se presionan simultáneamente,
tiempoIntermitenciase reinicia a 0 y se imprime "Variable reiniciada" en el monitor serial.
Explicación del Código
1. Definición de pines y variables
const int botonS1 = 2;
const int botonS2 = 3;
const int led = 13;
int tiempoIntermitencia = 0; // Variable para el tiempo de parpadeoSe definen los pines de los botones y del LED, así como la variable tiempoIntermitencia.
2. Configuración inicial en setup()
void setup() {
pinMode(botonS1, INPUT_PULLUP);
pinMode(botonS2, INPUT_PULLUP);
pinMode(led, OUTPUT);
Serial.begin(9600);
}Los botones se configuran como entradas con resistencias pull-up internas y el LED como salida. Se inicializa la comunicación serial.
3. Incremento del tiempo de intermitencia
while (digitalRead(botonS1) == LOW) {
tiempoIntermitencia += 20;
Serial.println(tiempoIntermitencia);
delay(200);
}Mientras S1 esté presionado, se incrementa tiempoIntermitencia en 20 milisegundos cada 200 milisegundos.
4. Acción del botón S2
if (digitalRead(botonS2) == LOW) {
Serial.println("Hola Mundo");
delay(200);
while (digitalRead(botonS2) == LOW);
}Si S2 se presiona, se imprime "Hola Mundo" y se espera a que se suelte antes de continuar.
5. Parpadeo del LED
if (tiempoIntermitencia > 0) {
digitalWrite(led, HIGH);
delay(tiempoIntermitencia);
digitalWrite(led, LOW);
delay(tiempoIntermitencia);
}El LED parpadea con el tiempo definido por tiempoIntermitencia.
6. Reinicio de la variable
if (digitalRead(botonS1) == LOW && digitalRead(botonS2) == LOW) {
tiempoIntermitencia = 0;
Serial.println("Variable reiniciada");
delay(500);
}Si ambos botones se presionan simultáneamente, tiempoIntermitencia se reinicia a 0 y se imprime "Variable reiniciada".
EJERCICIO DE LECTURA DE POTENCIOMETRO
Este circuito utiliza un potenciómetro conectado a un microcontrolador Arduino para leer valores analógicos y convertirlos a un rango específico. La lectura se muestra en el monitor serial.
Componentes Utilizados
Arduino (cualquier modelo compatible)
Potenciómetro (para generar valores analógicos)
Conexiones a tierra y voltaje
Descripción del Funcionamiento
El sistema funciona de la siguiente manera:
Se lee el valor analógico del potenciómetro en el rango de 0 a 1023.
Este valor se mapea a un rango de 0 a 10 utilizando la función
map().El valor convertido se envía al monitor serial para su visualización.
Se introduce una pequeña pausa de 200 ms para evitar lecturas excesivamente rápidas.
Explicación del Código
1. Definición del Pin del Potenciómetro
const int potenciometro = A0; Se define el pin al que está conectado el potenciómetro.
2. Configuración Inicial
void setup() {
Serial.begin(9600);
}Se inicializa la comunicación serial a 9600 baudios para visualizar los datos en el monitor serial.
3. Lectura y Mapeo del Valor
void loop() {
int valorAnalogico = analogRead(potenciometro);
int valorMapeado = map(valorAnalogico, 0, 1023, 0, 10);
Serial.println(valorMapeado);
delay(200); // Pequeña pausa
}Se obtiene el valor analógico del potenciómetro, que varía entre 0 y 1023. Luego, se convierte a un rango de 0 a 10 usando la función map(). Finalmente, se imprime el valor convertido en el monitor serial y se introduce una pausa de 200 ms.
Este circuito implementa un juego de adivinanza utilizando un potenciómetro y un botón. El objetivo es girar el potenciómetro hasta acercarse a un número secreto dentro de un margen de tolerancia y presionar el botón para verificar si se ha acertado.
Componentes Utilizados
Arduino (cualquier modelo compatible)
Potenciómetro (para seleccionar valores analógicos)
Botón S1 (para verificar el número seleccionado)
Resistencia pull-up interna (configurada en el código para el botón)
Descripción del Funcionamiento
Se lee el valor del potenciómetro, que varía entre 0 y 1023.
El valor se muestra en el monitor serial para referencia del usuario.
Cuando se presiona el botón S1, el sistema verifica si el valor actual está dentro del rango permitido alrededor del número secreto.
Si el valor está dentro del margen definido, se muestra el mensaje "¡Adivinaste el número!" en el monitor serial.
Si el valor no está dentro del rango, se muestra el mensaje "Intenta de nuevo.".
Se introduce un pequeño retardo para evitar múltiples lecturas rápidas al presionar el botón.
Explicación del Código
1. Definición de pines y variables
const int potenciometro = A0;
const int botonS1 = 2; // Pulsador S1
const int margen = 10; // Rango de tolerancia
const int numeroSecreto = 512; // Cambia este número para elegir otro secretoSe definen los pines para el potenciómetro y el botón, además del número secreto y el margen de tolerancia.
2. Configuración Inicial
void setup() {
pinMode(botonS1, INPUT_PULLUP);
Serial.begin(9600);
}Se configura el botón como entrada con resistencia pull-up interna y se inicializa la comunicación serial.
3. Lectura del Potenciómetro
int valorLeido = analogRead(potenciometro); // Leer el valor del potenciómetro
Serial.print("Valor actual: ");
Serial.println(valorLeido); // Mostrar el valor en consolaSe obtiene el valor analógico del potenciómetro y se muestra en el monitor serial.
4. Verificación del Número Secreto
if (digitalRead(botonS1) == LOW) { // Si se presiona S1
if (valorLeido >= numeroSecreto - margen && valorLeido <= numeroSecreto + margen) {
Serial.println("¡Adivinaste el número!");
} else {
Serial.println("Intenta de nuevo.");
}
delay(500); // Pequeño retardo para evitar lecturas repetidas
}Si el botón S1 se presiona, el sistema verifica si el valor del potenciómetro está dentro del rango permitido. Si lo está, se muestra un mensaje de acierto; si no, se indica que se debe intentar de nuevo.
Comentarios
Publicar un comentario