Who is here? 1 guest(s)
 Print Thread
My first (real) roaster
After a couple of batches in a frying pan, and one in a flour sifter over the stove, I built a simple thing, based heavily on Larry Cotton's example, with a heat gun under a flour sifter, rotated by a 12V gear motor. The heat gun is currently unmodified, and I'm using a cheap motor controller to set the speed of the wobble disk agitator.

First coffee from this roaster was drunk yesterday, and it was a very satisfying medium roast - beans from Sweet Maria's.

Edited by timbarnes on 11/10/2021 12:57 PM
...and here are a couple of photos.

timbarnes attached the following images:
coffee_2.jpg coffee_1_1.jpg

I'm glad you had a good time. My wife and I like sipping on our high-end coffee beverages. However, we have recently made the decision to begin saving money, and one of the most significant ways we are doing so is by reducing our coffee spending. Some of these cocktails appeal to me and I'd want to try to make them at home. I found various recipes online, but I'm still trying to figure out how to make the greatest espresso. I've heard nothing but good things about an espresso maker from a few of my acquaintances, so I've chosen to purchase one the following week. Now I'm really looking forward to it and accumulating recipes.

Edited by renatoa on 11/12/2021 3:55 AM
Preparing for an upgrade...

This is the TC4+ kit, from Artisanal Technologies in the UK.

My goal will be to have a standalone roaster operated by the TC4+ and aArduinoQ_PID via switches and potentiometers first, and then to hook up to Artisan running on a Raspberry Pi as a second step. But as Artisan is so convenient, I may get it all done at the same time. We'll see how it goes.

First step is to build some hardware and put it in a box. I also need to add a second thermocouple to the roaster (Bean Temp) , and then I need to take the heat gun apart so I can separate the heating element from the fan, for independent control.

Finally I should be able to integrate all the bits and have a slightly smarter roaster.

timbarnes attached the following image:
Good for you, timbarnes! Looks good. Enjoy!

Next steps: I added a thermocouple to measure the air off the heat gun, and simply attached to a multimeter it gives me a good idea of what's going on. The low setting on my heat gun gives a temperature of about 205C, and the high temp. gives me about 265C, which I guess is pretty high for coffee. Another small mod: magnets to hold the sifter / roasting chamber in place.

In the other picture you can see the follow-on - I've added a second thermocouple above / in the beans for bean temp. I'm also trying a different motor setup - the 12V motor I was using stalls with over 250g of beans, and a quick test indicates that the Black and Decker screwdriver will let me roast 350g at a time, which is about a week's supply of coffee.

I haven't completed a roast yet with the follow-on components, but hope to find some time in the next couple of days.

timbarnes attached the following images:
img_9224.jpg img_9225.jpg
Looks pretty good. You did a great job!

Here are some updates. I built up the TC4+ and connected it up with some other bits to give me control of the heat gun element, the heat gun fan, and an electric screwdriver (to rotate the beans). All in a box with an Arduino and a Raspberry Pi running Artisan.

So far I've "dry tested" it - the manual controls work, and so does Artisan (accessed over VNC). The heater is programmed to switch off if the fan or rotator are below 50% speed. There is still a fair bit of cleanup to be done - securing cables, and maybe a bit of re-routing, but it basically works.

The fan is operated by the fan control built in to the TC4+, and the rotation control uses a jellybean L298 board connected to a PWM pin. I modified the aArtisan code following renatoa's suggestion, to add an IO4 command, and support for a third potentiometer.

