2015年1月14日 星期三

3DP 歲修 之一

用了近一年的印表機開始進行歲修
首先換掉已經變形的步進馬達腳座
這次都是用0.1mm層厚,每一件都印了17個小時左右,強度很好。
上下腳座共六個都要換,幾乎重組了
下一步就是要把Arduino Mega 2560換成smoothie board
 

2014年7月21日 星期一

Optical Heart rate and PPG monitor

當初是為了有高血壓的老爸做運動時可以了解自己的運動強度,不至於太逞強運動,或是運動量不足,想弄一個可以隨身攜帶,方便量測脈搏的工具,所以才會有這個產品的產生。

利用綠光LED與light sensor偵測血液流量的變化,來判斷心跳,與利用OLED螢幕顯示脈波。


這種反射式的光學sensor其實不大適合運動時使用,因為會因為晃動造成light sensor 的讀值變異,還有環境光的漏光問題。

不過還是簡單分享一下整個產品從無到有的一個過程:
(因為準備下一個機器人的專案,所以就簡略分享.....)



相關資訊:

Relate data
 https://github.com/alextien/Heartrate-and-PPG-waveform-monitor

Slide:









2014年6月23日 星期一

[3DP]Dual thermocoupler sensor support with Marlin and RAMPS 1.4 在Marlin 與 RAMPS 1.4 使用雙熱電偶

好久沒更新部落格了,從大概2月開始玩3D printer,一開始就從Delta玩起,有點難度,不過一一克服中。

這邊介紹一下如何在RAMPS1.4 上使用Marlin firmware來用雙sensor來做溫度偵測與保護。

3DP因為持續地對塑膠加熱,然後常常需要長時間工作,10幾20個小時都很常見,這時候如果單靠一顆thermo sensor來做加熱的偵測回饋,有點風險。

雖然Marlin對於單sensor也有一些保護,如maximum temperature, minimum temperature的設定,因為通常溫度sensor失效時,偵測到的溫度不是極高或是極低,靠這兩個保護,也可以解決掉大多數的sensor 故障的問題。

但當sensor不是故障而是脫離,所以只偵測到室溫而已呢? 或是故障時停留在某個溫度時呢? 這時候軟體會以為溫度一直達不到預定目標,所以會對加熱棒一直加溫,結果輕則加熱棒燒毀,擠出頭座融化,重責引發火災。

其實我覺得韌體還有一些機制來做防止失誤,如:加熱幾分鐘內還無法達到目標溫度時停止加熱與列印。 不過個人功力有限,這邊就看有沒有能人來幫忙修改了。

那為什麼採用熱電偶(thermocouple) 而不用更常用的熱敏電阻(NTC)呢?

原因有兩個:
1. 熱電偶較耐高溫
2. 熱電偶有較佳的溫度曲線,不需要做查表補償

不過熱電偶的輸出只有很微弱的電壓,所以需要再sensor後面接一個放大器與零點補償的電路,現在有廠商有整合好的IC,所以使用上其實很簡單。

===================================================

Marlin 支持兩種熱電偶的IC,一種是數位,採用SPI介面的MAX6675,另外一種是類比的IC,AD595/AD597。

接法這邊兩種都會介紹,不過數位的MAX6675有幾個問題,而不能採用:

介紹目前使用的AD597接法:

一般買到的module板子只需要接3個pin,+5V, GND, S(訊號) 我買到的板子實際用會有一些問題:

1. 溫度offset: 這邊後來查出是因為這塊板子在+5V輸入有串一顆diode作保護,這樣子會讓IC的5V會有一些drop,造成板子的輸出會跟Arduino參考的5V有偏差,把這顆diode拿掉直接改用0 ohm電阻,或是把它short就好。

2. 打印時,溫度sensor因為noise關係,輸出不是很穩定,常會有10幾度的跳動,這樣容易造成PID控制也會跟著不穩定: 這邊我的作法是在5V跟GND加一顆10uF/16V的電容,與在熱電偶線的輸入端並一顆0.1uF的電容,這樣子就蠻穩定了。

這邊我用的pin腳是thermo0 A3, thermo1是A4,RAMPS 1.4這兩pin剛好跟5V與GND一起,用一個4 pin的排珍就可以接出來了。

在Marlin的修改:

 configuration.h
#define TEMP_SENSOR_0 -1
#define TEMP_SENSOR_1 -1

//開啟雙sensor保護 #define 
#define TEMP_SENSOR_1_AS_REDUNDANT
//當兩顆sensor溫度差達20度時,marlin會停止列印 
MAX_REDUNDANT_TEMP_SENSOR_DIFF 20


pins.h

 //在相對應的motherboard ID(一般單擠出頭,有熱床的MEGA都是選33)下面,把thermo0/1的 pin位置做修改


#define TEMP_0_PIN 3 #define TEMP_1_PIN 4

======================================================

MAX6675的接法(不過目前有問題,無法使用)

1. 只支持在thermo sensor0使用,所以只能用一顆sensor
2. Marlin firmware有bug,目前使用會跟smart controller LCD pin衝突,就算改pin重新定義還是無法使用,所以就放棄了

這邊簡單寫一下接法:













congiguration.h

#define TEMP_SENSOR_0 -2 //


temperature.cpp

long max6675_previous_millis = -MAX6675_HEAT_INTERVAL;

pin.h

// SPI for Max6675 Thermocouple
#ifndef SDSUPPORT // these pins are defined in the SD library if building with SD support #define MAX_SCK_PIN 52
#define MAX_MISO_PIN 50
#define MAX_MOSI_PIN 51
#define MAX6675_SS 53
#else #define MAX6675_SS 49
#endif
=====================================================

2013年8月18日 星期日

Mini Segway 02

拖了老半天,總算先弄出一個基本的可以動的軟體,
目前暫時用ON/OFF control,再來導入PID control。
不過在硬體上應該會加裝一組藍芽,用來傳輸raw data,這樣才方便做紀錄。

 動作影片如下,其實就算是ON/OFF control應該還是可以做得更好的...


Mini Segway 01

===================================================
 硬體大概完成了,本來馬達與控制器共用電源,但發現馬達的back EMF會回灌到控制器電源,所以多加一組buck分開兩邊電源,其實省錢的話,馬達這邊電源串schottky diode就好,不過當馬達功率變大時,大功率的schottky diode不見得省錢,且浪費功率。電源分開還有一個好處,就是可以獨立控制馬達電壓,日後可以調整馬達的反應速度,來取得更好的PID control. Two wheel balancing robot是很好的一個實作,可以學得PID control, kalman filter這些實用的東西,其實這就是一個迷你版的Segway。 這個結束後接下來看看有沒有機會將馬達改成BLDC motor, 來進一步做好motor driver 這部份。

2013年5月15日 星期三

Project EV 第一課

第二專長規劃中,本來有人建議去上工研院或是自強基金會的課,不過查查後不是地點、時間不對,另外就是價格太貴。乾脆忍痛買個EVB,自己隨便看看後認為TI的solution蠻完整的,線上資料也很齊全,就在TI官網給它心痛刷下去了。

準備開箱了,做飛機來的,很快兩天后就到了


光電源線就付三條不同國家用的,另外還有一支USB,應該是軟體與document


這就是主板加driver了


接下來就準備狂k document 了。


Project G 第一課 爬坡自動變速系統

開始實作一些小ideas,這個是一個簡單的想法,當電子變速系統如果在自行車上普及後,人還要更懶的話,就需要一套自動變速系統,這邊實作了一個簡單的方式,透過accelerometer 來偵測坡度,當發現角度大到一個程度時就自動換擋,不過這畢竟不夠及時,更好的方式是用torque sensor 或是踏板放置force sensor,來依據車手的需求切換。這邊用accelerameter 需要用filter來濾掉sensor 本身的跳動,與馬達傳過來的震動,這邊會有比較多學問。