Arduino Manager Development for All

To be honest, I haven’t tried logging with my aruidno. it looks like it works over usb but eats up a serial pins. so plug the usb into the pi.

If you can get your pi on wireless, then you ssh into it.(the ip address shows up on the router) If you are running linux on your desktop, you want to export the x-session, (there is documentation all over for this.) which gives you all the gui stuff, then you can use sketch. It might be -slow- because of the network… Otherwise, from the command line, you can do something along the lines of this thread:
http://playground.arduino.cc/Interfacing/LinuxTTY

none of it is that hard if you can get the network working. :slight_smile:

This is a harder (more programming, the wiring isn’t very hard) but more effective way to connect the pi and the arduino together especially for bi-directional communication. (the banana pi has the same pinouts as the raspberrypi so it should work.)

Very cool this is part of the larger picture. Eventually I want the machines to have a PC driven user interface along with wireless communication for cell phone apps. But for now just one step at a time.

I was just trying to correct the previous post. The serial output is the easiest way to log, but this is more the info I was looking for.

You can run a webserver on the pi, then forward the packets through the router. I do that with ssh, but you can do it with a webserver too. it is a quick dirty way to check on things or work remotely.

I’m hooked:

I decided to study these little fellows for a while.
Shopping for a Mega right now on Aliexpress too.

I have been reading the Arduino library too and found some useful information here on developing codes for closed loop control systems like this.

http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/

2 Likes

I got my nano or mini from radio shack when they closed for like 15 bucks. I wouldn’t have bought one otherwise. They do what they say they will do, but I am really partial to the arm based systems right now. In part because of the multiple languages you can use, and the ease of networking, however the lack of real time clock means you need to extend it for motor control beyond 1. (You can buy a board, or now we can add an arduino.) The other part is, I don’t want to sit in front of it to program it, I can log in and do it remotely. :slight_smile:

I like the nano because of the screw shield. This makes for a nice compact little controller that is easy to wire. The screw shields for all others Ive seen are huge and bulky.

Something I bought for my banana pi is a shield adaptor for the uno. I have no idea how to use it but I have one. :fire:

Hey MattR not to intrude. But you may simplify your software fixes by switching on the actual flow valves actuation from lever arms with solid links; to round eccentrics that are cable or beaded chain driven.
Like all of the recent automotive throttle bodied use before throttle-by-(electric)wires.
Like the old chain pulled vacuum powered cruise controls used.
Then by varying the eccentric of the shaft wheel you can either go for constant degree of movement. Or accentuate throttle plate speed of opening/closing.

Regadrs
Steve Unruh

Steve,
It is a great suggestion. And it would work well, and even better if he was trying to hold it in varying positions like you would when you go faster or slower with a car.

I don’t want to answer for Matt, but I think he is trying to hold it in place. It is kind of like the 10% overproduction the grid does to handle spikes.

If you fire up a motor like on the grinder it draws 2-5x more power on start. You have to wait for the generator to catch up maybe a few seconds. only slightly annoying…

If you are welding, you don’t have 1-2 seconds for the generator to catch up, you want a nice steady current from start to finish. Given that really is the main part of his business. They need to be clean and professional.

In otherwords it is easier to hold the generator it at a steady state then it is to constantly deal with the fluctuations especially when welding. The other way to do this is to use batteries/capacitor with an inverter. Given he probably isn’t paying anything for woodchips, it is cheaper and easier to overproduce with his generator.

I will stand corrected if I am incorrect, but is my best guess. :slight_smile:

You are both correct; however, I’m taking some earlier advice and keeping this in mind on all new electronic systems. This has also been brought to my attention many times; and that is the electronics that some customers just want to steer away from. So with this in mind, I’ve designed this around the ball valves. This way if it ever does break for whatever reason and the end user wants to they can revert back to a manual operation. They can simply take our Servo controlled ball valve off and replace it with a manual lever control.

Now that we have hit this milestone, this is simply a must have system. This is just one of the systems that is needed to make this practical. This is fast enough to handle the loading and opening the hopper for recharging? No problem, it compensates for the gas changes on the fly. For the first time I can walk away from the machines and can just forget that they are even there. They are running as solid as if they are running on gasoline, even when loading.

For an automotive application I would go with a throttle body that can be had for around 50 bucks on ebay. These have the cam pulley set up and are easy to control.

As for this current system, I think it is the delay in the 02 sensor and not the code. I was really liking that kit until Ive come to this realization. I think eliminating the gauge part of the kit will fix these issues. The gauge is what converts the signal for data logging we are using this as our input signal as it is already converted to 5v. I think next is just using the raw signal from the sensor itself and then this just might be fast enough for vehicle applications.

1 Like