I learned that running a heat gun on full inside the house will set off the smoke alarms (even though I couldn't smell smoke).

timbarnes attached the following images:
coffee_13.jpg coffee_12.jpg coffee_11.jpg coffee_10.jpg coffee_9.jpg

Edited by timbarnes on 11/30/2021 12:34 AM
You should ask for the code, to save time Grin
When I told you, was already done, not a suggestion.
Good job !



renatoa wrote:

You should ask for the code, to save time Grin

Thanks so much - I thought about it, but it was an opportunity to learn a bit more about C++ and Arduino libraries, so I am happy to have spent the time. I guess I could have spent the same time reviewing and understanding your code. In any case, it gave me something to do while I was waiting for parts to arrive.

But either way, I appreciate your help and support.

Ok, another one, maybe you find it interesting, if the remaining memory of Uno allows adding these.
In the empty space above ROT:, my needs for roasting assistants led me to implement various useful info, that changes by roast phase. I have there first a dry end estimator, until dry end happens and pass, then a FC estimator, and finally, during dev phase I am showing DTR as time and %, and optionally the AUC, requested by a fellow.
Having all this info on screen make the graph redundant, actually this was my design goal, to roast un-tethered.

That does sound interesting. Could you share the code? In any case it would be good to compare how you do things with my hacks.

I also want to be able to roast with or without Artisan. I did build a Raspberry Pi into the case so I can roast with my phone or an iPad over VNC - that way I don't need strictly to be tethered.

One weakness of the current system: if I change a setting with the potentiometers, Artisan doesn't see the change. I haven't explored how the READ command in Artisan works and whether I can get settings back from the Arduino to Artisan.

Should see, if the virtual device ArduinoTC4 56 is installed.
This pseudo device reports to Artisan the actual OT1/OT2, aka HTR/FAN values, whatever is the method you are handling them, even by an AI that drives the roast.

Will prepare an excerpt of the code, is too much buried in my code, to share as is.

I do have ArduinoTC4 56 installed, and also 78 (for SV and Rotator). On more careful examination, the heater and fan values are coming through, but the rotator value is not.

I write that value in logger() (from my aArtisanQ_PID version), but it's not being picked up.

Looking at the source code for Artisan, there's code to read the arguments from the serial port, and interestingly the last value is read from the first argument, not the last argument. That means the last argument seems to be ignored, and is replaced by the ambient temperature. There's a comment that documents that this is the intended behavior.

Looking at my Artisan display, it seems that the value that I think should show the rotation speed, is in fact showing the ambient temperature (it matches the AT value on the Arduino / TC4 display).

Here's the code in question (from comm.py). The relevant line is towards the bottom, where the extraArduinoT6 variable is set to float(res[0]), rather than float(res[6]).

                    if 32 in self.aw.qmc.extradevices: # +ArduinoTC4_56
                            self.aw.qmc.extraArduinoT3 = float(res[3])
                            self.aw.qmc.extraArduinoT4 = float(res[4])
                        except Exception as e: # pylint: disable=broad-except
                            self.aw.qmc.extraArduinoT3 = 0
                            self.aw.qmc.extraArduinoT4 = 0
                        self.aw.qmc.extraArduinoT3 = -1.
                        self.aw.qmc.extraArduinoT4 = -1.
                    if 44 in self.aw.qmc.extradevices or 117 in self.aw.qmc.extradevices: # +ArduinoTC4_78 or +HB AT
                        # report SV as extraArduinoT5
                            self.aw.qmc.extraArduinoT5 = float(res[5])
                        except Exception as e: # pylint: disable=broad-except
                            self.aw.qmc.extraArduinoT5 = 0
                        # report Ambient Temperature as extraArduinoT6
                            self.aw.qmc.extraArduinoT6 = float(res[0])
                        except Exception as e: # pylint: disable=broad-except
                            self.aw.qmc.extraArduinoT6 = 0

So I guess I can try to change the Artisan code - unless there's a better way to do it.

Should read this before documenting my post in the other thread Grin

Let's have TC4 code specifics in a single place from now.

I was wondering about where to post. I'll do as you suggest. Thanks so much for the quick replies!

First roast yesterday with the new TC4+ / Artisan setup. Everything worked fine except that my BT thermocouple is wildly under-reporting the temperature. I think it's too far from the beans, and I didn't have a lid on the roasting chamber. The result was that first crack started when BT was reporting 125C.

The roast went a lot further than I would usually because of the uncalibrated temp. curve, so I have my first full city+ roast. (I usually roast medium).

I took a number of temperature readings during the roast, and have curve-fitted them to the approximate assumed temperatures. The transfer function has been added as a symbolic formula for BT. Next roast I'll add a lid and see if the compensation gets me into the right temp. range.

"If your roasts aren't good enough, you BT probe isn't close enough." Grin

Nice reference. I enjoy photography as well as coffee and electronics, but typically focus on landscape rather than street.

I found that adding a mesh lid brought the BT probe temp. into alignment, and now my roasts seem to be running a lot better. A full lid traps hot air in the top of the roaster and causes under-roasting, but the mesh seems just right. I'm sure I'll have to recalibrate if I ever modify the top for chaff collection.

Hi @timbarnes. I have added a second dc fan to the TC4+ shield design and looks like you attempted the same. Just wondering if you ever got the arduino code working with addition of a “IO4” variable to control a second dc fan via Artisan? Would you be able to share your code please and guidance of incorporating it to work with Artisan? Thanks

So you need 4 (four) control channels ?
OT1, OT2, IO3 and "IO4" ?
Pretty crowded setup there Grin

The fourth is to connect an exhaust/cooling fan. I’m only currently using OT1 (heater), IO3 for DC fan. I’m hoping I can connect another DC fan and not mess around with OT2 and another board to connect an AC fan via OT2. Am I correct to assume that you can’t connect a DC fan via OT2?

Do I also need to update code in Artisan to be able to operate a second dc fan? It doesn’t seem to have sufficient channels currently for TC4.

To maintain usage consistency, just for the love of code "tinkering" Grin there is no need to introduce an additional command for the fourth "IO4" fan... just modify the code of OT2, and handle them identically as IO3.
Output pin for this fan can be the same defined for OT2 in user.h, but for DC use directly the GPIO pin of Arduino, not the OT2 output pin of TC4 board, that is for SSR driving !

Unfortunately, I am going to need to use that additional code to add another variable to enable using a second DC fan.
My plan is to use OT1 for heater, OT2 for AC stepper motor for drum rotation, IO3 for DC fan 1, "IO4" for DC fan 2. I am definitely over designing this but I am trying to build a roaster that can roast a batch and cool a batch at the same time and re-using as much of the material from the popcorn popper as possible.

Would I be able to get your 'untested' code to have a go at adding the additional variable?

Jump to Forum: