Revisiting old topic, Heatermeter for pellet smoker.


 

Riku Naskali

TVWBB Member
Hi there,

I salvaged an old pellet smoker with presumably bad electronics. I ripped them out and decided to use my PID to control it. However on my PID I can't set output low / output high limits, which would be needed for controlling the Auger.

Is there any way to add these to Heatermeter? They limit the time the output is active in % of cycle time. The low limit would be more important, basically with Pellet smoker you'd want the Auger to run at least 10-15% of cycle time even if you'd be over your setpoint. This is to prevent the fire from going out.

And how about Heatermeter's cycle time, could it be adjusted as well?
 
This might not help, but once you have your PID tuned correctly your output will only be 0 a very small fraction of time so you wouldn't need a min output to keep the fire going.
 
I too have interest in ... well, in at least piggybacking on the HeaterMeter functionality, to be used for pellet grills. With Pellet grills, the primary means of controlling them, is by turning the auger on then off, for set periods of time. If, the auger remains off for too long, not only will the temperature inside the grill go down and down... but the fire will go out. At any given moment in time, there are a very small number of pellets and/or embers that are in the firepot. If all the embers go cold, or even most of the embers... when you dump more pellets in, the new pellets won't catch on fire. Now, there is a ignitor , that is typically used when you first start the grill up, it will heat up and catch the pellets on fire, however these ignitors don't like to be turn on while they are already warm/hot... so they really aren't to be used to re-start the fire, except possibly in vary rare circumstances. It's by far best, to never let all the embers go cold.

There is also a issue, that a minimum on time should be observed, just in case a pellet gets jammed between the auger and the side of the tube the auger goes through. The motors that drive the augers typically can overpower a pinched pellet, if they are left on long enough ( say 5 seconds), however if you try to turn the auger on/off too fast, you may never get past the jammed pellet and your pellet grill sits there suffering, with no new pellets being dumped into the firepot, then the embers go cold... and you have failure.

A good / minimum cycle period is about 20 seconds, with a minimum of about 20% duty cycle... at that, your on time would be just 4 seconds, which is sort of pushing the low end of what would work if you get one of those jammed pellets.

Ideally, the length of the cycle/period would be variable from about 20 seconds up to maybe 60 seconds. There would need to be a minimum duty cycle. Potentially there could be a maximum duty cycle as well, but that's not critical really.

For more advanced control of a pellet grill, you could get involved in controlling the combustion fan as well, but as a basic way of controlling temperatures, you just leave the fan running full speed and adjust the duty cycle of the auger feed.

If you want soup to nuts pellet grill control, you also need a way to turn the ignitor on/off, typically this gets turned on once at startup, then turned off after a couple minutes ( to keep it from burning out prematurely ), or when the temperature of the grill starts to rise, which ever comes first.

So for full blown pellet grill controller, you'd need three outputs, none of which would be PWM, just a binary signal, controlling either a mechanical relay or a Solid State Relay. Typically but not always, the electrical components of the grill ( Fan, Auger motor, and ignitor ) all operate on household AC power. Some grills do use DC, but they are actually kind of rare... Now, for fan speed control, DC might be the best way to go, but again fan speed control in a pellet grill is considered a pretty advanced technique for controlling the temperature.
 
Yeah,

And I can't set minimum on time on my PID. I ordered a new one that can do that, but unfortunately looks like it only has relay output and no alarm outputs at all.

I modified the relay output to SSR output, but I can't be bothered to install new components to enable the alarm for the igniter. Now I have two PID's, one has settings for low/high on time and the other one has all the correct outputs. And I also have Heatermeter. Damn, I should combine them all together ;-)

Or I need to test it with two PID's and two temp probes, other one driving the igniter and other one the Auger :mad:

I was going to use SSR to drive the Auger and use one alarm for the heat rod / igniter. Fan would be always on.
 
With my current PID setup, I just use the original controller to drive the ignitor, which just has a timer... after a couple minutes the power to the ignitor turns off... The fan is left to run full speed... So, while my PID has alarms, I don't bother to use them for anything.

The basic operation is pretty straight forward... if I had more time and/or was a better programmer, I'd already have built a device... Heck , I currently have 3 Raspberry Pis ( two v3, and one zero ), and probably 5 or 6 arduinios... basically, I have about 90% of what it will take to build something... just missing the know how to make it all work.

