使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

製作緣起

我家的天兵烘豆師,在清潔KENT500烘豆機的時候把量測瓦斯的「壓力傳送器」線拔掉了,於是這位電子麻瓜就一不做二不休的將拔出來的線材一股腦塞回去,啪滋一聲,只有單片機受傷的世界就完成了,基於死馬當活馬醫的情形下,壓力傳送器也在後面的測試中試中灰飛煙滅…

當年的KENT500也早已在半開放式的頂樓中逐漸滄桑,我們懷念他
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

在死機之後,想到了最近接觸了一點Arduino,如果能學(複)以(製)致(貼)用(上),那豈不是美滋滋,既然只是讀取Sensor,那應該不難,肯定有些東西可以抄襲(?

上網爬文之後,在m01看到了xhining大這篇文章

使用Arduino自製USB(RS-232、藍牙)K-type溫度記錄器搭配RoastLogger(類似Artisan)

更是加深了我自己動手搞看看的念頭,不過身為一個0.1隻腳踏進電子世界,99.99由麻瓜組成的我,什麼TC4之類的真是有看沒有懂,而本篇文章的作者也不更新了,但至少知道大概要用甚麼Sensor來架構了,裡面不少高手可以借鏡。

後來在網路世界遨遊又看到了這個影片


在詢問山姆大之後,獲得了不少幫助,也奠定了我完成本次製作的…99%程式內容,在此非常感謝山姆大大提供的程式碼,所以說,對單片機不熟的同學,可以交給熱心的攤主處理(?

硬體架構

既然原本的控制盒死亡,那就只能再做一個,同時也要符合原本的控制需求,不單單只是溫度讀取而已,參考阿黃盒子上的功能,還需要風門控制、瓦斯表讀取、瓦斯點火器,既然有了方向那就開幹吧!

山姆大的影片是使用ESP32,正巧我手上有ESP32S2的板子,不過再詢問山姆大之後,他說已經改用UNO開發版了,所以我也搞了塊UNO來用,沒辦法,誰叫人家是親兒子呢

使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體


但是在使用UNO之後,又衍生一個問題 : 記憶體不足,Arduino給的規格實在是太小氣了,加了幾個小程式區塊就爆容量了,沒有辦法只好再去買一塊MEGA2560來用,不過這次我買的就不是原廠模塊的板子了,而是陸製的MEGA 2560 Pro Mini,迷你的身板豐富的IO腳位是選他的主因,另外在使用Arduino時要注意,他的USB晶片是哪顆,如果是CH340,要另外安裝Driver才能使用(driver叫CH341)

既然有控制盒那就要有個螢幕,LCD顯示部分,原本想用LCD1602,但算了一下顯示空間太小了,就打算用LCD2004,後來看到了ST7920,128x64,還可以用U8G2自由排版,價格也不貴,整個美滋滋
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

K-TYPE溫度放大器選用MAX6675,藍芽模組我用HC-06,藍芽是用來Debug的,但山姆大的程式幾乎完善了整個架構,其餘的附加的小程式獨力測試就足夠了,藍芽這塊可有可無。
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

讀取瓦斯的壓力傳送器部分有兩種,電壓式跟電流式
電流壓力傳送器一共有兩條線,一條是接外部電源的12V供電電壓,一條則是用來接”電流計”的負端
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

原本的KENT500是使用台製DCbox DC-51,4-20mA的電流式壓力傳送器,蝦皮上的益成自動控制材料行有賣,不過型號有更新,詳細請自行詢問囉
如果使用這種電流式壓力傳送器,那就必須把電流轉成電壓,才能供給Arduino讀取,需要再配套電流轉電壓模組 4-20mA 轉 0-5V
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

不過既然我都要換傳送器了,直接訂製0-5V電壓輸出模式的就好,我是從淘寶買米科壓力傳送器(訂製12V電源,0-5V輸出),DCbox 的一顆要1700上下,我先跟米科訂了所以後來沒有跟益成買,米科約1200上下。
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

風門部分,看了一下阿黃的開發文章,我是有看沒有懂,因為他好像自己更新過蠻多版本的風門,有機械式風門,後來好像換成DC控制三線風門,我考慮了一下決定改用PWM控制,感覺是最方便的,當然如果要用三線控制可能要自己研究一下,應該不難。
既然要換,那就用最頂的,既然要排風 那應該就要耐熱,於是看上了貴鬆鬆的貓頭鷹工業級風扇,結果拆開阿黃的風門一看…哪泥摳咧o.O

使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體


最後選用台達PFC1212DE 12038 12V 4.8A 12CM超級暴力扇,標稱5500轉,實測最高約5000轉上下,350一顆真是俗擱大碗
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

既然風扇都這麼暴力了,那電源也不能太馬虎,看明緯幾款12V電源好像價格差不多,就選大電流的了,明緯 LRS-100-12 12V 8.5A
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

不過我還是要吐槽一下明緯的電源標示,寫+V、 -V,我還以為是跨度24V正負電源,結果用三用電表一量總共12V,那個-V根本是地,大家在使用電源時還是千萬記得先用三用電表量一下電壓,不然器材冒煙花,就是你逝去的青春與汗水

另外給我重新選擇的話,我會建議換成5V+12V雙路輸出的電源供應器(RT-85)因為Arduino的周邊器件也會使用到5V電源,如果是用便宜的DC-DC轉換器,因為負載導致圖波,很有可能燒掉Arduino或周邊原件

程式邏輯

軟體的部基本上就是在山姆大提供的.ino中再額外多加一些不同功能的區塊,模擬TC4的架構與Artisan溝通
《Artisan 與 MAX6675 的完美結合 | Arduino 教學 #22》


UnoTC4
需要安裝的Library從程式裡面就可以看出端倪


#include arduino.h
#include softwareserial.h
#include max6675.h
#include "SevSeg.h"


PWM風扇控制&瓦斯偵測

第一步影片,講解了關於可變電阻控制電壓,經過Arduino偵測後輸出不同的PWM控制燈泡

再看第二個影片,說明了各式風扇控制的方式與程式碼,其中的4線PWM就是我們需要的程式

將這兩個概念結合起來,我們就可以得到一個利用可變電阻(VR)控制PWM風扇的方法了

已知電壓讀取值為0~1023,PWM訊號為0~255,所以在轉換時可以用讀取值*(255/1023)來得到duty cycle
但是這樣的數據並不實用,所以我改以每5%為一個調節,0~100%就可以切成20塊,1023/20=51 255/20=12.75,但是20*12=240,所以可以再+1,另外風扇是有最低轉速的,不是PWM=0就會停轉,所以我們不需要太在意過低的PWM輸出,而且烘豆過程中也不適合風扇完全停轉

因此我將算式改為
fan_pwm= 1+(FAN_CTRL_VR/50); //將電壓值轉換為Dutycycle
fan_pwm= fan_pwm*12;

另外經過測試,風扇最低轉速約為960rpm,最高轉為5000轉
那麼風扇的開度就是
fan_percent =fan_pwm*(5/12); //風門開度百分比
if(fan_percent<21) fan_percent=20;
if(fan_percent>99) fan_percent=100;


另外關於計算rpm的部分
while((millis()-fan_time)<500){}
fan_rpm = fan_count*60; //0.5s內的plus訊號*2*60/2 = 分鐘轉速

因為2個rise訊號是一次波的周期,所以要除以2,每60秒為一分鐘,故x60,計算時間是500ms,乘以2才是1秒,所以*2*60/2=*60,不過這部分到最後又有所修改,用來結合主程式,發布在ptt的文章是舊版本的會遇到很多光怪陸離的bug,起因都是我完全不管主程式的迴圈判斷,且待後續分曉

最後風扇的小程式如下

使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

瓦斯就簡單多了,只是讀取類比值而已,當然為了避免浮動過大,還是將他進行多值平均才吐出數值,利用millis(),讓瓦斯的數值不斷累加,累加1秒後才進行數值平均,不過在最新版的更新中,我也將它結合到主程式中,理由同上面風扇程式,另外也取消掉了平均值,因為實際效益不大
有平均跟沒平均使用上並沒有什麼太多的差別

使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

LCD螢幕顯示

在LCD的選擇上,原本我是考慮LCD1602,但數了一下字數,似乎有點侷限,轉而考慮LCD2004,國外不少TC4的用家就是使用1602、2004來做為螢幕顯示
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

於是我用EXCEL對LCD2004排版之後如下
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

似乎還是很擁擠阿

因此到後來看到了128x64的ST7920後我就轉而投向這塊便宜又強大的面板了,顯示部分我使用U8G2函示庫來建立整個畫面的構成,U8G2是一個可玩性高、支援螢幕豐富的函示庫,就算要用中文顯示也能支援、自製字庫(儘管ST7920的函示庫本身也支援部分中文)

對於U8G2有興趣的可以參考下列幾篇文章,都有非常詳細的說明,利用文章裡教的一些函式慢慢堆疊出屬於自己風格的畫面
[Arduino範例] 一套u8g2函式庫,玩遍所有OLED

Arduino筆記(102):u8g2 程式庫繪製圖形及顯示中文字

玩轉u8g2 OLED庫,一篇就夠

不過很怪異的是,我在使用U8G2顯示中文卻失敗了,但是同樣的程式跑在SSD1306 OLED卻是可行的,不確定是出了什麼樣的問題,好在我本身就不考慮使用中文顯示,畢竟太佔空間了,而且讓人覺得不夠「有趣」,為了讓畫面更有「藝術氣息」,我使用圖形來代替爐溫、豆溫、風門、瓦斯
利用EXCEL「設計」之後,再到這個網站一個個點出要發亮的區域,就會出現圖片的陣列囉
TTL字型轉點矩陣(Arduino U8G)

使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

然而到後來我才知道,原來這些顯示的陣列,跟顯示出來後的畫面會左右相反,所以做好之後又手動一列列修改,才完成最後的圖標陣列,然後這裡也出現了另一個BUG,就是風車圖案不能放在太下面的位置,否則就會在他的正下方中央,出現一個亮點,非常詭異的BUG卻也無法解釋,反正只要不把風車放在最下方就可以了。

另外ST7920分為藍光白字,跟黃光黑字兩款,我買的是藍光白字,所以畫面要反黑,應該是這樣
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

測試一下顯示效果
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

在來回到軟體的部分,必須宣告你使用了哪一塊板子

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);

其中SW 好像是代表 軟體模擬SPI,這時候你可以自訂任意腳位,像我使用了44、42、46,reset不接,所以我的宣告是

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=E*/ 46, /* data=R/W*/ 44, /* CS=RS*/ 42, /* reset=*/ U8X8_PIN_NONE );

