He estado trabajando durante un tiempo en un controlador para el sistema de aceite vegetal en mi vehículo. Soy bastante nuevo en la programación y disfruto enseñándome a mí mismo con un arduino. Tengo un arduino nano 32 que planeo usar para el proyecto. He pasado por muchas variaciones diferentes y diferentes formas de hacer la lógica. Algunos que trabajan y luego se vuelven complicados y comienzan a no funcionar y otros que simplemente no funcionan. Me pregunto cómo alguno de ustedes haría esto? No necesito un código completo para decir, ya que estoy tratando de hacer esto principalmente por mí mismo, pero tal vez algunos ejemplos o formas diferentes de comenzar el camino correcto. Esto es lo que tengo hasta el bucle
#include <elapsedMillis.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include "OneButton.h"
#include <EEPROM.h>
unsigned int purgeTime = 15000;
unsigned long currentTime = millis();
unsigned long tempTime;
//unsigned long loopTime;
unsigned long previousPurgecount = 0; // last time update
long purgeDelay = 10000; // interval at which to do something (milliseconds)
int feedValve = 12; // feed valve is connected to pin 12
int returnValve = 11; // return valve is connected to pin 11
int heater = 10; // heater is connected to pin 10
//int loopValves = 9; // loop valves are connected to pin 9
int pump = 8; // pump is connected to pin 8
int buzzer = 7; // buzzer is connected to pin 7
int ignition = 2; // ignition is connected to pin 2
int ignition_mode = 0; // set initial ignition mode to off
boolean valve_state = 0; // set initial valve_state to off
int buttonMode = 0; // set initial button mode to 0
// front temp sensor is connected to analog pin 0
// vegetable oil loop temp sensor is connected to analog pin 1
// coolant loop temp sensor is connected to analog pin 2
OneButton button(A2, true);
elapsedMillis elapsedTime;
void setup()
{
Serial.begin(9600);
// link the doubleclick function to be called on a doubleclick event.
//button.attachDoubleClick(doubleclick);
button.attachClick(click);
pinMode(feedValve, OUTPUT); // Set the Feed Valve pin as output
pinMode(returnValve, OUTPUT); // Set the Return Valve pin as output
pinMode(heater, OUTPUT); // Set the Heater Valve pin as output
//pinMode(loopValves, OUTPUT); // Set the Loop Valves pin as output
pinMode(pump, OUTPUT); // Set Pump pin as output
pinMode(buzzer, OUTPUT); // Set buzzer pin as output
pinMode(ignition, INPUT); // Set ignition as input
}
double Thermister1(int RawADC) {
double Temp1;
Temp1 = log(((10240000/RawADC) - 10000));
Temp1 = 1 / (0.001129148 + (0.000234125 * Temp1) + (0.0000000876741 * Temp1 * Temp1 * Temp1));
Temp1 = Temp1 - 273.15; // Convert Kelvin to Celcius
Temp1 = (Temp1 * 1.8) + 32; // Convert to F
Temp1 = round(Temp1);
return Temp1;
}
void loop()
Aquí está la lógica que estoy tratando de crear.
Conmutador para alimentar el sistema.
Un botón de control. También ingrese desde el encendido para decir que el motor está funcionando o no.
-si la ignición no está encendida, no haga nada
-botón de prensa
: calienta y regula la temperatura a 90 ° F usando el sensor de temperatura 1
: una vez que el sensor de temperatura 1 llega a 85F, la válvula de alimentación se abre (la salida es ALTA)
: una vez que la válvula de alimentación está abierta, espere 45 segundos y luego vuelva a abrir la válvula
-si se presiona el botón o el encendido se apaga en cualquier momento antes de que se abra la válvula de retorno, todo vuelve a apagarse y vuelve a pulsarse el botón anterior
: una vez que el sensor de temperatura 2 llega a 50F, la bomba se enciende
: una vez que la válvula de alimentación está abierta, espere 5 minutos y luego encienda la bomba si no está encendida, y abra la válvula de bucle
Ahora se ejecuta en aceite vegetal
-botón de prensa
- desconecte la válvula de alimentación, el calentador
: espere 45 segundos y luego apague la válvula de retorno, la válvula de bucle y la bomba
-si se ejecuta con aceite vegetal y se apaga
-Entonces el calentador se apaga y la bomba se apaga
: la alarma suena
: si se presiona el botón, la alarma se apaga y las válvulas permanecen abiertas.
-si el encendido vuelve a encender el calentador y la bomba
Volver a correr con aceite vegetal
Tengo un módulo LCD DFROBOT I2C / TWI 4x20 en el que me gustaría mostrar las dos temperaturas y algunas otras cosas con las que puedo jugar.
No creo que tenga la biblioteca LCD correcta para esta LCD.
Cuando el calentador esté encendido, debería regular la temperatura usando el sensor de temperatura 1
Muchas gracias de antemano. David