古人智慧

Just Do it!
上士聞道,勤而行之;中士聞道,若存若亡;下士聞道,大笑之。不笑,不足以爲道。
~ 道德經 41

「實現夢想不是追逐成功,而是在於賦予生命意義,人生中的每個決定與聲音都有其重要含義。」"The key to realizing a dream is to focus not on success but on significance — and then even the small steps and little victories along your path will take on greater meaning."
電視名人-歐普拉·溫芙蕾(OPRAH WINFREY)

搜尋此網誌

Translation

2016年10月28日 星期五

[3DP] Prusa i3,Z軸升級8mm螺桿(絲桿) 與 電感式近接開關(接近開關)

看到Prusa i3的原創發表Prusa i3 MK2這麼多神奇的功能,讓我對心愛的老爺機i3的升級有了極大信心。是的,這次參考MK2的精神,升級Z軸的螺桿從5mm到8mm,然後再加上電感式近接開關。
升級Z軸的螺桿5mm到8mm的部分最擔心部分是怕干涉到旁邊8mm直線軸承的空間,參考MK2後再把X軸的馬達電機端的SCAD code調出來,發現垂直空間是有干涉,但是T型的螺母是鎖在表面,並不會直接影響到整體結構,這讓我大大的松一口氣。。。
然後,這近接開關也是新的嘗試,首先上網找資料後這近接開關有不少規格,包含直徑、感應距離,還有NPN與PNP兩種type。其中NPN與PNP讓我最困擾的原因是這種近接開關只有12v,幾乎找不到有5v驅動。這就影響到如何與Arduino的input pin的接線,因為近接開關的觸發 pin是以12v為基準,這會燒掉Arduino. 
經過Google大量的搜尋,我決定買NPN,原因是NPN的觸發的pin是low enable,這樣的邏輯就不擔心12v的問題,在output pin與5v做pullup那就與機械式switch相同,可以用同樣的接法與電控板連接。

先分享測試的結果:
這鋼板是一年前為了做實驗印ABS的線材,可以讓底座熱傳導更好。沒時間做就放到現在,剛好近接開關又買錯4mm的,拿來使用真是速配!!!
這測試STL是100x100mm的外框,裡面有2mm/3mm/5mm的圓,來測試平台黏著與Marlin的加速參數設定的穩定度。這結果讓人滿意~~~
《自動Z軸校正真有效》

《只有一個掉落,應該是膠水沒塗到吧》

《尺寸正確,沒變形》


詳細製作過程分享:
材料清單:
T型8mm螺桿(絲桿)/300mm, 8mm導程
彈性聯軸器5x8x25mm
 LJ12A3-4-Z/BX NPN NO常開 12v 4mm測距(不小心買錯了,建議買測距6mm以上) 

X軸的結構設計:
主要是把T螺母的空間讓出來,還有挖兩個螺絲孔來固定這個T型螺母。
還有,Z軸頂端的固定座也要修改,讓8mm的螺桿可以穿過。

實體圖分享:
《馬達電機端 前視圖》

《馬達電機端 後視圖》

《T型螺母》

《埋深螺母》

《8mm螺桿》

《Z軸頂端與X軸零件一覽表》

《X軸的可調皮帶功能》


《Z軸原來的調整器保留》

《完成品》

《開始打印LCD控制器外殼》

《第一層非常穩定,連字母都很老實貼的牢牢的》

Marlin: configuration.h 
在Marlin的source code裡面,在Configuration.h內可以找到這一行
#define DEFAULT_AXIS_STEPS_PER_UNIT   {80,80,400,96.2};
把Z軸的部分改為400,,就可以用這個T型8mm螺桿


近接開關結構設計:
因為不想改變現在的擠出機結構,因為目前現役這個擠出機是我自己設計而且用了1年多非常穩定。所以,就考慮到做個簡單的holder再用熱熔膠固定。



近接開關接線圖:
棕色接在12v電源,黑色是觸發pin,藍色是ground。

當近接開關接好後,先開機然後拿個金屬的東東接觸近接開關的底部,觀察近接開關頂部是否有亮燈,表示接線無誤。

然後,開始改Marlin-v1.0。 (V1.1.4f修改部分在最後)
Marlin: Configuration.h
在Configuration.h裡面找到這段code,我是設定近接開關接到原Z軸Min的pin腳。
// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.

如果要Z_Min 與 Z_Probe共存的話,那要在pin_ramps.h裡面
#if ENABLED(Z_MIN_PROBE_ENDSTOP)
  // Define a pin to use as the signal pin on Arduino for the Z_PROBE endstop.
  #define Z_MIN_PROBE_PIN  2
#endif

在Configuration.h改
const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
那這個近接開關的黑色與藍色線要接到X_MAX的位置,也就是第2個位置(在X軸的下一個)

自動Z軸Marlin的修改:
在Configuration,h
把這兩段的註解“//”拿掉,再設定測點。
#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
 #define AUTO_BED_LEVELING_GRID
 #if ENABLED(AUTO_BED_LEVELING_GRID)

    #define LEFT_PROBE_BED_POSITION 15
    #define RIGHT_PROBE_BED_POSITION 170
    #define FRONT_PROBE_BED_POSITION 20
    #define BACK_PROBE_BED_POSITION 170

最後,把code編譯後upload到Arduino,就可以開始測試自動校正功能啦!!

自動Z軸校正操作:

1. 先確定近接開關與平台的距離與測點,這部分非常重要。這些測點位置是在Marlin的Configuration.h裡面寫死的。

如果用玻璃平台,用3點做自動平台校正:
#define AUTO_BED_LEVELING_3POINT
elif ENABLED(AUTO_BED_LEVELING_3POINT)
  // 3 arbitrary points to probe.
  // A simple cross-product is used to estimate the plane of the bed.
 #define ABL_PROBE_PT_1_X 15
 #define ABL_PROBE_PT_1_Y 180
 #define ABL_PROBE_PT_2_X 15
 #define ABL_PROBE_PT_2_Y 20
 #define ABL_PROBE_PT_3_X 170
 #define ABL_PROBE_PT_3_Y 20
這三點可以自己設定。
先貼好銅箔,再用G29確定功能正常。如下圖:
如果用整個鋼板,那就沒什麼關係。

2. M851指令,這個指令可以動態調整Z軸與平台“零點”的offset。這個非常好用,我的做法是調整近接開關感應距離內例如4mm,噴頭還沒碰到平台,這樣可以保護噴頭。再用M851調整真正的零點,例如我的噴頭與平台距離1.8mm,就設定M851 Z-1.8,就是真正打印是讓噴頭下降1.8mm。

3. M500,這指令是把目前的參數寫到i3的EEPROM,保持下次開機時都存在不會丟失。

至於如何把指令下給3D打印機? 很多種方式,我是使用Repetier-Host,如下圖,連上3D打印機後,在“手動控制“的功能區內的G-code欄位輸入指令即可。

如果希望i3每次打印時都做ABL(Auto Bed Leveling),就在Cura或其他切片App的Start_gcode加上

Cura start_gcode:
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops

G29 ;auto leveling,Regis

G1 Z15.0 F9000 ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F9000
M117 Printing...

之後,每次做完切片都會在gcode自動加上G29這個ABL。

成果如下:

Z軸校正視頻:



實際打印的結果。。。。
《第一層,牢牢貼緊平台,會發現Z軸馬達會上下移動》

《第二層,漂亮》

《第三層》

《第四層》

《開始印殼》

《出爐了,完整印出》

《正視圖》

《第一層很平整,但是我調的太深了,噴頭應該再高一些》

《條條分明》

《Z高很平整層層分明》


這次升級很滿意,費用不到3百元台幣,可以讓我脫離每次都要調整Z軸的痛苦。。。

Marlin v1.1.4f Configuration.h 修改:(2017-07-23)

// Regis, proximity觸發位準
#define Z_MIN_PROBE_ENDSTOP_INVERTING true

