Hola mi nombre es José, llevo poco tiempo en el mundillo de Arduino y estoy muy ilusionado con ciertos proyectos que estoy desarrollando.
Tras buscar en google, no encuentro tal vez por desconocimiento lo que necesito o creo que necesito.
Tengo como proyecto hacer un medidor de consumo de combustible en tiempo real y para ello buscando y preguntando he conseguido realizar este código para que me muestre cuándo el inyector de mi moto se encuentra abierto, midiendo ese tiempo y mostrandomelo en una pantalla tft 2.4 montada en arduino Mega 2560. Utilizo el pin 21 para medir la señal y probada con un pulsador en la protoboard he conseguido tener los valores de tiempo y "supuestamente" a más tiempo abierto, más consumo.
Hoy me he decidido a conectar a la moto el arduino y me he encontrado con la sensación de que le roba corriente el cable que conecto al inyector que trabaja a 12v mediante un 7805 (como el inyector está conectado directamente a positivo, la ecu le da la masa para que se abra) he conectado el positivo del inyector a la patilla izquierda (input) y el negativo del inyector al alojamiento del tornillo (no sé si éste es el problema, en la protoboard me ha funcionado perfecto). la salida (patilla derecha) la llevo con un cable de 50cm aprox. al pin 21 del arduino.
De primeras el arduino se me queda en blanco antes de arrancar, le doy al botón reiniciar, cuando muestra la pantalla, le doy al arranque, la moto no consigue arrancar, le doy gas y suena como a que no funciona bien el inyector, el arduino marca un par de veces los tiempos del código y luego se pone otra vez en blanco (supongo que por algún pico de tensión de la bobina o algo parecido).
Hasta ahí he conseguido llegar, por favor disculpen los errores de publicación ya que es la primera que hago, si fueran tan amables de ayudarme con este tema la verdad que tengo mucha ilusión en poderlo conseguir y tener visualmente el consumo tanto en mi moto como en mi coche.
PD: la moto es una Yamaha FZ6 y el inyector Inyector de Yamaha Fazer 2004-2007 (Denso 5D8.5, codigo 5VX137610000). Mil gracias!
Código:
#define BLACK 0x0000
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define BLUE 0x001F
#define GREEN 0x07E0
#define CYAN 0x07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define ORANGE 0xFD20
#define GREENYELLOW 0xAFE5
#define PINK 0xF81F
#include <Adafruit_GFX.h> // Core graphics library
#include <MCUFRIEND_kbv.h> // Hardware-specific library
MCUFRIEND_kbv tft;
#include "Fonts/FreeSans9pt7b.h" // when you want other fonts
const int pin = 21;
volatile bool pulso = 0;
volatile unsigned long tiempo = 0;
unsigned long tiempo_anterior = 0;
bool subida = 0;
float Litrosporhora;
float tiempo1 = 500;
unsigned long tiempo_0 = 0;
void setup(){
pinMode(pin, INPUT);
Serial.begin(115200);
uint16_t ID = tft.readID();
tft.begin(ID);
tft.fillRect(0, 0, 240, 420, BLACK);
tft.setRotation(2);
tft.setTextColor(BLUE, BLACK);
tft.setTextSize(4);
tft.setTextWrap(false); // escribe el texto en una línea. (true) en distintas
//tft.setFont(&FreeMonoOblique9pt7b);
tft.setCursor(10, 10);
tft.println("L/h: ");
attachInterrupt(digitalPinToInterrupt(pin), leer, CHANGE);
}
void loop(){
if (pin == 0){
Serial.println("el pulso es 0");
}
if (pulso == 1){
if (subida ==1){
/*Serial.print(tiempo - tiempo_anterior);
Serial.print(" ");
Serial.println("milisegundos entre pulsos");
*/ }
if (subida ==0){
tft.setTextColor(BLUE, BLACK);
Serial.println(tiempo - tiempo_anterior);
Litrosporhora = tiempo - tiempo_anterior;
}
tiempo_anterior = tiempo;
subida = !subida;
pulso = 0;
if (millis() > tiempo1 + tiempo_0) {
tiempo_0 = millis();
tft.setCursor(100, 10);
tft.println(Litrosporhora, 1);
}
}
}
void leer(){
tiempo = millis();
pulso = 1;
}