I dont know what happened to the post on what engines are best for wood gas. But I will endorse the Briggs Vanguard electric start engine. This engine seems to have beefier valve springs, this is what it looks like to me and this is comparing to a larger Kohler we used on a similar system. The electric starters are actually pretty good on these as well. Ive abused this one a bit and If I have not destroyed it by now I don’t it will be an issue.

We are not planning to use the Vanguard engines for production systems. This is supposed to be our lower cost system and the Predator twin from HF has quite a bit higher HP rating and are gaining a good reputation. This unit Ive been working on the engine generator was supplied to us for development. I have a supplier for Mecc Alte heads and we can get this same generator from them. So with this coupled to the HF engine I think 5 kW will be no issue. Ive contacted them to see if they can get the welder generator heads for this same system. Then it will have the option of AC or 48v 250 amp DC charging. I will then need to look at getting a charge controller for it. Missouri Wind and Solar have one that is reasonably priced and they are great to work with. :fire:

Engines:
If I were to build an engine to work for a living on producer gas I would want something that was easy to field repair, cheap to rebuild ( in case of a filter failure destroying it ) and slow turning to take advantage of slow burning fuel.
I would want something I could draw heat from in the colder months.

If you search the Arrow K series oil field engines you will quickly piece together these are clone PHW converted to spark ignition ( expect no help from arrow they will not share this info ).

Its not hard at all to borrow some of the original diesel parts and push the compression ratio back up…
Bores 92 to 120mm, strokes 110 to 116mm
One can build a 10 hp Producer gas engine thats all iron and turns 1500rpm with a 120 pound flywheel for driving a gen head.

And this I think is gas conversion of the RB-33 ( uses most of the same internal parts as the single PH series )

You REALLY have to do your homework and expect to pay for some mistakes to get to these kinds of.

Briggs makes a fine light duty engine, but its not a proper stationary engine.
Alternatively there are are some great automotive engines I would look at too.
A marine versions of popular engines like the Chrysler Slant 6 or older flat head six have proven themselves to be very reliable in stationary applications.
I like the VOLVO 20 its almost bullet proof and could turn 1800 RPM running 20hp without blinking an eye for a long time ( probably easy enough to find in a marine scrap yard too, outlast they boats they were put in ).

Thats a very nice robust system, we are working on a Lister now. We should be able to test later this week.

As a manufacture I look at parts availability, adaptability, current production and availability. If we get orders for 100 units we need em now and they all have to be identical. We look at the engine as a disposable part of the system. Really this is the cheap part of the whole thing. This is one reason we want to use the Predator engine, if it breaks no big deal get a new one. Then rebuild the one you took out and exchange em every so often. On the larger machines Ive chosen the GM small block vortec V8. This engine probably has the largest aftermarket parts available than any other engine on the planet. This makes it an easy platform to work with and adapt it specific to our technology. It is a simple engine to work on, very easy to get parts for world wide and there are millions of them manufactured. They have a running track record of 50+ years and get the job done. Just my reasoning

2 Likes

I got a Bosch 4 wire universal sensor on the way. This is a narrow band sensor, the wide band sensors have to have the controller to work and this is what I want to get rid of and also cut the cost out.

So this is Bosches universal sensor and comes with the connector to adapt to anything. Input voltage is 1v so we will need to map the signal. This should simplify things a bit :fire:

http://www.ebay.com/itm/151682279372

You might check this out. It is code with pid, and a smoothing for the Bosch 4.9 wideband.

It uses a lookup table, and it has one for woodgas too.
The 4.9’s fixed some of the issues the 4.2s had according to what I read.

but you need a small circuit to go with it, which there are schematics for it.

Do you think a wideband is necessary? If we can make a narrow band work, this would be cost effective and very adaptable. One other issue with the Bosch 5 wire is the calibration circuit is built into the plug and I can’t find a connector anywhere for it unless I buy one of those expensive kits.

I already wrote the code to adapt to the 0-1v signal, once i get the signal calibrated the rest of the code should work fine. As long as things are not too erratic.

#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
 
 //VG 02 Mixture Controller v0.5
//Craeted by Matt Ryder, Vulcan Gasifier LLC May 5, 2015
  //Last edit; May 20, 2015 

// These constants won't change:
const int O2SensePin = A1;    // pin that the O2 sensor is attached to
const int O2SwtPin = A2;   //Pin Auto Mode Switch is attached to
const int O2ManPin = A0; // Reads the O2 Manual Adjust Potentiometer on pin A1


const int RichCon3 = 550;   //Threshold limits for rich gas condition
const int RichCon2 = 580;   
const int RichCon1 = 610;



const int LeanCon1 = 670;    //Threshold limits for lean gas condition
const int LeanCon2 = 750;
const int LeanCon3 = 800;

int sensorMin = 1023;        // minimum sensor value
int sensorMax = 0;           // maximum sensor value
int pos = 0;    // variable to store the servo position
int val;    // variable to read the value from the analog pin 
int lastpos = val;     // variable to store the servo last position
int O2SwticthState = 0;         // variable for reading the Fuel Mixer Mode status

