Go Down

Topic: Controlar preostato que funciona a frecuencias (Read 4434 times) previous topic - next topic

Metaconta

Hola:

Quiero saber si hay algún circuito usando un microcontrolador y pantalla LCD para controlar y medir frecuencias. Por ejemplo, hay tester o pinzas amperímetras que tiene esa función, frecuencímetro. Quiero saber si con PIC o Arduino se puede medir frecuencias y detectar nieveles para encender y apagar una barra de Led.

Vídeo.
http://www.youtube.com/watch?v=94Jii53GAhU

Si es posible, encontrar algún esquema, ejemplos y todo para entenderlo, después a ponerme manos a la obra.

Saludos.

surbyte

Vaya que mezcolanza de cosas.
Primero este es foro de Arduino. Con pic no trabajamos ni sugerimos nada.
Segundo: Arduino puede leer frecuencias usando sus timers. Si.
Quote
Quiero saber si con PIC o Arduino se puede medir frecuencias y detectar nieveles para encender y apagar una barra de Led.
Tercero: No entiendo que tiene que ver medir frecuencias con detectar niveles. Niveles de frecuencia?
Quieres hacer un analizador de espectro?

El video de youtube es de un presostato, nada tiene que ver con las preguntas anteriores.

Metaconta

Hola:

Voy a explicarlo de otra manera y por pasos. Otros pasos por ahora no lo nombraré, de momento.



El resumen:
 Arduino sepa detectar los Hz y mostrarlo en pantalla LCD 20x4.

Por aquí he encontrado cierta información que puede dar ideas.
http://www.proyectoelectronico.com/medidores/sensor-presion-nivel-agua-presostato.html

Saludos.

TFTLCDCyg

Mira no tomes a mal los comentarios, pero si pides ayuda, empieza por definir tu problema de forma clara.

Alguna idea me surge al ver lo que comentas, pero es una idea que me he formado con la pedacería del rompecabezas.

Si formulas tu pregunta de forma que sigamos tu idea, creo que podríamos tener un mejor panorama de tu proyecto.

Metaconta

Arggggg.
No he completado la explicación.

Mi idea principa en forma de pregunta. ¿Cómo logro medir frecuencia de este presostato y mostrarlo en el LCD de Arduino UNO r3?


Disculpen las molestias.

surbyte

#5
Feb 08, 2015, 06:55 pm Last Edit: Feb 08, 2015, 06:56 pm by surbyte
Bueno si me dices que lo que quieres hacer es medir la frecuencia de este sensor de presión que hace las veces de un sensor de nivel de agua, no era mas fácil?
Ahh para que quede claro: Te has explicado horriblemente. Gracias a que pusiste ese segundo post yo entendí el rompecabezas o creo haberlo hecho.


Dice el post#2 que la frecuencia es alta cuando esta vacío y va bajando conforme se llena.
Primero debes hacer un programa que detecte frecuencias, segundo encontar un patrón que te ayude a determinar el nivel en función de la frecuencia.
Veamos:


Este esquema facilita las cosas porque nos dice que trabaja a 5V (verificarlo). Si no lo fuera pondria un simple Optoacoplador para asegurarme de no dañar el arduino pero debe ser uno que no afecte el circuito de salida.
Otra es que si tengo osciloscopio, y me aseguro que entrega 5V entonces me conecto directo con seguridad.

Un sketch de medición de frecuencias es fácil, incluso puedes usar pulseIn

Pero lo mejor sería algo como esto:
Code: [Select]
// Timer and Counter example
// Author: Nick Gammon
// Date: 17th January 2012

// Input: Pin D5

// these are checked for in the main program
volatile unsigned long timerCounts;
volatile boolean counterReady;

// internal to counting routine
unsigned long overflowCount;
unsigned int timerTicks;
unsigned int timerPeriod;