Back to the ignitor... you really only need a little timer of some sort, turn it on to start up, let it turn itself off after a timer runs down. Trying to restart a Pellet Grill in the event of a flameout is a kinda tricky thing... Mainly because you don't really know what caused the flameout, so you'd just be making a guess... so I consider any sort of automated re-ignite after a problem, to be a advanced feature that most would never need ... it could even be slightly dangerous... I've heard of pellet grills sort of explode when trying to re-ignite... Apparently combustible gasses can fill the chamber during certain flameout conditions, causing a small explosion of gasses when re-igniting. Probably not enough to cause anyone physical harm, but just something to be aware of. For me, I don't plan on trying to implement any sort of re-ignition feature.
 
Glenn,

I'm really thinking about modifying one of my 3 heatermeters to attempt to control my traeger. As you said, I don't think it would be too terribly hard to modify things to work.
 
Replying from another thread:
As far as I know, no one yet has modified the heatmeter to work with a pellet grill. You are correct, that at a minimum , you would need to attach a relay to the normal fan output of the heater meter. After that , or before that, you'd have to come up with a way to cycle the 'fan' output on and off in a pattern that worked well for driving the auger of the pellet grill... It really shouldn't be that hard. However once you get beyond the basics of just making it work... then your at a point where it really doesn't work REALLY well and has a lot of parts and features that aren't being used, because it wasn't designed to drive a pellet grill. :(

For full blown pellet grill control, you would want a method to turn on the pellet ignitor ( at startup ) and to turn the fan on, in addition to controlling the auger feed. At some level, you'd just start to be cobbling things together at a level where it might be better just to start from scratch. As I have said before, I believe it's actually possible to do with little more then a ESP8266, if it weren't for the fact that the ESP8266 has just one 10 bit AD converter. To control the outputs for Fan, Auger, ignitor I'd use a four channel SSR. As for display... well , once you get it connected to WiFi, display screen is just a 'frill'. :). Anyway... I keep coming back to this idea that I just want some really simple hardware/software that does the bare minimum...

I also like the idea of being able to build a multiple probe temperature reading device, with no ability at all to control anything, and doing it as cheaply as possible. If the 'server' end was easily ready to accept/listen to a variety of devices, this would be trivial with the kind of hardware that's out there now days.

My problem is... that at this point in time, I don't have enough of a skill set to make it all happen myself.

Is the fan a 120v fan? how does the ignition currently work (physically)? I'm thinking it really wouldn't be too bad adding pellet cooker control to the heatermeter avr code but since I have never used one my self I'm not sure what it takes. I'd be happy to help and throw out ideas for you all to try.

[EDIT]
Oh see, so the fan is 120v and is just on or off right? I assume it runs the entire time? If that's so you wouldn't need to change anything for the AVR, just plug that sucker into the wall?
The ignitor is just a heating element right? That could certainly be controlled by the AVR.

As far as AVR code extra features it doesn't do a whole lot else than control the temperature of the cooker. What extra stuff are you wanting to get rid of?
 
Last edited:
With most and all the pellet grills that I own, the fan, auger, and ignitor are all powered by AC.

Pellet grills basically work by feeding pellets into a burn pot. The more pellets dropped in, the hotter things get ( to a point), the fewer pellets dropped in the lower the temperature will be. Think of it a bit like a old steam powered locomotive, where a guy shovels coal into the fire. Also just like with the train, if you stop putting more fuel in for too long, the fire will go out and you'd then have to go through another startup process.

The fan is often just left on for the duration of the cook, running at full speed. However, some more advanced pellet grill controls, turn the fan off periodically, if they see the temperature rising too rapidly, but this is something I consider to be a advanced operation and I would not attempt to do this until I was much further into a project like this. To start, it's best to just turn the fan on and leave it on , maybe at shutdown leave it on for some timed period to try and blow out some of the ashes.. ( shutdown mode).

At startup, a ignitor ( a very hot rod , that is capable of catching wood pellets on fire ) turns on , until the fire gets going, once the fire gets going, it's turned off. Some very basic pellet grill controllers, just use a timer and turn the ignitor on for say 5 minutes then turn it off, when they do this, they are making a assumption that the fire got going and the ignitor isn't needed any longer. A little more advanced method would be to watch the temperature at startup and turn the ignitor off once things heated up, or shut things down if that didn't occur within some set period of time.