接下來只要在程式裡面宣告自己要使用的圖形陣列,利用u8g2的函式一個個繪畫出來就完成了,然後我會把不需要更新的部分(框架)放在u8g2.firstPage();需要更新的放在do{}while ( u8g2.nextPage() );之間,看起來很複雜沒有關係,其實只要把範例程式修改一番就可以創造自己的頁面了,排版的部分就是按計算機,計算一個字佔了幾個寬度,然後try and error,不斷的微調。

程式碼的部分
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

排版測試出來的結果
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

當然最終都是不斷調整的,我打算把KENT500的字樣改成時間顯示,左側溫度改成ROR顯示、右側濕度是風門濕度,當然這些部分還沒做出來,不過就算做失敗也問題不大,畢竟這些花里胡俏的東西其實用處不大只是為了填補面板,不然Artisan都是有這些資訊的顯示的。

另外為了讓螢幕面板不要更新頻繁,造成數值不斷浮動顯示,我依樣使用millis()進行控制
if(lcd_time==0)
lcd_time=millis();
if( (millis()-lcd_time)>500){
/*u8g2的程式碼*/ }
lcd_time==0;

這樣一來螢幕就會一秒更新一次顯示內容,比較不會讓人眼花撩亂
不過當結合到主程式後就不需要了,因為主程式本身就是750ms做一次數據更新(我後來將它降為500ms)

另外原本我還打算加入MP3語音模組進行溫度的播報,不過買了兩顆MP3模組,一顆燒壞,一顆本身就是壞的,上網詢問後大家評價這塊模組很容易故障、焊接錯誤,所以最後就乾脆不做這個部分的功能了,當然這些小功能製作並不困難,有興趣的可以自行搜尋Arduino、MP3,利用if-else或switch這些簡單的判斷函式就能做出語音播報系統了。

程式整合

接下來這部分PTT文章沒有,應該會再發一篇更新,因為這是最近才發現自己程式上的失誤
原本的程式是750ms一次溫度擷取,然後4次平均後吐出平均BT值,然後Artisan 4次(3秒鐘)讀取一次數值,我把主程式修改成500ms,2秒讀一次值。

但在讀取後常常發生掉值、連接錯誤的情況發生,採樣也不是2秒。後來我才發現我把風扇控制、LCD顯示、瓦斯偵測等等,都寫在原本程式之外,總時長約400ms,加起來差不多2.4秒沒錯。
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

所以正確的寫法應該是,把所有的程式整合到主程式的條件判斷內(一個計時迴圈)

程式如下(高解析圖片)
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體


這樣寫之後,確實是2秒穩定採樣一次,Artisan也不再報錯,也不會有掉值的情況了
基本上軟體的部分就到這裡告一段落,之後會開始講關於硬體製作與規劃的過程

機殼規劃與安裝

硬體的部分,我參考了阿黃的控制盒,要有溫度輸入、瓦斯表輸入、風扇控制、瓦斯點火器需要110V輸出,插座有幾個,分別是馬達、冷卻風扇、電燈(壞了,不重要)
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體


所以一開始就先買一些基本硬體,再稍微研究過瓦斯的壓力傳送器是電流式之後買了一個電流轉電壓的模組(那時候還不知道DCbox DC51已經魂歸離恨天)
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

稍微排列一下,瓦斯點火器用2pin航空接頭(110v)、DB9作單片機的輸出,確定實坪登錄後就可以開始挑選機殼畫面板開孔了,於是畫了第一版的機殼
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

應該就會長這個樣子
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

後來看到清風有賣美規插座,於是我又改成了美規插座、畫了新的開孔就跟清風下單
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

結果他們給我第一版的…而且前面19mm的孔畫成17mm,向商家反應後對方承諾會幫我重做一套面板,不過不得不說這是危機也是轉機,因為我就發現了其實有些孔不是那麼準確,螢幕鎖孔不對位,螢幕的弧角讓長方形要做的更寬才放得下去,後面板用DB9無法固定,AC座鎖孔距離不太對、音量旋鈕沒辦法鎖上等等…。
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體


於是我又畫了第三板,這次我取消了螢幕鎖孔、後面板全部改成航空端子,螢幕方形開孔擴大,為了避免自己畫的不準確,乾脆請對方幫忙畫一些我不太清楚的部分,不過這樣其實還是有些小問題,例如螢幕要自己想辦法卡上去、前面沒有按鍵開孔(後來實作出來發現有一些BUG需要按鍵來reset)
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體


盼星星盼月亮,總算盼來了新面板
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

美滋滋的旋鈕跟美規插座
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
先把後面板裝起來看看效果
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體


110V接線圖
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

先把底板開孔,電源、主板、腳墊安裝起來
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

腳墊太不穩了上點膠黏死,這東西鎖死也沒關係不要鬆動就行

使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

VR安裝,VR在規格書上面可以看到有一個小凸起,畫線打孔
後來有換VR不過定位針是一樣的
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

將MAX6675跟藍芽模組裝起來
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體


MAX6675 一開始使用O型,但拆裝實在太麻煩了,全部換成Y型
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

USB線找一條沒再用的MICRO USB斷頭做針線活,焊上USB TYPE-B母座
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

拿滑鼠測試,可以
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

加上兩個銅柱,後面再安裝上一塊壓克力擋板(以前做的)
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

不過那個縫隙看了真讓人不順眼,所以後來就用膠把它封住了
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

瓦斯點火器開關用「不鏽鋼天使眼」很貴但質感不錯,上網看一下接線圖腳位定義,用三用電表測量
電燈接法有兩種,一種是按下去亮燈,接NO,如果要平時亮燈按下去熄燈,接NC
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

全部使用插簧接線,因為航空端子也是由外往內安裝,如果焊死以後要拆裝就很麻煩了,要解焊才行
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

測試
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

螢幕因為開孔過大,另外螢幕左側有一塊3mm的凸起,會讓螢幕安裝時無法平整
所以要再畫一塊3mm的LCD安裝板
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

第一版打樣實品,有點脆弱阿,孔位也沒對準
而且不得不說這片LCD的開孔是真的怪異,都不太對稱的
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

於是又畫了一個新的版本,孔位開到5mm,這樣不管怎麼飄移都沒問題了吧
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

