Go Down

Topic: Radar de velocidad (Read 1 time) previous topic - next topic

surbyte

Exacto.

Donde esta complicada mi forma de escribir?





Chuma87

Avances...

Bueno, decidi cambiar el codigo de Limpkin, que no usa libreria, hasta donde pude ver...Asique decidi navegar bastante por google y buscar y buscar hasta que di con un codigo sencillo, pero con una libreria que no podia conseguir porque ya no existia la pagina...Me costo un buen rato hasta que lo consegui.

Codigo, con algunas modificaciones:
Code: [Select]
#include <FreqPeriod.h>
#include <Wire.h>      // libreria de comunicacion por I2C
#include <LCD.h>      // libreria para funciones de LCD
#include <LiquidCrystal_I2C.h>    // libreria para LCD por I2C

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7); // DIR, E, RW, RS, D4, D5, D6, D7

double lfrq;
long int pp;

void setup() {
Serial.begin(9600);
  FreqPeriod::begin();
  lcd.setBacklightPin(3,POSITIVE);  // puerto P3 de PCF8574 como positivo
  lcd.setBacklight(HIGH);   // habilita iluminacion posterior de LCD
  lcd.begin(16, 2);     // 16 columnas por 2 lineas para LCD 1602A
  lcd.clear();      // limpia pantalla

  Serial.println("FreqPeriod Library Test");
}

void loop() {
  pp = FreqPeriod::getPeriod();
  if (pp) {
    //Serial.print ("period: ");
    //Serial.print(pp);
    //Serial.print(" 1/16us / frequency: ");

  lfrq = 16000400.0 /pp;
  //Serial.print(lfrq);
  //Serial.print(" Hz ");
  //lcd.setCursor(0,0);
  Serial.print(lfrq/19.49);
  Serial.println( "km/h");
  lcd.print(lfrq/19.49);
  lcd.print( "km/h");
  delay(200);
  lcd.clear(); 
}
}


Dejo dos links (GIFS, para ser livianos) donde se ve la prueba que hice aca en casa..

Prueba 1
Bug de la prueba

Lo probe en la calle con la bateria 12v, y no pude leer varias veces porque el LCD no mostraba nada, como que se bugeaba. de 15 autos que pasaron, entre 7 y 8 pudimos tomar la velocidad, el resto, o mostraba solo ruido, o se borraba la pantalla. Será el delay? No encuentro otra manera de limpiar el LCD.

Lo que llamas a stepdown, seria como una fuente multivoltaje? Esto?

surbyte

La fuente step down que yo menciono es esta. Esa puede ser pero no me convence. Esta si porque la uso y la usa  todo el mundo acá y no te da problemas.
Lm2596 Fuente Step-down Dc-dc 1,23-35v 3a Arduino

Respecto del código, con un delay de 200 mseg es lógico queno puedas leer un objeto que se muevo muy rápido. Deberías apuntar a algun objeto del que sepas su velocidad.

Prueba a ver este código si trabaja bien.
Modifica el valor de INTERVALO a 200 si quieres que trabaje como el que posteaste anteriormente.
Me parece que 500 a 1000 son valores mas adecuados.

Code: [Select]
#include <FreqPeriod.h>
#include <Wire.h>      // libreria de comunicacion por I2C
#include <LCD.h>      // libreria para funciones de LCD
#include <LiquidCrystal_I2C.h>    // libreria para LCD por I2C

#define INTERVALO   500UL  // modifica este valor para cambiar la visualizacion

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7); // DIR, E, RW, RS, D4, D5, D6, D7

double lfrq;
long int pp;
unsigned long start;

void setup() {
  Serial.begin(9600);
  FreqPeriod::begin();
  lcd.setBacklightPin(3,POSITIVE);  // puerto P3 de PCF8574 como positivo
  lcd.setBacklight(HIGH);           // habilita iluminacion posterior de LCD
  lcd.begin(16, 2);                 // 16 columnas por 2 lineas para LCD 1602A
  lcd.clear();                      // limpia pantalla

  Serial.println("FreqPeriod Library Test");
}

void loop() {
  char* buffn="";  //Cadena donde almacenaremos el número convertido
  char buffer[20]=" "; //Buffer de la cadena donde se devuelve todo, número formateado y cadena concatenada
  pp = FreqPeriod::getPeriod();
  if (pp) {
      if (millis()-start > INTERVALO) {
          lfrq = 820954.336 /pp;
          // Serial.print(lfrq);
          // Serial.println( "km/h");
          dtostrf(lfrq,5,1,buffn); //Llamada a la función
          char* formato="%6s km/h"; //Cadena con la mascara a convertir
          sprintf(buffer, formato, buffn);
          lcd.print(buffer); 
          start = millis();
      }
  }
}

Chuma87

MMMMM probé tu codigo, compila pero con errores, y algunos movimientos, por el amplio delay, no lo devuelve.

te cito uno de los errores.
Code: [Select]
sketch.ino:35:25: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

           char* formato="%6s km/h"; //Cadena con la mascara a convertir


Si le saco el delay, son buenisimos los resultados, son reales, pero en el LCD no se ven, si lo sigo con la computadora si. Tengo que buscar la manera de usar el codigo que pase, para que de 4 o 5 lecturas seguidas, me muestre la mas alta, pero sin delay.

Algo como este video


surbyte

