Hardware components | ||||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Gasifier Analysis and Temp monitoring intake Regulation thru Lambda feedback.
A Gasifier burns biomass in an Oxygen starved environment and produces a syngas.
The Biomass is burned at high temperature but Low Oxygen therefore much like a partial controlled burn.
This Controller will monitor 3 temperatures
Pre burn Loading chamber
Vacuum tube on bottom of fire hearth
After cooling Stage is complete
These Pellets burn good, much like Paper logs for fireplaces, or the pellets seen for backyard grills.
This is a Gasifier Systematic
Biomass can be loaded on top and engine fuel extracted below
Wood gas generator construction details (windward.org)
The goal is to have a Furnace type control system to yield pressurized quality engine fuel.
Gasifier 2.0
Arduinoand then displays those read outs serial and lcd
Switches relays acording to threshold limits to turn on vacuum blowers.
#include <Adafruit_LEDBackpack.h>
#include "SPI.h"
#include "MAX6675.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
////pin used
//Digital 3= SCK clock 13 max 6675 coding
// 4= CS Mosi 11
// 5= SO miso 12
#define MAX1CLK 2 // Defining the SCK pin Temp code sensor 1
#define MAX1CS 3 // Defining the CS pin Temp code sensor 1
#define MAX1DO 4 // Defining the MISO pin Temp code sensor 1
#define MAX2CLK 5 // Defining the SCK pin Temp code sensor 2
#define MAX2CS 6 // Defining the CS pin Temp code sensor 2
#define MAX2DO 7 // Defining the MISO pin Temp code sensor 2
#define MAX3CLK 8 // Defining the SCK pin Temp code sensor 1
#define MAX3CS 9 // Defining the CS pin Temp code sensor 1
#define MAX3DO 10 // Defining the MISO pin Temp code sensor 1
int sensorThreshholdHigh1 = 600;
int sensorThreshholdLow1 = 200;
int sensorThreshholdHigh2 = 900;
int sensorThreshholdLow2 = 400;
int sensorThreshholdHigh3 = 600;
int sensorThreshholdLow3 = 100;
int oxygenThreshholdHigh1 = 500;
int oxygenThreshholdLow1 = 200;
int emergencyshutdown = 1100;
int analogReadPin = A5; //O2 sensor input
int digitalErrorPin = 13; ///Error pin Emergency shut down Temp Too hot
int delayTime = 2000;
int blowerfan1 = 11; ///digital pin 11 for relay blower stage 1 minimum Blower to prevent back blow
int blowerfan2 = 12; ///digital pin 11 for relay blower stage 2 2nd stage Low blower
int blowerfan3 = 13; ///digital pin 11 for relay blower stage 3 3rd stage hi blower
MAX6675 thermocouple1; ///Temp code Main fire chamber pre heat
MAX6675 thermocouple2; ///Temp code Vacuum chamber
MAX6675 thermocouple3; ///Temp code Pre cooler
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
Serial.begin(9600);
Serial.println(__FILE__);
Serial.println();
delay(2500);
thermocouple1.begin(MAX1CLK, MAX1CS, MAX1DO);
thermocouple2.begin(MAX2CLK, MAX2CS, MAX2DO);
thermocouple3.begin(MAX3CLK, MAX3CS, MAX3DO);
// initialize the LCD
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.print("Gasifier System");
delay(1000);
lcd.clear ();
lcd.setCursor(0,0); //// set cursor to zero position in 2nd line {first line is 0}
lcd.print("Designed by ");
delay(2000);
lcd.setCursor(0,1);
lcd.print(" AMERICAN ");
delay(1000);
lcd.clear ();
lcd.setCursor(0,1);
lcd.print(" Handwerk ");
delay(1000);
lcd.clear ();
lcd.setCursor(0,0); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println("Josef McInturff");
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println("Share your Knowlege");
delay(4000);
lcd.clear ();
}
void loop()
{
float status1 = thermocouple1.read();
float status2 = thermocouple2.read();
float status3 = thermocouple3.read();
int sensorValue = analogRead(analogReadPin);
/// temp code
if (status1 != STATUS_OK) /// temp code
{
Serial.println("ERROR Pre heat!"); ///temp code
lcd.print("Error Pre Heat");
}
if (status2 != STATUS_OK) /// temp code
{
Serial.println("ERROR Vacuum tube!"); ///temp code
lcd.print("Error vacuum tube");
}
if (status3 != STATUS_OK) /// temp code
{
Serial.println("ERROR Pre cooler!"); ///temp code
lcd.print("Error Pre cooler");
}
Serial.print("Temp Pre heat :\t"); /// temp code
Serial.println(thermocouple1.getTemperature(), 3); /// temp code
Serial.print("Temp Vacuum tube :\t"); /// temp code
Serial.println(thermocouple2.getTemperature(), 3); /// temp code
Serial.print("Temp Pre cool :\t"); /// temp code
Serial.println(thermocouple3.getTemperature(), 3); /// temp code
Serial.print("O2 sensor read :");
Serial.println(sensorValue);
Serial.println();
delay(200);
delay(200);
/// temp code
//// lcd.setCursor(column_index, row_index);
//// lcd.print("Temperature Analysis");
//// lcd.clear();
//// lcd.home(); top left corner
//// lcd.autoscroll();
//// Lcd.noAutoscroll();
///lcd.print("Temp:", thermocouple1.getTemperature(), 3));
lcd.println("Pre Heat ");
lcd.println(thermocouple1.getTemperature());
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println("Vacuum tube ");
lcd.println(thermocouple2.getTemperature());
delay(2000);
lcd.clear ();
lcd.println("Pre Cooler ");
lcd.println(thermocouple3.getTemperature());
delay(2000);
lcd.clear ();
lcd.print("O2 sensor read ");
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println(sensorValue);
delay(2000);
lcd.clear ();
lcd.clear ();
while (thermocouple1.getTemperature() >= sensorThreshholdLow1){ //// safty loop to check internal temp of gasifier loading chamber
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
//////// digitalRead(digitalErrorPin) if pin 13 is high prevent startup overheating occured
lcd.println("Ready to load");
delay(2000);
}
while (thermocouple1.getTemperature() >= sensorThreshholdHigh1 ) { /// storage of wood pre heat hopper set to 600
lcd.home();
lcd.println("Heating up now");
delay(delayTime);
lcd.clear ();
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println("DANGER HOT");
digitalWrite(blowerfan2,LOW); //// turn on bigger blower stage 2
digitalWrite(blowerfan1,HIGH); //// turn off blower stage 1
delay(delayTime);
lcd.clear ();
lcd.println("2nd Stage ON");
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println(thermocouple1.getTemperature());
delay(delayTime);
}
while (thermocouple2.getTemperature() >= sensorThreshholdLow2 ) { /// storage of wood pre heat hopper set to 600
lcd.home();
if(thermocouple2.getTemperature() <= sensorThreshholdHigh2 ) {
lcd.println("Operating temp reached");
}
if (thermocouple2.getTemperature() >= emergencyshutdown ) {
lcd.println("Overheating");
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println("Risk of Damage");
digitalWrite(blowerfan1,LOW); //// turn On blower stage 1
digitalWrite(blowerfan2,HIGH); //// turn off bigger blower stage 2
delay(delayTime);
lcd.clear ();
lcd.println("Shutting down");
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println("Risk of Damage");
digitalWrite(digitalErrorPin,HIGH);
delay(delayTime);
lcd.clear ();
}
lcd.home();
lcd.println("Stage II ON");
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
delay(2000);
lcd.println("Pre Heat ");
lcd.println(thermocouple1.getTemperature());
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println("Vacuum tube ");
lcd.println(thermocouple2.getTemperature());
delay(2000);
lcd.clear ();
lcd.println("Pre Cooler ");
lcd.println(thermocouple3.getTemperature());
delay(2000);
lcd.clear ();
lcd.print("O2 sensor read ");
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println(sensorValue);
delay(2000);
lcd.clear ();
digitalWrite(blowerfan2,LOW); //// turn on bigger blower stage 2
digitalWrite(blowerfan1,HIGH); //// turn off blower stage 1
delay(delayTime);
lcd.clear ();
int blowerfan3 = 13; ///digital pin 11 for relay blower stage 3 3rd stage hi blower
int oxygenThreshholdHigh1 = 500;
int oxygenThreshholdLow1 = 200;
while (thermocouple2.getTemperature() >= sensorThreshholdLow2 ) {
lcd.home();
if (analogReadPin >= oxygenThreshholdLow1 ) {
lcd.println("Reading OXYGN");
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println("Operating temp OK");
digitalWrite(blowerfan3,LOW); //// turn On blower stage 2 high
digitalWrite(blowerfan2,HIGH); //// turn off blower stage 2 maintainer blower
delay(delayTime);
lcd.clear ();
lcd.println("Current OXYGN LVL");
lcd.setCursor(0,1);
Serial.println(sensorValue);
}
if (analogReadPin >= oxygenThreshholdHigh1 ) {
lcd.println("Reading OXYGN");
lcd.setCursor(0,1);
lcd.println("Operating temp OK");
digitalWrite(blowerfan3,HIGH); //// turn off blower stage 2 high
digitalWrite(blowerfan2,LOW); //// turn on blower stage 2 maintainer blower
delay(delayTime);
lcd.clear ();
lcd.println("Reducing OXYGN LVL");
lcd.setCursor(0,1);
Serial.println(sensorValue);
delay(delayTime);
lcd.clear ();
}
lcd.println("Vacuum tube temp");
lcd.setCursor(0,1);
lcd.println(thermocouple2.getTemperature());
lcd.println("Engine Pre cool");
lcd.setCursor(0,1); //// set cursor to zero position in 2nd line {first line is 0}
lcd.println(thermocouple3.getTemperature());
lcd.clear ();
delay(delayTime);
}
//// stages:
//// next stage of project write O2 dependency for Intake regulator
//// test entire setup on live data feed
////
}
}
Comments
Please log in or sign up to comment.