Bottom line is that yes.. typically all these things are either on or off. I mean, you could think of things like PWM, but the cycle time is in minutes or factions of minutes , rather then fractions of seconds.
 
I would start with this to get auger control:

1) Adjust TEMP_MEASURE_PERIOD to 60,000 in grillpid_conf.h

2) Adjust calcPidOutput, in grillpid.cpp, to account for the change in sample time as follows:
a) Line 491: _pidCurrent[PIDI] += Pid[PIDI] * (TEMP_MEASURE_PERIOD / 1000.0) * error;
b) Line 497: _pidCurrent[PIDD] = Pid[PIDD] / (TEMP_MEASURE_PERIOD / 1000.0) * (Probes[TEMP_CTRL]->TemperatureAvg - currentTemp);

3) In hmcore.h add a line for the auger relay pin like #define PIN_AUGER something

4) We need to modify GrillPid::doWork (line 747) to turn the auger relay pin high for output% of TEMP_MEASURE_PERIOD.
a) To do this you will need to add an 'if statement' to check whether or not it's time to switch the auger pin off, this will need to be called after line 749 and before the current line 750. for example if( elapsed > augerOnTime ) { analogWrite(PIN_AUGER, LOW); }
b) (I think) around line 795 you would add a statement switch the relay pin on. for example: if ( _pidOutput >0 ) { analogWrite(PIN_AUGER, HIGH); augerOnTime = _pidOutput * TEMP_MEASURE_PERIOD / 100.0; }
c) declare "int augerOnTime;" somewhere

There probably needs to be some error checking in there somewhere, none of this is tested by me. It's also bypassing commitPidOutput() which is probably bad form.

But really it shouldn't take much more than that to get the auger under control.

(I'm assuming the auger motor has 2 speeds: on and off. Correct?)
 
Last edited:
With most and all the pellet grills that I own, the fan, auger, and ignitor are all powered by AC.

Consider the fact that the igniter doesn't stay lit though, once the fire gets going, or at least not on my Yoder. They've stated before that it uses something like 150-200W of power on startup, and this is to get the igniter red hot, but once the fire is going, overall usage is about 50W at most. This is all from the auger turning to dispense pellets and 2 fans running full-time.

So technically he could either manually light the pellets, or flip a switch to control an igniter stick manually, but it still leaves 2 things to control -- the fan and auger, and those of course are not optional items.

This project sounds cool but also sounds somewhat wasteful. It'll be interesting to see what comes out of OP's efforts.
 
I think it would be trivial on the AVR side to include the igniter. Maybe not so much on the LinkMeter side. But I'd concentrate on getting the auger under control first.
 
So on the traeger, the hot rod turns on for 4 minutes.

The one issue that is important is to always have some feed of pellets into the firepot to keep the grill from flaming out. Most of the control systems even with PID still input pellets in every so often. I found a thread earlier that explains the intervals for the stock controller.

But yes, the auger is on/off, the fan is on/off and the igniter is on/off. Basically the fan can be run all the time.
 
Yes, so the main issues I see with actually taking heatermeter hardware and trying to modify it to work with a pellet grill situations, is there aren't enough unused output pins. You can repurpose the HM 'fan' output , since it's already set up to turn on and off in a similar fashion to what the auger will need to do on a pellet grill. Since there is no use for a servo on a pellet grill that I'm aware of, it might be logical to use that output for either the fan or the igniter rod. Assuming you could get by without a backlight on the LCD, you could borrow that for the remaining out put control needed. Of course as said... the fan could just be turned on and left on, using nothing more then a switch, however since really fine temperature control gets done on the higher end grills, it would be nice to have a way to control fan in the future if/when people progress into better DIY pellet grill control methods.

So on the traeger, the hot rod turns on for 4 minutes.

The one issue that is important is to always have some feed of pellets into the firepot to keep the grill from flaming out. Most of the control systems even with PID still input pellets in every so often. I found a thread earlier that explains the intervals for the stock controller.

But yes, the auger is on/off, the fan is on/off and the igniter is on/off. Basically the fan can be run all the time.
 
Digital pin 7 is still unused. I'd use that one for the auger modifications I posted earlier to get that working first as that seems to be priority. After that's going, like you were saying, you could easily repurpose the blower, blower feedback, and servo pins since they wont be needed for a pellet grill. Plan on using RFM12? If not you can get back digital 10. Digital pin 9 is just used by an LED, that would be one of the first to go on my list. Plan on using all four temperature probes?

My line of thought assumes you are not using an official heatermeter pcb, but rather an arduino uno. While you could adapt the heatermeter code easily enough, trying to adapt the heatermeter pcb wouldn't be any fun.

[Edit] I take that last statement back, repurpusing the heatermeter pcb might not be so bad.

[Edit 2]
Digital pin 7 is already available.

To free up digital pin 9 from the LED:
1) comment out line #37 from hmcore.h
2) comment out line #1262 from hmcore.cpp
3) comment out line #1272 from hmcore.cpp

