2024年4月18日 星期四

GlobalSat GH-625B 資料傳輸腳位

2024年4月18日 星期四

前一陣子看到家裡回收區小孩丟掉的手錶,讓我想起很久以前,妹妹給我的 GlobalSat GH-625B  GPS 手錶,找了半天,才找到。將回收區撿回的粉紅色錶帶,裝在 GH-625B 上,哈!戴在我手上,實在太搶眼了,不過聊勝於無。

GH-625B 是利用一條專屬的 USB 傳輸線和電腦連接,傳輸資料,看來,這條傳輸線應該是類似我以前買的 PL2303,它們都是使用 Prolific USB to Serial  的驅動程式。靠近手錶側的端子有四個插孔,圖形的端子有一個凹槽,這防呆的設計,滿好辨識方向的。我利用電錶先找出 5V 和 GND 以後,將它接到 Arduino 上測試,也找出了 RX 和 TX 在哪裡:

確認傳輸線插孔的用途,GH-625B 側的四支接腳的用途,就能對應出來了:


拿 CP2102 USB-TTL ,按圖將 GH-625B 的 RX、TX 和 CP2102 的 TX、RX 對接,再將 5V 接 5V,GND 接 GND


先以 Python 查詢一下 CP2102 是在哪一個 port,執行:

python -m serial.tools.list_ports

再以 pykmaze 測試看看能不能抓到 GH-625B 內儲存的基本資料(假設 CP2102 在 com3):

python pykmaze.py -p com3 -i -f

在 GH-625B 上可以看到

CMD:784748

表示成功執行了查詢的指令。這樣子,以後不怕原廠附的傳輸線壞掉了。pykmaze 原來無法用 Python 3.x 來執行,順便將它改為可以適用於 Python 3.x ,改天再放到 GitHub 中。

相關連結





2024年4月17日 星期三

QuickChart 替代 Google Chart QR Code 產生器

2024年4月17日 星期三

以前需要在程式中利用一個網址產生需要的 QR Code 圖片時,總是使用 Google Chart 的 API;今天朋友提醒我 HTML5 FUN PK 無法製作 QR Code,查了一下,Google 已經不再提供這個服務了。詳見:

在 Google 的論壇中,則有人提供了替代的方法:

我選擇暫時先以 QuickChart 的 QR Code API 來代替,語法可以參考這裡:

待測的其它選擇:

有空可能還是要再來研究一下不必靠某網站,又能跨平臺「自己自足」的方式,不然真的是牽一髮而動全身,剛剛總共改了九個不同的工具和遊戲,還不知道有沒有遺漏的呢!

2024年4月2日 星期二

Python : 轉換 DataFrame 帶有逗號的數字字串為純數字

2024年4月2日 星期二

在設計「雄:Python : 匯出 PDF 表格為試算表資料」中的轉換工具,由 PDF 擷取而來的資料被轉為pandas 的 DataFrame,最後使用 DataFrame 的 to_excel 輸出為 Excel 格式的檔案。不過如果照預設值,輸出的資料在Excel中,都是「文字」的格式;此外同事提供的原始資料,除了流水號的欄位,其它欄位的數字都有加上逗號(例: 12,345、7,890),所以在將「文字格式」的數字轉為數字型態時,得多考慮這一點。

在 Python 中,將文字型態的數字,轉為數字型態的方法有很多,不過,試了一下,如果想將「12,345」轉為「12345」,使用 locale 的 atof 或是 atoi 應該是較簡潔,例如:

import locale
from locale import atof

locale.setlocale(locale.LC_NUMERIC, '')
atof('12,345')

但是如果遇到不是數字的內容,或是空字串,例如:

atof('這不是數字')
atof('')

就會出現類似這樣的錯誤訊息:

ValueError: could not convert string to float: ''

所以在轉換的時候,還需要檢查一下是否為數字的。

判斷是否為數字,可以使用 Python 的 isnumeric() ,不過,像以下的格式:

  • 12,345
  • -12345
  • 12.345

因為帶有逗號、減號或小數點,isnumeric() 都會傳回 False,所以我先利用 re.sub ,將非數字的符號先拿掉後,再用 isnumeric() 來判斷。

