ENTRADAS/SALIDAS DIGITALES Y ANALÓGICAS ARDUINO UNO
Claudia Constante
1. Realice un programa que permita hacer un control de nivel sencillo. Se tiene un tanque abierto
con dos válvulas (entrada y salida de agua) y tres sensores SL (nivel bajo), SM (nivel medio) y SH
(nivel alto). Si el sensor SL es activado, se debe abrir la válvula de entrada y cerrar la válvula de
salida. Esto debe ocurrir hasta que el nivel medio es detectado, entonces ambas válvulas deben
cerrarse. Si el sensor SH es activado entonces la válvula de entrada debe cerrarse y la válvula de
salida debe abrirse. Esto debe ocurrir hasta que el nivel medio es detectado.
En el presente código se trató dos casos, uno en el que SL y SM estaban activos, y el segundo en el que los tres
estaban abiertos. Pues, no se puede programar que después de que se haya finalizado el primer caso,
inmediatamente se vuelva a encender la válvula de entrada, ya que este es un efecto externo.
int SL=2;
int SM=3;
int SH=4;
int d=5; //pin para abrir
int e=7; // pin para cerrar
int Valor = 1;
int Valor0 = 0;
void setup() {
pinMode(2, INPUT); //pines de entrada para la señal de los sensores
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, OUTPUT);
pinMode(7, OUTPUT); // 2 pines de salida para abrir o cerrar las válvulas según sea el caso
digitalWrite(d, Valor);
digitalWrite(e, Valor);
void loop() {
bool leerL= digitalRead(SL); //leer los estados de los sensores
bool leerM= digitalRead(SM);
bool leerH= digitalRead(SH);
if(leerL){
if(leerL, leerM ) {
digitalWrite(d, Valor0); // si SL Y SM se activan, se cierra la valvula de entrada
digitalWrite(e, Valor);
};
};
if(leerH ) {
digitalWrite(d, Valor0);
digitalWrite(e, Valor0); // si el tercer sensor es activado se cierra la válvula de entrada y abre la de salida
};
En este circuito, el led de abajo D2 es para la válvula de salida, y el led de arriba es la válvula de entrada D1. Para
el led de salida, si está encendido, significa que está cerrado y viceversa. Para el led de entrada, que esté
encendido significa que la válvula está abierta.
Figura 1: todos los sensores sin detectar nada.
Figura 2: solo el primer sensor SL se detectó.
Figura 3: Sensores SL y SM detectan agua.
Figura 4: El sensor SH detecta el agua.
En el caso de que los tres sensores estén encendidos a la vez es posible cerrar la válvula de
entrada y abrir la de salida; sin embargo, en la simulación se observa que el led usado para
determinar cuándo se apaga o enciende una válvula solo disminuye su luminosidad. Por lo que
se optó por usar los dos casos anteriores ya mencionados.
2. Realice un programa que permita por medio de tres interruptores controlar el Duty cycle de una
señal PWM realizada de manera manual (no use las salidas preestablecidas de PWM de Arduino
Uno) con una frecuencia de 100 Hz.
Solo interruptor 1 activado, PWM con Duty cycle de 30%
Solo interruptor 2 activado, PWM con Duty cycle de 60%
Solo interruptor 3 activado, PWM con Duty cycle de 90%
El código que se uso es:
int a = 2; // Pin 1
int b = 3; // Pin 2
int c = 4; // Pin 3
int salidaPWM = 9; // Pin de salida PWM
void setup() {
// Configuración de los pines de entrada y salida pinMode(a, INPUT);
pinMode(b, INPUT);
pinMode(c, INPUT);
pinMode(salidaPWM, OUTPUT);
}void loop() {
// Lectura del estado de los interruptores
bool aActivado = digitalRead(a) ;
bool bActivado = digitalRead(b) ;
bool cActivado = digitalRead(c) ;// Cálculo del duty cycle (entre 0 a 255) en función del estado de los
interruptores
int duty = 0;
if (aActivado) {
duty = 77; // 30 % calculando 255*0.3
} else if (bActivado) {
duty = 153; // 60 %
} else if (cActivado) {
duty = 230; // 90 %
} int tiempoAlto = duty * 100; // Tiempo en que el PWM está en HIGH 100 por la frecuencia
int tiempoBajo = (255 - duty) * 100; // Tiempo en que el PWM está en LOW 100 por la frecuencia
digitalWrite(salidaPWM, HIGH); // Establece la salida en HIGH
delayMicroseconds(tiempoAlto); // Espera el tiempo correspondiente
digitalWrite(salidaPWM, LOW); // Establece la salida en LOW
delayMicroseconds(tiempoBajo); // Espera el tiempo correspondiente
En la Fig. 5 se presenta la simulación realizada en Proteus. En esta, se puede apreciar un contador para la
frecuencia de salida. El resto de imágenes consta de los diferentes valores de PWM.
Figura 5: Esquema del circuito para verificar el programa en Isis Proteus
Figura 6: 30% de PWM
Figura 7: 60% de PWM
Figura 8: 90% de PWM