void startCounting (unsigned int ms)
  {
  counterReady = false;         // time not up yet
  timerPeriod = ms;             // how many 1 mS counts to do
  timerTicks = 0;               // reset interrupt counter
  overflowCount = 0;            // no overflows yet

  // reset Timer 1 and Timer 2
  TCCR1A = 0;            
  TCCR1B = 0;              
  TCCR2A = 0;
  TCCR2B = 0;

  // Timer 1 - counts events on pin D5
  TIMSK1 = bit (TOIE1);   // interrupt on Timer 1 overflow

  // Timer 2 - gives us our 1 mS counting interval
  // 16 MHz clock (62.5 nS per tick) - prescaled by 128
  //  counter increments every 8 µS.
  // So we count 125 of them, giving exactly 1000 µS (1 mS)
  TCCR2A = bit (WGM21) ;   // CTC mode
  OCR2A  = 124;            // count up to 125  (zero relative!!!!)

  // Timer 2 - interrupt on match (ie. every 1 mS)
  TIMSK2 = bit (OCIE2A);   // enable Timer2 Interrupt

  TCNT1 = 0;      // Both counters to zero
  TCNT2 = 0;    

  // Reset prescalers
  GTCCR = bit (PSRASY);        // reset prescaler now
  // start Timer 2
  TCCR2B =  bit (CS20) | bit (CS22) ;  // prescaler of 128
  // start Timer 1
  // External clock source on T1 pin (D5). Clock on rising edge.
  TCCR1B =  bit (CS10) | bit (CS11) | bit (CS12);
  }  // end of startCounting

ISR (TIMER1_OVF_vect)
  {
  ++overflowCount;               // count number of Counter1 overflows  
  }  // end of TIMER1_OVF_vect


//******************************************************************
//  Timer2 Interrupt Service is invoked by hardware Timer 2 every 1ms = 1000 Hz
//  16Mhz / 128 / 125 = 1000 Hz

ISR (TIMER2_COMPA_vect)
  {
  // grab counter value before it changes any more
  unsigned int timer1CounterValue;
  timer1CounterValue = TCNT1;  // see datasheet, page 117 (accessing 16-bit registers)
  unsigned long overflowCopy = overflowCount;

  // see if we have reached timing period
  if (++timerTicks < timerPeriod)
    return;  // not yet

  // if just missed an overflow
  if ((TIFR1 & bit (TOV1)) && timer1CounterValue < 256)
    overflowCopy++;

  // end of gate time, measurement ready

  TCCR1A = 0;    // stop timer 1
  TCCR1B = 0;    

  TCCR2A = 0;    // stop timer 2
  TCCR2B = 0;    

  TIMSK1 = 0;    // disable Timer1 Interrupt
  TIMSK2 = 0;    // disable Timer2 Interrupt
    
  // calculate total count
  timerCounts = (overflowCopy << 16) + timer1CounterValue;  // each overflow is 65536 more
  counterReady = true;              // set global flag for end count period
  }  // end of TIMER2_COMPA_vect

void setup ()
  {
  Serial.begin(115200);      
  Serial.println("Frequency Counter");
  } // end of setup

void loop ()
  {
  // stop Timer 0 interrupts from throwing the count out
  byte oldTCCR0A = TCCR0A;
  byte oldTCCR0B = TCCR0B;
  TCCR0A = 0;    // stop timer 0
  TCCR0B = 0;    
  
  startCounting (500);  // how many mS to count for

  while (!counterReady)
     { }  // loop until count over

  // adjust counts by counting interval to give frequency in Hz
  float frq = (timerCounts *  1000.0) / timerPeriod;

  Serial.print ("Frequency: ");
  Serial.print ((unsigned long) frq);
  Serial.println (" Hz.");
  
  // restart timer 0
  TCCR0A = oldTCCR0A;
  TCCR0B = oldTCCR0B;
  
  // let serial stuff finish
  delay(200);
  }   // end of loop



Claro que este código solo mide frecuencias, tu debes determinar que frecuencia corresponde a Vacio, lleno, ypuntos intermedios.

Metaconta

Hola:

Voy analizar el código de arriba abajo.

El presotato de mi lavadora son 5V, cuando medía con el tester, me ponía 3.7 Vdc. Hace un par de años y la lavadora todavía funciona. Voy a investigar y comento paso a paso.

Probaré el código, aunque no entiendo eso del pin D5, habrá usado teensy o otra cosa que estos si los llaman D5.



Gracias y disculpen por la horrible explicación en el principio.

surbyte

