mciceteade
Published © GPL3+

BIOmass Processor, Lambda regulated Gasifier

Thermal Biomass processor yielding fuel to run Generators and turbines. This enables us to run Lawnmower engines on the biomass they cut.

IntermediateWork in progress235
BIOmass Processor, Lambda regulated Gasifier

Things used in this project

Story

Read more

Schematics

Sensor and firetube

Code

Gasifier 2.0

Arduino
this reads 3 K-type Thermo couplers
and 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
//// 

}
}

Credits

mciceteade
1 project • 1 follower
Contact

Comments

Please log in or sign up to comment.