之後就要固定在前面板了,所以要鑽孔,先拿之前的廢板試看看
2.5mm鑽尾+洗螺紋,可以
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

結果鑽第一個孔,一恍神沒壓好板子,螺紋鑽尾就斷在裡面了,花了不少力氣才把他拔出來
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

第二個孔直接拿螺絲硬鎖吧,沒想到居然可以,進進出出幾次就變成螺絲的形狀惹
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

鎖了兩個孔,螢幕有點歪歪的,不管了能動就行
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
應該…還行
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

如果再有機會重做面板,我應該會選擇鋁面板在兩側更遠的地方開通孔,用來鎖壓克力板,螢幕就內部鎖壓克力板不鎖鋁板,這樣就不用擔心LCD孔位不準確的問題,然後多幾個功能開關、搖頭開關以備不時之需。
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

不過等我哪天吃飽太閒再說吧,現在能用已經夠了。

Arduino接線

一開始是選用UNO開發版,但是把幾個小程式整合起來後,記憶體容量就爆炸了,所以後來改用MEGA2560 PRO開發版,但是MEGA在使用時會有一些小BUG,下一篇會提到。
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

首先Pin腳定義要先拉出來,這部分要跟程式互相配合,腳位的定義、說明就要上網找Datasheet
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

我用EXCEL做了一張腳位圖來對應,並一邊接線、一邊填上線材顏色,這樣就不會搞不清楚自己在接什麼
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

整體的接線圖就會長這個樣子(高解析圖片)
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

MAX6675,6675走的通信協定是SPI, 其中SCK、SO腳位是可以共用的
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

6675的SCK接在MEGA上的SCK腳位(D52),SO接在板子上的MISO(D50),另外最好有一個輸出接在硬體SPI輸出上(MOSI) 也就是D53,因此我把程式碼的腳位修改如下
#define SCK_PIN 52 // D52, PB5--52
#define SO_PIN 50 // D50, PB4--50
#define CS_BT_PIN 53 // D53, PB2--53
#define CS_ET_PIN 49 // D49, PB1—49


再來是藍芽HE-06的部分,藍牙、電腦跟Arduino溝通,都需要透過一種UART介面,有兩隻腳RX、TX,用USB跟電腦連線走的就是TX0、RX0,在板子上通常預設在D0、D1腳位
既然第一個通道被占用了,有兩種方式,一個是板子支援多組UART介面,另一種是使用軟體宣告模擬UART,然後Sensor的RX要接到Arduino上的TX,TX要接到Arduino上的RX
安裝軟模擬的庫(library)#include softwareserial.h,定義接腳
#define SOFT_TX 5 // D5, PB0
#define SOFT_RX 4 // D4, PD7

使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

這樣一來只要把藍牙板的RX接到腳5,TX接到腳4就可以運作了,在這次實作中藍牙是用來Debuge檢查程式運作狀態,所以做好後其實也可有可無,另外藍牙UART吃3.3V比較穩,但Arduino都是5V輸出,所以通常會串電阻來進行壓降(詳見線路圖)

風扇跟瓦斯的部分前幾篇程式碼的部分已經介紹過了,風扇四個腳位分別是12V、GND、脈衝輸出(黃線,用來計算風扇轉速)、PWM輸入(藍線,用來接收PWM訊號),黃線要併上一個上拉電阻連到5V
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

但是不知道為什麼,轉速一直有飆升的問題,後來把雜牌電阻換成比較貴的Philips Vishay電阻才解決這個問題,臉書上的討論多數人認為是麵包板接觸不良,至於真實情況是接觸不良導致,還是真的就是電阻比較差影響到波形就不得而知了(懶得去測試)

然後控制的部分,使用類比腳A0接收可變電阻,控制電壓高低訊號,瓦斯的壓力傳送器一樣是A2類比接腳接收瓦斯的壓力傳送器電壓

風扇測試影片:


LCD也是需要宣告的,在程式碼也提過了,ST7920總共有8隻腳要接,其中GND、PSB、BLK都是接地,VCC接5V,BLA接3.3V,RS、R/W、E要接在Arduino上,宣告在42、44、46,宣告如下
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=E*/ 46, /* data=R/W*/ 44, /* CS=RS*/ 42, /* reset=*/ U8X8_PIN_NONE );
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