// Regis,我把近接開關接在pin 2,與Z_Endstop不同
//#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

// 設定近接開關接點
#define Z_MIN_PROBE_ENDSTOP
#define Z_MIN_PROBE_PIN 2

#define X_PROBE_OFFSET_FROM_EXTRUDER 0  // X offset:
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0  // Y offset:
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0   // Z offset:

// 設定3點校正
#define AUTO_BED_LEVELING_3POINT
#elif ENABLED(AUTO_BED_LEVELING_3POINT)
  // 3 arbitrary points to probe.
  // A simple cross-product is used to estimate the plane of the bed.
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_Y 20

2016年10月8日 星期六

[BananaPi M2+] How to resize the partition

把BananaPi設定成VPN還蠻不錯用的,可以在外翻牆回家。。。。
每次出差必定將banana做個apt-get升級,讓banana保持最新狀態。

我是用emmc開機模式,這次升級發生root的空間不足,原來之前把image燒到emmc時並無做partition resize的動作,所以在系統上就只有1.6G,用了半年就爆了,XD。

在網上找了不少資料與做實驗,正確做法整理如下:
分析原因:
1. 先用df確定disk空間status - 發現/ (root)的空間只剩下0%,難怪無法升級。
2. 再用mount,確定/(root)是mount在/dev/mmcblk0p2

因為做partition resize必須umount,但是 /(root) 的partition是正在運行的partition,不能umount,所以必須要用SD card開機再做resize的動作。

做法:
1. 製作1張可開機的SD card,可參考這裡 。
2. 開機後,root賬號login
3. 用parted指令可以resize partition在emmc的disk,細節可參考這裡
4. reboot,還是用SD card開機。
5. 最後,用root下resize2fs指令把filesystem重新整理完成。

《code》
regis@bpi-iot-ros-ai:~ $ sudo parted /dev/mmcblk1 #mmcblk1 represent eMMC
GNU Parted 3.2
Using /dev/mmcblk1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                          #List partitions                                
Model: SD SL08G (sd/mmc)
Disk /dev/mmcblk1: 7948MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
  1      8389kB  58.7MB  50.3MB  fat16        primary  msftdata
  2      58.7MB  3670MB  3611MB  ext4         primary  msftdata

(parted) resizepart                    #Resize partition
Partition number? 2                    #Select partition 2
End?  [3670MB]? -1                     #Resize to the end                              
(parted) print                         #List partitons                                
Model: SD SL08G (sd/mmc)
Disk /dev/mmcblk0: 7948MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      8389kB  58.7MB  50.3MB  fat16        primary  msftdata
 2      58.7MB  7947MB  7888MB  ext4         primary  msftdata

(parted)  q                                                              
Information: You may need to update /etc/fstab.

regis@bpi-iot-ros-ai:~ $ sudo reboot
regis@bpi-iot-ros-ai:~ $ sudo resize2fs /dev/mmcblk1p2


重新用eMMC開機後,用df指令可以確認已經resize完成。

regis@bpi-iot-ros-ai:~ $ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        7155560 1525744   5266352  23% /
devtmpfs          380800       0    380800   0% /dev
tmpfs             512036       0    512036   0% /dev/shm
tmpfs             512036    6904    505132   2% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             512036       0    512036   0% /sys/fs/cgroup

/dev/mmcblk0p1    261868  213032     48836  82% /boot

2016年10月6日 星期四

[Fighter Spider]戰鬥蜘蛛 2/xx

Google推出了Pixel手機,看了廣告影片很難表達有什麼特殊功能都很新很炫,是嗎?
現在做什麼3C產品都很難讓人耳目一新,就算提升小功能需要花費1倍以上的時間金錢,也難以博得關注。

Maker的作品也是一樣,同樣的作品就算花很大心力做升級與精進,也難以博得眼球。。。
現代人似乎已病了不輕~~~~

為蜘蛛機器人SpiderRobot開發新的動作做PC的APP,燒掉不少腦神經。。。。
總是找個樂子玩玩。。。
做個預告片如何?