Input pind5 del ATMEGA328, piensa que este Sr viene de la vieja época cuando se usaba los ATMEGAS como micros solos, no como arduino.
Esto lo tengo impreso en un poster frente a mi




Trata de hacer lo mismo.
Entonces PIN D5 es pin 5 del Arduino.

Metaconta

Buenas:

Entonces usa código de AVR de atmel, no de Arduino. Con esto me lleva una pregunta antes de llegar a mi casa y probarlo.

¿Ese código funciona con Arduino IDE?

Saludo.

surbyte

Por favor amigo, donde ves código ATMEGA y de donde crees que salio el ARDUINO?
Si quieres lo llamas asi como el, en definitiva sigue siendo un ATMEGA328P, pero ese artículo esta hecho hace años.

Metaconta

Hola:

El código lo he probado tanto con Arduino IDE1.5.8 y ahora mismo con el 1.6 que acaba de salir.

En los dos se ejecuta muy bien y en teoría funciona.

Mi preostato es de 5V por lo que veo, llamado DPS-TA. Tiene tres cables, Blnaco WLS1, Rosa WLS2 y Naranja 5V. Debo averiguar cual es el de datos.

En cuanto al código. Deja ver si logro la manera de ponerlo en modo más fácil, no la manera nativa que tiene ahora. Así me pondré hacer códigos que diga que en tal frecuencia activa unos Led, por poner un ejemplo.

Según voy haciendo progresos y experimentos en la lavadora, más bien en el presostatos, comento cosas por aquí.

Saludos.

surbyte

#11
Feb 10, 2015, 02:42 pm Last Edit: Feb 10, 2015, 02:45 pm by surbyte
Me duele leer que le llames PRESOSTATO. Un presostato es una llave electrica que se activa sea NO o NC cuando se alcanza un valor de presión. Este es un Sensor de Presión algo fuera de lo común pero yo lo veo como un sensor de presión con salida en frecuencia.

Porque no buscas a ver si tiene código y podemos dar con su hoja de datos. Tal vez de un plumazo tenemos como es su curva de transferencia nivel de agua a frecuencia.
Ya sabemos que vacio es un valor de frecuenca alto y conforme sube el nivel la frecuencia decae.
Yo lo montaría fuera, verifico primero que corriente consume a 5V que no parece ser demasiada por el esquema mostrado, y luego lo conecto al arduino electricamente y uso una manguera transparente que lleno de agua.
Fijo el sensor de presión, y voy moviendo la manguera desde el nivel del sensor hacia arriaba cada 5cmts digamos.. y tomo nota de la frecuencia que lea el Arduino.
Asi levanto la curva de transferencia del sensor.

Metaconta

Me duele leer que le llames PRESOSTATO. Un presostato es una llave electrica que se activa sea NO o NC cuando se alcanza un valor de presión. Este es un Sensor de Presión algo fuera de lo común pero yo lo veo como un sensor de presión con salida en frecuencia.

Por fi encontré los fallos de la lavarora, me quedé 3 días sin lavar.  :smiley-cry:  Tiene fallos en la placa micros desoldaduras que estuve con el tester en cada pista, con el fallo delante de mi, ni me daba cuenta.

Ahora que todo está bien, sigo con el tema.  ;)

Aunque es verdad que no se llama preostato, los técnicos de lavadora lo llaman así, por eso lo llamo así, así sabemos de que hablamos.



En la placa frontal de la lavadora pone 5V, si mido con el tester pone unos 3.7 V.

Se llama este sensor de presión
:[/b]
DPS-TA
5718D

Lo más parecido que he encontrado es esto.
http://energycontrolsonline.co.uk/sensors-and-switches/pressure-switches/differential-pressure-switch-for-air-dps/air-dp-switch-range-20-to-200-pa-datasheet-ta200878.html

Mi tester solo soporta 20 KHz, como entra agua va disminuyendo, así que provaré si es menos y daré mis opiniones.

Al soplas el sensor cuando entraba agua funciona y se pone a lavar un poco, desde que mueva o se me escape el aire sin queres, aunque sea un poco, la lavadora se comporta como si fuera un error, se detiene el motor y saca toda el agua.

Luego pongo mis otras conclusiones sobre el tester y probaré el código qu eme diste haber que tal.

Saludos.

Go Up