接好線,就可以來測試以下螢幕輸出了
螢幕測試影片:


另外還有一種叫做I2C的通信協定在腳20(SDA)、腳21(SCL),也是很多Sensor會使用的通信協定,例如溫濕度計模組GY-21,就是使用I2C通信,也把他接起來。
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

接好後的線簡直群魔亂舞,而且搖搖晃晃很容易接觸不良,所以我做了一個錯誤決定:用三秒膠黏起來,導致了塑膠發白之外還有一些膠跑到金屬針腳上,也不知道會不會影響接觸
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

後來決定全部線材換掉重新接線,接口預計是並排的杜邦接口外殼,VH端子也買回來試看看
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

後方航空端子拉出來的接線都套上熱縮套絞起來
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

試了一下,2x2以上的並排的杜邦線就很穩固了,只是要把原本的殼拆掉
使用小支的一字起或指甲剪刀把塑膠片挑起來,線就能拉出來了
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

電源的部分,用一塊壓克力板黏上12V轉5V、3.3V模組鎖上
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

線材模塊化,都用2x2、2x3、2x4的杜邦端子外殼
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

沒有直接插在麵包板上的接線都交錯出針防呆
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

接線完成圖
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

Artisan連線

一切都好了之後就是上機連線電腦做測試,這時我才發現他無法連線跟Artisan溝通,原本以為是程式的問題,但理論上也該在Artisan上顯示出爐溫(ET)豆溫(BT)才對。
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

後來爬文才知道,似乎是Arduino Mega2560這張板子的問題導致他無法順利連線Artisan,Artisan按下開始之後,要再將Arduino Mega2560整個Reset才「有機會」連上

而設計之初我完全沒有考慮過Reset鍵,所以我的前面板也沒有額外的按鈕開孔,這下就變成每烘一鍋豆子,我都必須把機器上蓋拆開,靜心祈禱、按下Reset希望他能連線成功。

這實在是太蠢了,於是我構思了好幾個方案,最後選擇了使用帶開關VR控制,所謂Reset,是將Reset腳位拉到地,再復位他就會重啟,所以我使用電阻分壓,導通的時候,Reset腳接收到高電位,斷開時接到地進行Reset。

怎麼做呢,利用電阻分壓,斷開時低電位很簡單,將路徑上串一顆電阻到地,這樣在空接狀態下Reset就會直接被拉到地,而導通時就被拉到5V,因此5V接上一顆小電阻再串到開關,形成迴路時Reset就會在電阻分壓之間,我用的數值是5V接10歐姆電阻,1.5k歐姆電阻接地,這樣一來就可以透過切換開關進行Reset。
接線圖如下
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

但是這時又出現一個有趣的現象,我不需要Reset也能連線了? 只要把Reset接到5V,Uart就能順利與Artisan溝通,實在是難以理解,這時我又發現,因為強制連5V會導致另一個問題,就是無法順利燒錄程式,因為Arduino燒錄程式時會將Reset拉低重啟,所以狀況變成
1. Reset Pin空接,可以燒錄更新程式,但無法連線Artisan
2. Reset Pin接5V,不能燒錄更新程式,可以連線Artisan
3. Reset Pin接地再復位(不論5V或空接),Arduino Reset
最後我還是保留了上圖的線路,畢竟更新程式的機會不多(除非吃飽太閒),而出現當機之類的狀況Reset還是很重要的,當然如果重新來過,我會使用一個6P 3段搖頭開關,就可以順暢切換3個模式。


最後來講一下Artisan連線的部分,稍微研究了一下,大概看懂了程式溝通邏輯
Arduino跟Artisan溝通是送一串資料值(使用變數名稱),用逗號「,」分隔,用「0」代表通道不啟用,用「換行」作一筆資料的結束。

原本的程式碼中channel 1是爐溫channel 2是豆溫,再來就沒了所以山姆大寫了
Serial.println(",0.00,0.00");

而我增加了風門讀取、瓦斯火力讀取、風門內溫度、風門內濕度,另外TC4的通道5 (OT1) 、6 (IO3)似乎原本是給Artisan做外部控制的,而實際測試中,如果把值丟到5 (OT1) 、6 (IO3)確實一樣不動作,所以我就跳過5、6,使用通道7、8,通道7是 PID SV,通道8也是不動作的(沒有讀取到值),查了文件似乎是定義給TC4(Arduino)內部溫度,結尾處使用換行指令Serial.println而不是Serial.print