To free up digital pin 10 from the RFM12:
1) comment out line #8 in hmcore.h

These changes compile in the Arduino IDE without error, but aren't tested.

FYI: those pins on the heatermeter pcb:
cyD3whg.png


But I would get it working on an UNO/breadboard before I hacked away at the pcb.
 
Last edited:
Well, since I don't have a heatermeter PCB, and don't really need all the bells and whistles of one, it would make perfect sense for me to start out with a basic Arduino. I have a couple Arduion Mega boards, and one Arduino Mini (5v)....

However, to be honest, I'm quite confused by trying to figure out how to load the software on one of my Arduinos. My experience at this point with Arduio is just in having written a few simple sketches, just to turn on a light, or to read a analog input.

When I look at the Heatermeter arduino code, I don't even hardly know where to begin ... cpp files .h files, etc... it's all greek to me at this point. I'm sure it's not that hard to understand, but all the instructions on how to load software on a heatermeter, seem to assume I built the thing from a PCB and/or download the entire software package and load it all in one big install. I believe all I really want to do is load / install just a few small pieces of the entire package, but I just don't even know how to begin.

Currently, I have enough hardware, to read temperature from a Thermistor as well as control AC power from a low power ( 3 to 5 volt input ). I do have a LCD, but in all honestly I don't even care if I have a LCD initially, I'd bee more then willing to do initial testing using a serial interface, assuming that's possible. At least initially, that's where I'd like to start, if I get it doing something useful, I'd then move into getting a LCD to display temperatures and such, and try to make it function in a standalone mode, but for starters, I'd actually prefer just making it actually do something... but again, I'm confused by how to get the correct software components put on the Arduino..


Digital pin 7 is still unused. I'd use that one for the auger modifications I posted earlier to get that working first as that seems to be priority. After that's going, like you were saying, you could easily repurpose the blower, blower feedback, and servo pins since they wont be needed for a pellet grill. Plan on using RFM12? If not you can get back digital 10. Digital pin 9 is just used by an LED, that would be one of the first to go on my list. Plan on using all four temperature probes?

My line of thought assumes you are not using an official heatermeter pcb, but rather an arduino uno. While you could adapt the heatermeter code easily enough, trying to adapt the heatermeter pcb wouldn't be any fun.

[Edit] I take that last statement back, repurpusing the heatermeter pcb might not be so bad.

[Edit 2]
Digital pin 7 is already available.

To free up digital pin 9 from the LED:
1) comment out line #37 from hmcore.h
2) comment out line #1262 from hmcore.cpp
3) comment out line #1272 from hmcore.cpp

To free up digital pin 10 from the RFM12:
1) comment out line #8 in hmcore.h

These changes compile in the Arduino IDE without error, but aren't tested.

FYI: those pins on the heatermeter pcb:
cyD3whg.png


But I would get it working on an UNO/breadboard before I hacked away at the pcb.
 
Well, since I don't have a heatermeter PCB, and don't really need all the bells and whistles of one, it would make perfect sense for me to start out with a basic Arduino. I have a couple Arduion Mega boards, and one Arduino Mini (5v)....

However, to be honest, I'm quite confused by trying to figure out how to load the software on one of my Arduinos. My experience at this point with Arduio is just in having written a few simple sketches, just to turn on a light, or to read a analog input.

When I look at the Heatermeter arduino code, I don't even hardly know where to begin ... cpp files .h files, etc... it's all greek to me at this point. I'm sure it's not that hard to understand, but all the instructions on how to load software on a heatermeter, seem to assume I built the thing from a PCB and/or download the entire software package and load it all in one big install. I believe all I really want to do is load / install just a few small pieces of the entire package, but I just don't even know how to begin.