De donde saco la librería FreqPeriod.
Yo no puedo compilarla justamente porque no has puesto de donde la descargaste.
Cuando colocas un código en el foro conviene hacer esto.

Code: [Select]
#include <FreqPeriod.h> // https://github.com/Jorge-Mendes/Agro-Shield/tree/master/OtherRequiredLibraries/FreqPeriod

NO se si esta es la librería. Probaré con ella a ver que tal se comporta.

Bueno obtuve esto
Quote
Building .pio\build\nanoatmega328\firmware.hex
Memory Usage -> http://bit.ly/pio-memory-usage
DATA:    [==        ]  24.0% (used 492 bytes from 2048 bytes)
PROGRAM: [===       ]  27.3% (used 8378 bytes from 30720 bytes)
========================= [SUCCESS] Took 63.77 seconds =========================
O sea no hay errores y eso que me indicas es un Warning o advertencia. Pero no es un error.
No le gustan los punteros
Pero he modificado parcialmente el código para que no tengas Advertencias no Errores.

Code: [Select]
void loop() {
  char buffn[6]=" ";  //Cadena donde almacenaremos el número convertido
  char buffer[20]=" "; //Buffer de la cadena donde se devuelve todo, número formateado y cadena concatenada
  pp = FreqPeriod::getPeriod();
  if (pp) {
      if (millis()-start > INTERVALO) {
          lfrq = 820954.336 /pp;
          dtostrf(lfrq,5,2,buffn); //Llamada a la función
          char formato[20]="%s km/h"; //Cadena con la mascara a convertir
          sprintf(buffer, formato, buffn);
          lcd.print(buffer); 
          start = millis();
      }
  }
}

Chuma87

#20
Sep 20, 2019, 06:46 am Last Edit: Sep 20, 2019, 02:28 pm by Chuma87
Bueno, reviviendo un poco esto...

Pasé dos semanas investigando. Y encontré algo mejor.

Un usuario, llamado Markus me esta dando una mano gigante.

Consegui el esquema del amplificador, y su diseño en Gerber para armar la placa. Obvio, yo, lo que preferi es con el Livewire, diseñar el circuito que compartio este usuario, y pasarlo a PCB Wiz.

Acá las dos cosas

Esquema


Circuito


Diseño en PCB Wizard


Trabajo terminado sin soldar (doble faz)



Para el codigo, probé el de limpkin que ya comparti aca. Pero me tiraba siempre un numero fijo y alto, por ende, no estaba leyendo. Supongo que iba a tener el mismo resultado con el codigo de Markus..

Asique revise la placa. Primero medi continuidad. 5V y GND, bien...pero IF, no sonaba el tester, eso es porque el BC549 tenga algo que ver? el preset? Revise a fondo la placa y no hay nada que altere ni genere cortocircuito. Pero sucede esto, al conectar todo a arduino y corriente, hay continuidad entre 5V y GND, y nace desde el HB100, como es eso posible? Pero IF, parece tener un corto en el tramo.

Puede ser tambien que las resistencias pierdan valor? Por ejemplo, la de 1M termina midiendo 332k!!!!!!...Los de 10k que son tres, uno mide 9k, y los otros dos 7,5k, y asi otras resistencias de otros valores...Eso es por la ubicacion en la placa? O pasaron a la basura por sobrecalentamiento en la soldada?

Por ultimo, el LED deberia (supongo) prender cuando capta una señal. En mi caso desde el vamos, esta encendida.

EDIT: Mi compañero de electronica me dijo que el pin 14 de LM324 no puede estar conectado con uno de entrada, como con el 13 (nuncá miré el datasheet, lo hice de atropellado). Ahi me di cuenta que en el livewire, no identifiqué los pines, y creo que cuando lo pasé al PCB Wizard, este programa eligió cualquier conexion... Me queda rediseñar la placa y ver si hay alguna anomalia en los pines, o tomar el diseño de Marcus.

Acá dejo el datasheet del LM324...
Y este fue el diseño de PCB wizard...Se nota el error de primera.

Chuma87

#21
Oct 15, 2019, 03:27 pm Last Edit: Oct 15, 2019, 04:42 pm by Chuma87
Bueno, actualizando, cambié el amplificador, al menos, la placa. Logré imprimir el diseño. Ahora el tema es que, si el preset esta al maximo, el LED queda encendido, como que todo el tiempo esta leyendo...y si lo regulo, se vuelve debil para reflejar una lectura...Que es lo que esta sucediendo? Los capacitores en mal estado no estan filtrando el ruido? el LM324? que puede ser?

Acá un video.

surbyte

#22
Oct 15, 2019, 04:01 pm Last Edit: Oct 15, 2019, 04:03 pm by surbyte
Acá tienes un buen punto de partida para ver donde estas parado

https://hackaday.com/2017/03/31/the-right-circuit-turns-doppler-module-into-a-sensor/

otro mas

https://www.limpkin.fr/index.php?post/2017/02/22/Making-the-Electronics-for-a-24GHz-Doppler-Motion-Sensor

Asi se pega un enlace, no como texto plano, edita el tuyo por favor!

Chuma87

Los amplificadores de Limpkin no sirven para mediciones de vehiculos, en cambio el de Markus si. No entiendo la mencion de los dos links.

Con respecto a mi link, mala mia por no chequear.

A lo que voy es...si queda encendido el LED, es porque lee mucho ruido, entonces, si hay mucho ruido, los capacitores no estan funcionando como corresponde, cierto?

Go Up