¿Controlador de aceite vegetal?

0

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

    
pregunta D.W.

1 respuesta

5

Primero, como se mencionó anteriormente, aprende sobre las máquinas de estado. Eso es realmente lo que tiene aquí y diagramarlo como una máquina de estado lo hará más fácil de entender y de programar.

A continuación, no estoy de acuerdo con la velocidad y el comentario de punto flotante. Si necesitas punto flotante, úsalo. La velocidad no es un problema con este controlador. Sin embargo, ¿parece que estás aplicando una forma simple de la ecuación de Steinhart-Hart para reducir el termistor? Si es así, no lo hagas. Está controlando en un rango bastante pequeño, puede interpolar entre un par de puntos fijos en la curva de resistencia-temperatura y ser lo suficientemente preciso.

Así que decide los estados en los que estará este controlador. Para empezar, veo OFF, PREHEAT, HEAT_STAGE1 (temp1 == 85), HEAT_STAGE2 (temp2 == 50), VEG_OIL, etc ...

Decida sobre los eventos que causarán una transición de estado a estado y luego puede crear el código como una instrucción switch (), o mi preferencia personal: una máquina de estado basada en datos con estados y eventos de transición como una tabla.

A continuación, tiene un par de tareas que se ejecutarán en todos los estados una vez que deje el estado DESACTIVADO, también deberán manejarse. Le sugiero que comience con las tareas de control de temperatura y haga que funcionen primero.

También sugiero que preguntes esto en un sitio de programación de StackExchange (para obtener mejores ideas) ya que realmente no se trata de la electrónica en sí misma.

    
respondido por el lyndon

Lea otras preguntas en las etiquetas