最後左邊是原本的程式碼,右邊是我修改過後的程式碼 (高解析)
通道1.ET 2.BT 3.風門 4.瓦斯 5.XX 6.XX 7.風門濕度 8.XX
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

然後Artisan設定如下 (高解析)
使用Arduino製作Kent500烘豆機控制盒連接Artisan烘豆軟體

到這裡終於算是製作完成了,最後附上Kent 500裝機影片


實際烘豆情況
2021-11-30 17:51 發佈
真的是超強...偶像...
六凡之靝
六凡之靝 樓主

只是拾人牙慧之作而已啦 :D

2021-12-01 21:37
Little J Jr.

真的很厲害

2021-12-03 21:46
這樣的分享也太完整了,應該可以商品化了。請受小弟一拜!
應該可以照顧不少Kent500孤兒。

reset是因為Arduino的bootloader利用Uart開始傳送時收到DTR時會自動reset切進bootloader,這樣就能自動更新;如果沒有收到更新程式的通訊,就會切進應用程式。

TC4的通訊的話,artisan會傳read\n給arduino,arduino才會回傳數值csv
所以就會一直讓arduino reset

搜尋arduino disable auto reset會有一些方法,你的方法也行

Mega有硬體的第二組Uart,HC-06可用硬體的(不必用軟體的),不過沒用到的話應該是還好。
感覺Sam大另個RTOS版的對於不同時點排程應該會有較好的彈性。
六凡之靝
六凡之靝 樓主

哈哈哈 有聽沒有懂...@@

2021-12-04 18:23
有不少人說怎麼不畫電路板
試著畫了一下

原本線路照舊

MAX6675增加2組,共四組(CSBT:D53) (CSET:D49) (CS03:D48) (CS04:D47)
I2C總共3組(5V-GND-SDA-SCL)
類比讀取4組(A0、A2、A4、A6)
風扇控制PWM1組(GND-12V-RPM-PWM)
RESET雙切1組(RES-5V-GND)
HC-06 1組
UART 1組(3V3-5V-RX2D17-TX2D16-GND)
LCD SPI 一組(G-5V-RS-RW-E-G-3V3-G)
2 PWM輸出 1組(5V-GND-D7-D9)
4功能PIN腳 1組(5V-GND-D24-D26-D28-D30)
2功能PIN腳 2組(5v-GND-D32-D34) (5v-GND-D36-D38)
1功能PIN腳 2組(5V-GND-D40) (5V-GND-D41)
超過Artisan能使用的數量了
應該可以變著花樣玩
都是2.54連接器的針腳,可以焊上各式插針(杜邦、2.54防呆插口、2.54免焊鎖點等等)


最終洗的板子
1.增加了LM317的降壓電路
2.斷開12V直連Arduino的設計改用跳片

板子送生產後我才發現還有幾個小bug
像是絲印打錯字、電容卡到二極體
都是可以改正但沒改到的

之後會出一個影片稍微說明一下板子的設計與使用



Q:為甚麼不用板載的降壓電路而用外設
A:MEGA PRO板載電路不是很穩定,在接上LCD時會造成閃爍
外國也有人有同樣狀況,雖然可以運作但太傷眼了,所以能用外部電源就用外部電源吧

Q:我只有外部12V我可以只用Arduino電源嗎?
A:可以,有保留短路接點,把他短路後就可以輸入12V給Arduino轉換電壓,但還是建議使用lm317電路

Q:LM317 C4電容容值要用多少? 卡到二極體怎麼辦
A:10u~1000u都可以,不建議太大,會造成突波電流過大對板子有影響
電容引腳稍微凹一下就不會卡到了,我打算使用飛利浦藍殼100u的,直徑只有8mm應該不會卡到了(絲印是10mm的大小)

Q:我可以改用LCD1602或2004嗎?
A:可以,買I2C轉換板,我板子上有3個I2C接口,插上去就能點亮了
好像沒看到瓦斯控制閥,只看到讀取壓力用的傳感器
我一直對瓦斯的自動控制有點興趣,聽說這東西很貴!
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?