Currently, I have enough hardware, to read temperature from a Thermistor as well as control AC power from a low power ( 3 to 5 volt input ). I do have a LCD, but in all honestly I don't even care if I have a LCD initially, I'd bee more then willing to do initial testing using a serial interface, assuming that's possible. At least initially, that's where I'd like to start, if I get it doing something useful, I'd then move into getting a LCD to display temperatures and such, and try to make it function in a standalone mode, but for starters, I'd actually prefer just making it actually do something... but again, I'm confused by how to get the correct software components put on the Arduino..

To compile the AVR code:
1) Go to HeaterMeter's github project page and download the whole project, it's really small, the entire zip file is 1mb. Here is a direct link.
2) Unzip the file somewhere
3) Go to the unzipped directory, then to HeaterMeter-master\arduino\libraries . There will four folders in this directory, copy and paste them into your arduino ide installation's libraries folder. On my windows 7 machine my arduino ide library folder is in My Documents\Arduino\libraries\ . [Adding libraries to arduino]
4) Go back to the unzipped heater meter directory, navigate to HeaterMeter-master\arduino\heatermeter and double click on heatermeter.ino (It'll be the only file with the arduino icon)

You have now loaded the entire avr source code into the arduino IDE. You can compile and upload to your uno (or which ever board you have) just like you did with your blink sketches with the USB cable, no need to have the heatermeter pcb.

In the IDE there is a small number in the very bottom left of the window, this is the line number that your cursor is currently on. (In regards to things like "Comment out line #xx")

Once you upload the sketch to your uno you can open the serial monitor and at baud 38400 you can see the heatermeter output, as well as send it commands. You can check this out starting at line 47 to see the commands you want to send it.

For example, to change the setpoint to 230 degrees F you would type /set?sp=230F and click send. If it worked you would see the arduino's output change from $HMSU,225,... to $HMSU,230,....

For the purposes of testing our pins for the relays you could just wire up a resistor and led, exactly like your blink examples, and watch those leds to make sure everything is firing like it's supposed to.

To search around the code I use the github page. If you go there, and "This repository" search box on the top right of the page it will search the whole code base. So for example, when I was looking for what was on digital pin 9 I went to the pin definitions in hmcore.h, I found on line 37 that pin 9 was PIN_WIRELESS_LED. I then went to the github page and searched for PIN_WIRELESS_LED and found that the only other places it was mentioned was in hmcore.cpp. Knowing that I went back to hmcore.cpp in the arduino ide, commented out the lines found in my search on github, and now (presumably) the heatermeter code no longer uses that pin and we're free to use it for our purposes. Of course, you'll want to analyze the code around it and figure out how it all works together before you start cutting stuff out all willy nilly.
 
Last edited:
Thanks, this looks pretty clear, should help me get either to where I need to be, or much much closer, then I had been getting on my own. I'll try and do this tonight when I get home. From what I've seen so far, it's making a lot more sense now. :)


To compile the AVR code:
1) Go to HeaterMeter's github project page and download the whole project, it's really small, the entire zip file is 1mb. Here is a direct link.
2) Unzip the file somewhere
3) Go to the unzipped directory, then to HeaterMeter-master\arduino\libraries . There will four folders in this directory, copy and paste them into your arduino ide installation's libraries folder. On my windows 7 machine my arduino ide library folder is in My Documents\Arduino\libraries\ . [Adding libraries to arduino]
4) Go back to the unzipped heater meter directory, navigate to HeaterMeter-master\arduino\heatermeter and double click on heatermeter.ino (It'll be the only file with the arduino icon)

You have now loaded the entire avr source code into the arduino IDE. You can compile and upload to your uno (or which ever board you have) just like you did with your blink sketches with the USB cable, no need to have the heatermeter pcb.

In the IDE there is a small number in the very bottom left of the window, this is the line number that your cursor is currently on. (In regards to things like "Comment out line #xx")

Once you upload the sketch to your uno you can open the serial monitor and at baud 38400 you can see the heatermeter output, as well as send it commands. You can check this out starting at line 47 to see the commands you want to send it.

For example, to change the setpoint to 230 degrees F you would type /set?sp=230F and click send. If it worked you would see the arduino's output change from $HMSU,225,... to $HMSU,230,....

For the purposes of testing our pins for the relays you could just wire up a resistor and led, exactly like your blink examples, and watch those leds to make sure everything is firing like it's supposed to.

To search around the code I use the github page. If you go there, and "This repository" search box on the top right of the page it will search the whole code base. So for example, when I was looking for what was on digital pin 9 I went to the pin definitions in hmcore.h, I found on line 37 that pin 9 was PIN_WIRELESS_LED. I then went to the github page and searched for PIN_WIRELESS_LED and found that the only other places it was mentioned was in hmcore.cpp. Knowing that I went back to hmcore.cpp in the arduino ide, commented out the lines found in my search on github, and now (presumably) the heatermeter code no longer uses that pin and we're free to use it for our purposes. Of course, you'll want to analyze the code around it and figure out how it all works together before you start cutting stuff out all willy nilly.
 
I would start with this to get auger control:

1) Adjust TEMP_MEASURE_PERIOD to 60,000 in grillpid_conf.h

