torres.electronico
Well-known-Alfil
Bien, voy con el sketch y el diagrama como quedo el circuito ahora para el arduino NANO (puede ser un arduino uno tambien... el ESP8266 no me funciono, es muy suceptible al ruido de la DC-DC que tenia en el circuito y en la salida del PWM, no puedo tener con el filtro 0-5v por que son puertos de 3.3v)Taln
Tal cual, en eso tenés razón. En teoría dice que ronda el voltio y medio / dos.
La salida del DAC del PLC está tirando 22.3v / 23v como máximo. Probando, me di cuenta que con 22 está ya tiene apertura del 100% ... Creo que se puede pulir un poco más y dejarlo perfecto. En un rato comparto sketch
Código:
/* - ETI - https://sites.google.com/a/educ.ar/eti/home -
* PROYECTO: "Ctrl valvula proporcional hidraulica con regulador lineal lm317 por medio de una señal pwm"
* DISEÑADO POR: prof.martintorres@educ.ar
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int Valvula1 = 11;
int dirPin1 = 4;
int dirPin2 = 7 ;
int yPin = A1;
int yVal;
int APERTURA;
int compAPERTURA;
int APERTURA2;
int dt = 100;
int dt2 = 5000;
void setup() {
Serial.begin(9600);
pinMode(Valvula1, OUTPUT);
pinMode(dirPin1, OUTPUT);
pinMode(dirPin2, OUTPUT);
pinMode(yPin, INPUT);
digitalWrite(dirPin1, 1);
digitalWrite(dirPin2, 1);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print ("Ctrl Proporcional");
lcd.setCursor(0,1);
lcd.print ("-beta 1.3-");
delay (1500);
lcd.clear();
}
void loop() {
yVal = analogRead(yPin);
Serial.println( "Lectura PUERTO: " );
Serial.println(yVal);
lcd.setCursor(0,0);
lcd.print ("POSICION L:");
lcd.print (yVal);
lcd.setCursor(0,1);
if (yVal > 421 & yVal <430) {
APERTURA2 = map(yVal,0,0,0,0);
lcd.print ("-SIN GIRO- ");
lcd.print (APERTURA2);
}
if (yVal < 420) {
APERTURA2 = map(yVal,1023,420,0,255);
lcd.print ("GIRO DER.: ");
lcd.print (APERTURA2);
delay (150);
lcd.clear();
}
if (yVal > 431) {
APERTURA2 = map(yVal,431,1023,0,-255);
lcd.print ("GIRO IZQ.: ");
lcd.print (APERTURA2);
delay (150);
lcd.clear();
}
compAPERTURA = APERTURA;
if (compAPERTURA <= 10) {
digitalWrite(dirPin1, 1);
digitalWrite(dirPin2, 1);
}
if (yVal > 410 & yVal <460) {
//if (yVal > 320 & yVal <380)
// if (yVal > 508 & yVal <512)
digitalWrite(dirPin1, 1);
digitalWrite(dirPin2, 1);
APERTURA = map(yVal,500,0,0,0);
analogWrite(Valvula1, APERTURA);
}
if (yVal > 460) {
APERTURA = map(yVal,460,1023,0,255);
//APERTURA = map(yVal,380,1023,0,255);
digitalWrite(dirPin1, 0);
digitalWrite(dirPin2, 1);
analogWrite(Valvula1, APERTURA);
} else {
digitalWrite(dirPin2, 0);
}
if (yVal <= 410 ) {
APERTURA = map(yVal,410,0,0,255);
digitalWrite(dirPin1, 1);
digitalWrite(dirPin2, 0);
analogWrite(Valvula1, APERTURA);
}else {
digitalWrite(dirPin1, 0);
}
}