void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 



      // Need to create a set point for servo start position after manual tuning
  {
  val = analogRead(O2ManPin);  // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  lastpos = val;                       // sets lastpos to equal the position of the manually set position
  delay(10);                           // waits for the servo to get there 
 
  }
} 
   
void loop() 
{
    // read the state of the pushbutton value:
  O2SwticthState = digitalRead(O2SwtPin);
   // read the value of the O2 sensor:

   int sensorReading = analogRead(A1);
   
   sensorReading = map(sensorReading, sensorMin, sensorMax, 0, 200);
   
  if (O2SwticthState == LOW)
  {
  val = analogRead(O2ManPin);  // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 20, 180);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  lastpos = val;                       // sets lastpos to equal the position of the manually set position
  delay(10);                           // waits for the servo to get there 
  
  }
    else 
    {
         
         delay (10);
    
 
  }
  

     if  (sensorReading <= RichCon1)
  {
         // we need to move the servo 1 degrees in the POSITIVE
         // direction so we need to add ADD to the last known 
         // position.
         lastpos = lastpos +1;
         myservo.write (lastpos); // Moves servo negative 1 degrees

   
         
         delay(250); // Delay time between 1 degree movments
                                   // Decreasing the number = slower response time
                                   
  }        
  
   else  if  (sensorReading >= LeanCon1)
  {
         // we need to move the servo -1 degrees in the POSITIVE
         // direction so we need to add ADD to the last known 
         // position.
        lastpos = lastpos -1;
         myservo.write (lastpos); // Moves servo negative 1 degrees
         
         delay(400); // Delay time between 1 degree movments
                                   // Decreasing the number = slower response time
                                   
  }
         else if  (sensorReading <= RichCon3)
  {
         // we need to move the servo -1 degrees in the POSITIVE
         // direction so we need to add ADD to the last known 
         // position.
        lastpos = lastpos -1;
         myservo.write (lastpos); // Moves servo negative 1 degrees
         
         delay(100); // Delay time between 1 degree movments
                                   // Decreasing the number = slower response time
                                   
  }
      else if  (sensorReading <= RichCon2)
  {
         // we need to move the servo 1 degrees in the POSITIVE
         // direction so we need to add ADD to the last known 
         // position.
         lastpos = lastpos +1;
         myservo.write (lastpos); // Moves servo negative 1 degrees
         
         delay(150); // Delay time between 1 degree movments
                                   // Decreasing the number = slower response time
                                   
  }
    else if  (sensorReading > LeanCon2)
  {
         // we need to move the servo -1 degrees in the POSITIVE
         // direction so we need to add ADD to the last known 
         // position.
        lastpos = lastpos -1;
         myservo.write (lastpos); // Moves servo negative 1 degrees
         delay(300);  // Delay time between 1 degree movments
                                   // Decreasing the number = slower response time
  }
      else if  (sensorReading > LeanCon3)
  {
         // we need to move the servo -1 degrees in the POSITIVE
         // direction so we need to add ADD to the last known 
         // position.
        lastpos = lastpos -1;
         myservo.write (lastpos); // Moves servo negative 1 degrees
         delay(100);  // Delay time between 1 degree movements
                                   // Decreasing the number = slower response time
  }
    else {
         delay (10);
         }
         //might need a delay for the o2 sensor in general for everything to catch up.
         
}

Could we put some sort of float in this code like he did. How difficult would that be?

The different engines. Basically it is a reliability issue, the acidity from woodgas, natural gas, and propane require special alloys for the heads, sleeves and rings. You can run woodgas on a regular engine, but you shorten the life of it. How much shorter? I have no idea. But it will vary depending on the metals used to construct it. The pitting and such, probably take a while to make a significant difference in performance. Probably the best person to talk to would be someone who actually farmed with the propane model tractor, or a mechanic that worked on them because I think they used the same iron sleeves and heads, and possibly changed the compression and timing.

I personally like stuff made in the states if you can find it. I am partial to keeping jobs in our country, so I can potentially pay less in taxes. :slight_smile:

Im am very much in agreement with you on that. Its just about impossible to get everything made in the USA for the builds and then still be competitive. Trying to keep pricing as low as we can and make this as reachable as we can is a big challenge. We are a US manufacturer and the more I sell the more folks I can hire. So if we have to use some components from elsewhere in the world to keep cost low and make those sales, then its worth it. Besides in cases like the predator there are still US jobs attached to it. This system in particular is our low cost system, on the Premium ES 5 kW we use only US made Kohler engines with liquid cooling.

Here is the Kohler we use, this is a $2600.00 engine. Nearly four times the cost of the Predator and that’s without markup.

http://www.kohlerengines.com/onlinecatalog/productDetail.htm?productNumber=Aegis%20LH775