2) Adjust calcPidOutput, in grillpid.cpp, to account for the change in sample time as follows:
a) Line 491: _pidCurrent[PIDI] += Pid[PIDI] * (TEMP_MEASURE_PERIOD / 1000.0) * error;
b) Line 497: _pidCurrent[PIDD] = Pid[PIDD] / (TEMP_MEASURE_PERIOD / 1000.0) * (Probes[TEMP_CTRL]->TemperatureAvg - currentTemp);

3) In hmcore.h add a line for the auger relay pin like #define PIN_AUGER something

4) We need to modify GrillPid::doWork (line 747) to turn the auger relay pin high for output% of TEMP_MEASURE_PERIOD.
a) To do this you will need to add an 'if statement' to check whether or not it's time to switch the auger pin off, this will need to be called after line 749 and before the current line 750. for example if( elapsed > augerOnTime ) { analogWrite(PIN_AUGER, LOW); }
b) (I think) around line 795 you would add a statement switch the relay pin on. for example: if ( _pidOutput >0 ) { analogWrite(PIN_AUGER, HIGH); augerOnTime = _pidOutput * TEMP_MEASURE_PERIOD / 100.0; }
c) declare "int augerOnTime;" somewhere

There probably needs to be some error checking in there somewhere, none of this is tested by me. It's also bypassing commitPidOutput() which is probably bad form.

But really it shouldn't take much more than that to get the auger under control.

(I'm assuming the auger motor has 2 speeds: on and off. Correct?)

FYI This code does not work as stated. The concept is good, just this code will take some debugging. Sorry, I don't have time this evening.
 
I did manage to get all the code to compile, started to make some of the suggested modifications and such, still compiles... I haven't yet connected any hardware, so I wouldn't have any idea at this point , what it is or isn't capable of. While doing all of the above, I've at least gained some further familiarity with how everything comes together.

Pin 7 apparently was at one point or another going to be used for a 'soft reset', so to try and use that pin , you have to comment out some lines. Hopefully over time, I will better understand more of this code and be able to contribute a bit more to finding ways to incorporate pellet grill control into it.

Let me leave you with this final thought... and it is really , something that would be used after the basics have been accomplished... The standard/basic pellet grill controls temperature , by only adjusting the feed rate of the auger. If ambient conditions remain constant, and the lid isn't up, all you do is maintain a single steady duty cycle, that keeps feeding pellets in at the same rate. If ambient temperatures go up or down, you might have to increase or decrease the duty cycle / auger feed rate. More advanced grills start to modify the fan to try and slow down the burn rate at times ( when the pellets go from smoldering to full burn) to try and even out the temperature swings that naturally occur on the basic pellet grill. That fan speed adjustment in many ways, is very similar to what the heatermeter normally does... increasing the fan rate when things have cooled down a bit too much, decreasing it as temperature rises above the desired set point. The advanced pellet grill control, would need to find a steady auger feed rate, then adjust the fan a bit here and there to even things out even more. So... Originally, I had been thinking of totally abandoning the fan control that the heatermeter does and only control auger... but the more I think about it, it's good to leave the adjustable fan concept in the code ( it might need further modifications to actually work well in conjunction with the auger feed however ).

Anyway, thank you all for contributing to the cause... :)
 

 

Back
Top