0% encontró este documento útil (0 votos)
3 vistas7 páginas

Control de Nivel y PWM en Arduino Uno

El documento describe un programa para controlar el nivel de agua en un tanque utilizando Arduino Uno, con sensores que activan válvulas de entrada y salida según el nivel detectado. También se presenta un segundo programa que permite controlar el ciclo de trabajo de una señal PWM mediante tres interruptores, ajustando el duty cycle a 30%, 60% y 90%. Se incluyen ejemplos de código y simulaciones para ilustrar el funcionamiento de ambos programas.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas7 páginas

Control de Nivel y PWM en Arduino Uno

El documento describe un programa para controlar el nivel de agua en un tanque utilizando Arduino Uno, con sensores que activan válvulas de entrada y salida según el nivel detectado. También se presenta un segundo programa que permite controlar el ciclo de trabajo de una señal PWM mediante tres interruptores, ajustando el duty cycle a 30%, 60% y 90%. Se incluyen ejemplos de código y simulaciones para ilustrar el funcionamiento de ambos programas.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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

También podría gustarte