綜合前面的條件,利用底下的 convert_number_strings_to_numbers ,就可以用來將 df (pandas 的 DataFrame) ,指定的欄位 columns (欄位順號 list),轉為 float 數字:

def convert_number_strings_to_numbers(df, columns):
  locale.setlocale(locale.LC_NUMERIC, '')
  for i in columns:
    df[i] = df[i].apply(lambda x: x if x=='' or not re.sub(r'[,.-]', '', x).isnumeric() else atof(x))
  return df

相關文章


2024年4月1日 星期一

Python : 匯出 PDF 表格為試算表資料

2024年4月1日 星期一

很多行政工作如果規畫、整合得當是可以不用花那麼多時間的;反之,沒有整合,就是整死人。記得以前看學校幹事們忙著在電腦上剪剪貼貼資料,忙得人仰馬翻的,總覺得,為什麼運用電腦了,還需要這樣子「愚公移山」;關係夠好,看不下去了,就會幫忙弄些小工具,來處理資料。前幾天同事問我有沒有辦法將別人 PDF 檔中的表格資料匯出到試算表,並且將列變成行、直變橫?PDF 中的表格長這樣子:

第一個想法,Python 應該可以!幾個程序能做到,轉檔應該就有望了:

  • 以 Python 讀取 PDF 的資料,並解析出表格文字內容。
  • 去掉不要的資料。
  • 將表格內容進行旋轉(transpose)。

由讀 PDF 讀入表格資料

讓 Python 讀入 PDF 資料,並解析出表格文字內容,我試了:

  • tabula-py
  • Camelot (camelot-py)

測試過,感覺 Camelot 比較可以跟後續的資料旋轉接軌,就專心研究 camelot-py 了。

關於 camelot-py 的安裝

在 Windows 上使用 camelot-py 大概會遇到這個錯誤訊息:

OSError: Ghostscript is not installed. You can install it using the instructions here: https://camelot-py.readthedocs.io/en/master/user/install-deps.html

主要是因為讀入 PDF 檔案時,如果沒有指定「backend」參數,它預設會使用預設值「backend="ghostscript"」,而大部份的電腦中可能沒安裝ghostscript,有興趣可以參考錯誤訊息中的說明文件:

因為 ghostscript 的安裝顯得較複雜,所以我選擇在 Windows 中用「backend="poppler"」,只要先執行以下兩行指令安裝 pdftopng 跟 opencv 即可:

pip install pdftopng
pip install opencv-python

倒過來,如果在 Google Colab 的環境中,安裝 pdftopng 反而會累死人(我是沒成功),安裝 ghostscript 容易多了:

!apt install python3-tk ghostscript
!pip install  ghostscript

關於 camelot-py 的使用

假設 pdf_file_name 是 PDF 的路徑,pages 中放了要讀入資料的頁碼 list,只要這樣就可以讀取資料:

import camelot
pdfTable = camelot.read_pdf(pdf_file_name, pages=pages)

如果不是用 ghostscript,就用:

import camelot
pdfTable = camelot.read_pdf(pdf_file_name, pages=pages, backend="poppler")

接下來我們就可以針對 pdfTable 來存取(轉換)資料,詳情可以參考 camelot-py 中,有關 Table 的說明:

我使用 pdfTable[0].df ,將抓到資料轉為 pandas.DataFrame 的格式,方便後續的資料處理。

資料處理

前面提到利用 pdfTable[0].df ,可以將指定頁資料轉為 pandas.DataFrame 物件,假設將內容指定給變數 df,我想針對 df 再進行一些處理:

  • 只取出指定的列(之後會旋轉為欄)。
  • 去掉原始資料最右側的「小計」那欄。
  • 暫存原始資料最左側欄的資料(最後為試算表中的欄位名稱)。
  • 去掉流水號不是數字(空格或是「以下空白」)的資料。
  • 將一頁頁資料合併在一起

pandas 的 DataFrame,在存取資料時,幾個關鍵詞跟對象有關:

  • index
  • colunms
  • axis

幾個關鍵詞跟過濾、移動指標有關:

  • isin
  • iloc
  • loc

資料的刪除、旋轉、合併的關鍵詞:

  • drop
  • transpose
  • concat

詳細的說明都可以在pandas的網站查到:

為了寫這個資料轉換的工具,第一次玩  Camelot 和 pandas,雖然還沒有很深入研究,但工具有了初步的成果了,將它移植到 Google Colab 中,想玩玩看(哈!不能提供有個資的 PDF 啦!) ,或是對原始碼有興趣(別嫌我,醜是一定的,就好玩,亂寫的),網址如下:

pdf-to-excel.ipynb 的截圖

改天再補記一下曾經卡關很久的地方。

相關文章


2024年3月25日 星期一

Hiking : 樟湖山+待老坑山+員潭子坑山環形路線

2024年3月25日 星期一

 看天氣好,原本只是想再爬爬樟山寺,看看會不會又像之前,下山時 ITBS 又犯,順便再玩一下很久沒用,放到沒電的 GPS 手錶。結果走得太開心,在樟山寺稍休息後,一路接上了樟湖步道瓦厝支線,由優人神鼓經龍騰御櫻,到新店大香山,再下切到一壽橋,走河堤回到恆光橋,連成一個環形路線。

在河堤上拍了這張全景,剛好可以將今天爬過的幾個山頭都入鏡,由左側稍低的政大,走飛龍步道,上到樟山寺所在的樟湖山;接到樟湖步道的待老坑山;最後到照片右側新店的員潭子坑山。

今天的軌跡匯入到 Google Maps,如下:

看了一下 GPS 手錶的記錄,總里程 11.31km,總時間 03:10:08 (需要再扣掉在河堤上和已大一的學生聊天的半小時)。

2024-03-25 10:52:21 出發

2024-03-25 11:12:30 飛龍步道登山口

2024-03-25 11:26:26 樟山寺展望

2024-03-25 11:44:53 樟湖步道瓦厝支線入口

2024-03-25 11:54:05 瓦厝附近


2024-03-25 11:57:39 樟湖步道主線叉路

2024-03-25 12:03:30 優人神鼓

2024-03-25 12:08:52 龍騰御櫻

2024-03-25 12:14:08 往員潭子坑山的路口

2024-03-25 12:25:54 大香山公車站

2024-03-25 13:12:57 一壽穚

2024-03-25 13:23:25 河堤上全景


其實這路線的點,除了往樟山寺的飛龍步道以外,其它都騎過自行車,不過,這一次是全程用走的,IT band 是有一點緊,但幸好沒開始痛,看來的確是需要稍加訓練一下,並做伸展,這樣它就會乖乖的。

2024年3月18日 星期一

Python: googletrans 與 bilingual_book_maker

2024年3月18日 星期一

2023年3月應朋友的要求,將開源的專案「bilingual_book_maker」可以在 Colab 中使用(參見:雄:OpenAI : ChatGPT 應用 : 製作雙語電子書),利用它可以把 EPUB 格式的電子書變成「雙語」的內容。前一陣子陸續有人反應有問題,不過,因為我根本沒在使用,加上有時問題會在一陣子後又消息了,所以沒有積極地去查原因。前天換有在使用的朋友跟我說了,哈!開始認真地找解方。

底下記錄一下排除問題的關鍵。

httpx 版本的問題

googletrans 已經滿久沒更新了,而 openai 持續地在更新,但是兩者都有用到 httpx,一個要舊版的,一個要新版的,因此安裝完 googletrans 以後,出現了「dependency conflicts」的錯誤訊息:

  Building wheel for googletrans (setup.py) ... done
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
openai 1.14.1 requires httpx<1,>=0.23.0, but you have httpx 0.13.3 which is incompatible.

httpx 版本的衝突,由訊息看來,因為 googletrans 是後安裝的,所以最後 httpx 用的版本是 0.13.3 ,而不是 openai 要的版本( >=0.23.0 )。這也導致開始翻譯時,出現了這些訊息:

Traceback (most recent call last):
  File "/usr/local/bin/bbook_maker", line 5, in <module>
    from book_maker.cli import main
  File "/usr/local/lib/python3.10/dist-packages/book_maker/cli.py", line 7, in <module>
    from book_maker.translator import MODEL_DICT
  File "/usr/local/lib/python3.10/dist-packages/book_maker/translator/__init__.py", line 2, in <module>
    from book_maker.translator.chatgptapi_translator import ChatGPTAPI
  File "/usr/local/lib/python3.10/dist-packages/book_maker/translator/chatgptapi_translator.py", line 7, in <module>
    from openai import AzureOpenAI, OpenAI, RateLimitError
  File "/usr/local/lib/python3.10/dist-packages/openai/__init__.py", line 8, in <module>
    from . import types
  File "/usr/local/lib/python3.10/dist-packages/openai/types/__init__.py", line 5, in <module>
    from .image import Image as Image
  File "/usr/local/lib/python3.10/dist-packages/openai/types/image.py", line 5, in <module>
    from .._models import BaseModel
  File "/usr/local/lib/python3.10/dist-packages/openai/_models.py", line 23, in <module>
    from ._types import (
  File "/usr/local/lib/python3.10/dist-packages/openai/_types.py", line 23, in <module>
    from httpx import URL, Proxy, Timeout, Response, BaseTransport, AsyncBaseTransport
ImportError: cannot import name 'BaseTransport' from 'httpx' (/usr/local/lib/python3.10/dist-packages/httpx/__init__.py)

openai 比較重要,試著以它為主,讓 googletrans 使用較新版本的 httpx 看看,也就是安裝 googletrans 時,不要檢查 dependency,將原本的安裝指令:

!pip -q install  googletrans==4.0.0-rc1

多加「--no-dependencies」改為:

!pip -q install --no-dependencies googletrans==4.0.0-rc1

httpcore 的問題

前面雖然解決了 googletrans 安裝時的問題,執行時,換 httpcore 有問題,出現了這樣的錯誤訊息:

AttributeError: module 'httpcore' has no attribute 'SyncHTTPTransport'

查了一下,可以在使用 googletrans 前,先執行:

import httpcore
setattr(httpcore, 'SyncHTTPTransport', 'AsyncHTTPProxy')

利用這兩行來 patch,只要比 googletrans 先執行,就不會出現 AtributeError。

httpx[http2]

本以為可以順利執行 google 翻譯了吧!結果又出現這樣的訊息:

Using http2=True, but the 'h2' package is not installed. Make sure to install httpx using `pip
install httpx[http2]`.

不過,這看起來比較好解決,就照提示,安裝 httpx[https] 就好,所以在安裝 googletrans 之前,先執行:

!pip -q install httpx[http2]

經過以上的修正,終於可以讓 googletrans 順利地和 bilingual_book_maker 搭配,以 google 翻譯來進行翻譯。

不過,為了讓使用更有彈性來選擇是否以 googletrans 幫 bilingual_book_maker 執行 google 翻譯的功能,我加上了「install_googletrans」的設定參數,如果勾選了,就使用 googletrans ,否則使用 bilingual_book_maker 專案內建的功能。這樣子,必要的時候,可以選擇關閉我亂改的部份,直接執行 bilingual_book_maker,也方便除錯。

這個雖然是自己沒在使用的工具,累積了除錯及解決問題的能力,時間沒有白花,收穫還挺多的,相信它是一個善的循環。

相關文章


2024年3月3日 星期日

3DP : Delta 校正尺寸大小

2024年3月3日 星期日

第二部 3D printer 是 Delta 型的,當初滑塊、效應器都是自己用 PLA 印的,PLA 的缺點就是久了會脆化,所以都忘記已經重印過幾次了。年前在檢修、測試時,效應器又部份零件斷了,加上熱敏電阻 NTC 也斷了,索性一次下單,通通換成金屬件。

這幾次很認真的調校,重新復習靭體的各參數,忘了什麼時候改用 Marlin 1.1.9.1 的,暫時不換版本。Marlin 有支援 M665 可以讓我們先以 G-code 來邊改邊測試,調校時,可以用:

M665 H289.9

H289.9 將 Z 的最大高度設為 289.9 mm。

可以用:

M665 L217

L217 將懸臂的長度設為 217mm。

這部機器三軸及調度調校完以後,列印完 20x20x20 的測試方塊後, Z 的調度沒問題,但是 X / Y 的尺寸卻是略小,只有 19.84mm:


Marlin 中,跟 X / Y 尺寸大小相關的參數是 DELTA_DIAGONAL_ROD,我目前 Configuration.h 中的的設定是:

#define DELTA_DIAGONAL_ROD 217

要將 217 調整為多少呢?應該是 20mm 的大小,卻印出 19.84mm ,所以依比例計算一下:

217 * 19.84 / 217 = 215.264

可以先用 G-code 來暫時改一下 DELTA_DIAGONAL_ROD,下這樣的指令:

M665 L215.264

重新再印一次 20x20x20 的方塊,確定尺寸正確了,再修改 Marlin 的參數:

#define DELTA_DIAGONAL_ROD 215.264


久沒摸了,不少東西忘了,不過,稍加複習一下,好像又喚醒了沉睡的能力。比較頭痛的是線材吸了不少水份,還沒進到料管就斷了,要來試試看有什麼方法救。


2024年2月29日 星期四

Biking : 春崎產業道路

2024年2月29日 星期四

天氣狀況 : 陰

TRIP DIST : 7.03
TRIP TIME : 0:33:52
AVG. SPEED : 12.4
MAX. SPEED : 42.4

今年居然在櫻花開得最茂盛時,忘了騰龍御櫻。雖然花不多了,還是要補一下功課,騎一趟春崎產業道路。不過,看來今天我的體力不行,自行車的碼錶也不給力,只記錄到一半的行程。

在東山高中上來的叉路口喝水,遠遠就看得到騰龍御櫻的櫻花。兩位女士正在路口猶豫要如何回到汽車停放的杏花林。她們由樟湖步道走下來的,要再由老泉街45巷走上杏花林,有一點距離,幸好下午太陽不見了,不然一定曬到哀哀叫。

氣喘噓噓地過了春崎的第一個大彎道,不到菜園前的第二個大彎就累到下車「高尚」一下了。幸好走一小段後,又能繼續踩踏,菜園後的第三個大彎,節奏對了,踩起來就輕鬆許多。

過了菜園沒多遠的這個路口:

電線桿補一張特寫:

好奇心驅使下,就將車牽向小路去了。看到了櫻花,也看到了小木屋,那是以前去騰龍御櫻賞花時,走到最低處可見的小木屋。原來石階小路走三小段就進到騰龍御櫻了。



哈!這樣子少騎一個陡陡的大彎,直接就闖進櫻花林了。

在坡頂遇到一位年輕人騎 Gogoro 上來賞花,小聊了一下。他在家當奶爸,照顧一歲多的小孩,下午小孩的阿嬤幫忙照顧半天,他則「不勤快」地接單跑外送;只能說,選擇在家當奶爸,勇氣可嘉。

2024年2月21日 星期三

Colab : 讓 OpenSCAD 可以輸出圖片

2024年2月21日 星期三

 在一般的電腦中,OpenSCAD 可以利用 -o xxx.png ,來輸出模型的預覽圖片,但是相同的指令在 Google Colab 中卻會出現類似這樣的錯誤訊息:

Compiling design (CSG Products normalization)...
Normalized CSG tree has 102 elements
Unable to open a connection to the X server.
DISPLAY=
Can't create OpenGL OffscreenView. Code: -1.

然後圖片並沒有輸出任何內容。

主要的原因是 OpenSCAD 輸出圖片時,需要有一個「顯示器」,但它在 Colab 這種遠端的虛擬機環境中並找不到,就出現錯誤訊息了。

沒關係,既然是虛擬機,那就安裝 Xvfb 和 pyvirtualdisplay,來一個虛擬的顯示器吧!

在安裝完 OpenSCAD 後,順便加上這樣的指令,來安裝 Xvfb 和 pyvirtualdisplay:

if not os.path.exists('/usr/bin/Xvfb') :
  print('安裝 xvfb ...')
  !apt-get -qq install xvfb 2>/dev/null >/dev/null
try: from pyvirtualdisplay import Display
except:
  print('安裝 pyvirtualdisplay ...')
  !pip -q install pyvirtualdisplay

要啟用虛擬顯示器就加上這兩行:

from pyvirtualdisplay import Display
Display().start()

有了 Xvfb + pyvirtualdisplay 助攻,就可以在 Colab 中,順利地讓 OpenSCAD 輸出圖片了。

相關文章


OpenSCAD : 輸出 PNG 圖片快速預覽

 最近試著將 OpenSCAD 產生 3D 模型檔案的程序在 Google Colab 中完成,所以得研究一下如何在命令列中下指令。OpenSCAD 可以使用的的參數在官網中有說明文件:

OpenSCAD 在輸出檔案時,除了輸出成 3D 模型,也可以輸出 PNG 圖檔;輸出成 PNG 圖有什麼作用?輸出圖片所需花費的時間很少,可以讓我們快速的預覽模型長什麼樣,確定沒問題了,再開始製作 3D 模型。而且我們可以利用「--camera」的參數,自訂要從哪一個視角來看模型。

[圖1] 由圖形界面取得 viewport 的數值

「--camera」參數是由七個數字所組成的,七數字包括:

  • translate 三個,分別是 x, y, z 的位移大小。
  • rotate 三個,分別是 x, y, z 的旋轉角度。
  • distance 一個,是由多遠來觀察模型。

每一個數字間用逗號分隔即可。如果不知道數字要用多少,可以先在圖形模式中調整,然後如 [圖1] ,觀察視窗左下角的數字後記下來。

假設我的 OpenSCAD 的程式檔名為 lenticular-card-new.scad,然後想輸出的第一張預覽圖片檔名為 test-1.png,用這樣的指令:

openscad -o test-1.png --camera=0,0,0,60,0,75,140 lenticular-card-new.scad

注意「--camera=0,0,0,60,0,75,140」,拆解一下:

  • translate : 0,0,0
  • rotate: 60,0,75
  • distance: 140

模型放正中央,然後 X 為中心,旋轉 60 度;Z 軸為中心,旋轉 75 度的結果:

[圖2] --camera=0,0,0,60,0,75,140

想看另一面,就執行以下指令:

openscad -o test-2.png --camera=0,0,0,60,0,270,140 lenticular-card-new.scad

模型放正中央,然後 X 為中心,旋轉 60 度;Z 軸為中心,旋轉 270 度的結果:

[圖3] --camera=0,0,0,60,0,270,140

Google Colab 中可以直接顯示圖片,而 OpenSCAD 有輸出為 PNG 圖片的功能,這樣子可以在調整完模型的參數後,快速預覽可能結果,再進一步將參數最佳,確認沒問題後再製作模型,應該可減少一些無謂的等待。

相關文章

2024年2月9日 星期五

Life : 2024 門迎百福::戶納千祥

2024年2月9日 星期五

中午在門口將去年的春聯「拿下」時,聽到樓上也在撕春聯,啪啪啪~處理滿久的樣子。哈!這幾年我都是將春聯貼磁鐵條上,就直接吸在鐵門上,不但貼的時候好調整,取下時更簡單。

今年決定換一下內容,想想,幹嘛那麼在意別人的眼光,認真寫就對了;再說,這幾個月,我也花了不少時間磨了一下,雖比不上高手,自己看了開心就好。


小孩則負責摺紙生肖的部份,這一回沒有提供樣本,讓她用去年拆下的兔子喚起記憶後,再行改裝,反正作者說是龍,它就是龍。

新年快樂!祝福看到此文的人,都能平安健康,財源滾滾來。 ^_^

相關文章


3DP : 電源供應器故障

大概是人家說的「樂極生悲」,常常當我們正覺得對現狀很滿意時,總會殺出個意外,然後歡樂就瞬間結束。第一部 3D printer 是 2015年1月跟著別人的的教學,一步步組裝的,它命運乖舛,一開始就被懵懂的我弄得東修西補的 (雄:3DP : 新手上路多坎坷)。大概兩年前, X 軸動作不正常,才發現步進馬達的端子融掉了(雄:3DP : 步進馬達杜邦端子融化),後來將端子重做,換了另一片控制板,又印了不少東西,那一陣子其實也是這部 3D printer 運作最好的時候。之後先是發現 LCD 無法在不插 USB 時時看到畫面,最後是連動也動不了了,就這樣停機兩年左右。最近因為要測試,家裡三部 3D printer 一部部搬出來維修,其中 Delta 型的 3D printer 溫度感測器斷了,為了買很便宜的熱敏電阻,就順便加買了鋁件,及第一部 3D printer 的控制板(這是第三片了)。領貨時付了一千七百多元,結果主角熱敏電阻居然被店家給漏放了。

終於輪到維修第一部 3D printer 了,先拍張照,不然怎麼配置早忘得差不多了:

這片 RAMPS 和另一片都不能讓機器動起來,不插 USB 時,看起來 Arduino 有電,但是 LCD 沒畫面,插上 USB ,電腦送指令,但不會動作。換上新買的 RAMPS 1.6 的控制板呢?該正常運作了吧!

想得美!這麼順利的話,這一篇就不用記錄了。

解決不了問題,只好開始一步步除錯了,在一堆線裡找問題點不容易,換上新的控制板接的線那麼少,還是沒動作,於是往 firmware 的方向去試了(其實也不合理,以前明明都好好的)。試了大半天,耳朵突然聽到沙沙沙,像有人在噴水的聲音,找了一下,應該機器上的電源供應器發出來的。什麼都試了,就是沒有懷疑過電源供應器。

換!將原來 Delta 3D printer 12V 6A 的變壓器先加兩根電線後接上去試。果然~果然是 PSU 的問題,三片 RAMPS 控制板都能讓 LCD 單機操作,都能讓馬達正常動作了。這下子變成 RAMPS 小富翁了!

後來順便將步進馬達的控制晶片一片片測試,找出一片 A4988 會讓馬達亂跑,趕緊將它做記號。看來還得再備幾片 A4988 才行了。

相關連結


2024年2月2日 星期五

Hiking : 太平山步道

2024年2月2日 星期五

去年底,同事打電話來約二月上太平山,哈!離開學校都第五年了,同事還記得約我,二話不說,馬上答應。原來還擔心自己的雙腳會不會山路走一走, ITBS 又犯,今天走完見晴懷古步道,跟需要上上下下的翠峰湖環山步道,居然安全無恙;看來,這兩週的刻意鍛鍊可能發揮了作用。

上一次到太平山是 2007年七月初跟另一批同事的三日遊,久到我只記得開同事的車,手煞車未全放開,一路聞到燒焦味的糗事。這一回換一批人,八個人都不開車,租小巴士,可以放輕鬆地看山看水就好。

運氣不錯,天氣並沒有如氣象預報的糟,上午11點多的太平山雖然不時有霧氣飄來,但也有藍天白雲。當然要抓緊這麼好的機會,走一下步道。由於約定的午餐是12點半,所以只能先選擇路程較短、所需花費時間較少的見晴懷古步道。

當大家都在排隊等著拍長滿青苔的鐵軌,我選擇一旁林間的這個景:


雲霧飄進林間,陽光穿透進來,仙境般的景緻,真真實實的在眼前,居然沒有吸引到大家的目光。

拍完雖然很興奮地提醒同事快去搶拍,結果大家選擇繼續排隊拍經典的鐵軌。人生就是這樣,無論人、事、物,稍縱即逝,當你錯過了,就錯過了!煙消霧散時,難得一見的美景亦隨之消逝。

我喜歡大自然,見晴懷古步道雖短,卻值得細細品味;缺點就是太熱門,人太多,當你想駐足,腳步聲卻催促著,當你想聆聽,嘻鬧聲蓋過了一切。

在太平山莊用完午餐,由於蹦蹦車去程是「半點」發車,回程是「整點」發車,算一算時間應該不夠再去翠峰湖,所以大家決定捨蹦蹦車,去走步道。這樣也好,可以補上回未去的景點。

從太平山莊到翠峰湖有16公里,在山裡繞來繞去的,終於可以下車。感謝同事知道我容易暈車,讓我坐在副駕駛座,不然,肯定像走完見晴懷古步道的繩索橋後,暈頭轉向的。


沒有事先做功課,到了環山步道東口才知道翠峰湖環山步道是經過認證的全球首條「寧靜步道」(Quiet Trail)。不過,今天一路都沒聽到蟲嗚鳥叫,也完全沒有遇到其它遊客,哈!有夠寧靜的。大概正是因為少人有走,讓人有踏入原始森林的感覺,樹林和苔蘚類構成了各式各樣的綠色動物在一旁窺視著我們。


步道有一點滿特別的,在木頭上釘了鋼筋止滑,讓人可以避免踩在布滿青苔的木頭、石頭,或是溼滑的泥土中,我是覺得這個設計有發揮作用,同事則覺得這樣更滑,所以寧可踩在土上。最後花了兩個小時十分鐘走完 3.95公里的步道,所有的人鞋子,我的最乾淨。鞋子髒了沒關係,環山步道的東口有廁所,也有洗鞋子的水糟,水槽邊還有各式的刷子,這設計真是貼心啊!辛苦的是今天的司機劉大哥,不介意大家的髒鞋,由步道西口載大家去上廁所兼刷鞋子。

能再度和老同事一起出遊是件樂事,更開心的是今天一雙腳都乖乖的,沒找麻煩,希望可以繼續保持下去。


2024年2月1日 星期四

Biking : 恆光 - 樟樹步道

2024年2月1日 星期四

 天氣狀況 : 晴

TRIP DIST : 12.19
TRIP TIME : 1:02:04
AVG. SPEED : 11.7
MAX. SPEED : 43.0

前幾天和朋友聊到我的 ITBS ,如果太久沒去運動,會犯,所以我盡量每天去快走個四公里左右的河堤;但是上週居然連走政大環山路一個上坡,加一個下坡而已就犯。他問了一個問題:「這樣到底是要走,還是不要走?」。再更早之前,遇到水果行的店員在河堤跑步,聊到 ITBS,她則是說不要理它,痛~繼續走!哈!當時我心想,痛是我在痛耶!而且那種痛讓人一跛一跛的,根本也走不了多遠就痛到不敢了。

不過,仔細地思考了一下,現在不像以前經常在教室、辦公室......之間移動,少了每天爬樓梯的上上下下,的確會造成有些肌肉愈來愈少用,所以應該要再多增加一些戶外活動的時間,讓自己的肌肉訓練一下。像昨天早上騎車,下午又跟小孩去走政大環山路一整圈,雙腳都乖乖的,或許跟有刻意訓練上下坡有關。

今天原本設定的目標是上貓空,到草湳折返,結果因為要趕回家煮午餐給小孩吃,只到貓纜站,牽車走完樟樹步道後就下山。

在老泉路上路過一處大彎,幾棵伏倒的竹子,空氣中滿滿的竹葉香:

這味道讓我又想起母親跟阿嬤包的粽子了,人總是在失去後,才會愈加想念。

在準備轉入老泉路26巷的叉路口,先在東山高中的方向看到一隻老鷹滑向樹梢,看來牠的巢可能就在那裡。後來在另一個方向又看到兩隻在天上盤旋著:

一個騎著公路車的車友由前方而來,邊騎邊跟他攀談了一下,他整車都是碳纖維的,據說,光將兩個輪框換成碳纖維的,就少了一公斤。不過,這車可不便宜,車架就六萬元了。

路過杏花林,路邊的山櫻花開了,杏花則是枝條上空盪盪的。

樟樹步道的魯冰花看來剛開沒多久,過年應該會更精彩。不過來看花的遊客可能也是滿滿的,走起來就不輕鬆了。


2024年1月31日 星期三

Biking : 河濱自行車道看花趣

2024年1月31日 星期三

天氣狀況 : 晴

TRIP DIST : 22.13
TRIP TIME : 1:04:51
AVG. SPEED : 20.4
MAX. SPEED : 32.8

前兩天走河堤,政大靠抽水站的櫻花也有幾棵開花了,跟小孩預測,這週天氣回溫,花兒多半會忍不住綻放;昨天看到某則報導說陽光公園的櫻花盛開了,鏡頭中拍到的是滿熱鬧、滿美的,於是今天的目標就是去驗證一下,鏡頭裡跟鏡頭外是否有落差。

週間騎車的好處就是一路人少、車少,藍天綠水的碧潭也是遊客不多。溪洲路河濱的櫻花部份開了:

陽光公園的花呢?其實主要是集中在停車場旁的步道。



幾棵櫻花開得比較多一些,近看就如上面的照片一樣,拉遠就稱不上壯觀了。百聞不如一見,很多事物還是得自己去看、去體驗才是真的。

測試一下 Google Maps 的定位記錄,還是得手動對齊道路,及修正部份記錄點才行,或許是自己的手機 GPS 不準確的關係,下回再用 GPS 手錶的記錄來比較一下。


 
雄::gsyan © 2009. Design by Pocket