一平行四邊形 ABCD,其中 E 為 AB 線上一點, F 為 AD 線上一點,知 ∆AEF, ∆BCE, ∆CDF 面積分別為 3, 6, 7 平方單位,請問 ∆CEF 面積多少?
2020年12月28日 星期一
2020年12月24日 星期四
下棋的策略
最近 Andy 迷上西洋棋,但他不是受Netflix 后翼棄兵這部影片的影響,而是先看到其它西洋棋介紹影片才注意這部影片,雖然即將學測,但我不打算過度干預,事情以及時機的孰輕孰重,他自己應該能拿捏。下棋是我蠻推薦的活動,對奕可以表現出人類智力極致的一面,從下棋的過程,可以讓一個人學習更深層思考,而專家可以展現出有策略的一面,這也意謂可以快速有效率獲得成功 (或想要得到的結果)。
今天會記錄這一主題,是因為 Andy 在我開車時,詢問對策略的想法,他說自己喜歡速戰速決,我認為
2020年12月20日 星期日
訓練數學感 276 ─ Square area
一正方形 ABCD,A 點 在 X 軸上,C 點在 Y 軸上,已知 OE = 1,CE = 5,請求正方形 ABCD 面積。
難度 ✩✩✩
2020年12月16日 星期三
BBS 24-1 開叫 2NT 直接加叫 NT 發展
發展通則:答叫者表明對 2NT 開叫支持程度,開叫者若為高限點力,接受邀請,反之則否
設想開叫者 21 點,3NT 需 26 點,6NT 需 33 點,7NT 需 37 點
2NT --- --- | (答叫者束叫) 0 - 4 點 |
2NT --- 3NT --- --- | (答叫者束叫) 5 - 10 點 |
2NT --- 4NT --- --- 6NT | (邀請小滿貫) 11 - 12 點 低限 高限 |
2NT --- 5NT --- 6NT 7NT | (邀請大滿貫) 15 - 16 點 低限 高限 |
2NT --- 6NT --- --- | (答叫者束叫) 13 - 14 點 |
2NT --- 7NT --- --- | (答叫者束叫) 17 點以上 |
2020年12月12日 星期六
訓練數學感 275 ─ 三角形邊長
2020年12月8日 星期二
2020年12月4日 星期五
Windows 10 v1909 檔案搜尋
公司電腦自從 Windows 10 更新版本到 v1909之後,檔案總管的檔案搜尋行為不同以往,明明有該檔案就是搜不到,雖然網路上有人建議安裝免費 Everything 軟體, 不過公司的 IT 以及電腦裡的防毒軟體皆指出,這個軟體不適合安裝,所以需要另外想辦法解決。
2020年11月30日 星期一
訓練數學感 274 ─ 最小 cos 值
2020年11月26日 星期四
BBS 23-2 開叫 2NT 答叫發展分類表
答叫者牌型 | 牌型不明 xxxx x4xx 44xx 4xxx | 高花五低花四 5x4x 5xx4 x54x x5x4 | 高花五四牌型 45xx 54xx | NT H/S 3D x5xx x6xx 3H 5xxx 6xxx | |
束叫 | 2NT 3C 3* --- | 2NT 3D/H 3H/S --- | |||
成局 | 2NT 3C 3* -/3NT | 2NT 3D/H 3H/S 3NT | 2NT 3D/H 3H/S 4H/S | ||
邀請滿貫 | 2NT 3C 3* 4NT | 2NT 3D/H 3H/S (#) | 2NT 4D/H |
2020年11月22日 星期日
訓練數學感 273 ─ 平行與重疊
如左圖,試證明
2020年11月18日 星期三
公開招標(二)
搞定社區委員選舉之後,接下來的重頭戲就是公共設施點交,因為是全新社區第一屆管委會需要跟建商事務交接,因此第二次管理委員會會議就和建商進行圖冊資料交接,不過有委員提議找第三公正單位協助驗收,建商也爽朗答應支付相關費用,華固真不愧為國內營建業數一數二大上市公司,希望能迅速順利點交,可以創造多贏局面。
物管公司建議我們,此時是否考慮社區設備保養維護的廠商,因為有些廠商可以協助公設驗收之外,並且也有能力進行設備維護,可以請廠商們來簡報評審,這讓我想起之前社區的公開招標,雖然這個制度很成功地在舊社區被執行,不過太繁瑣,新社區建議微幅調整,首先是費用支出分級,
2020年11月14日 星期六
訓練數學感 272 ─ f(mn)=f(m).f(n) 函數
Known $f(mn)=f(m)\cdot f(n)$
$f(f(m))=m$
To find $f(2020)=?$
難度 ✩✩✩✩
2020年11月10日 星期二
相對漏電起痕指數 (Comparative Tracking Index, CTI)
本文主要紀錄電子商品高壓漏電,絕緣材料必須考量安規的問題,http://www.shingtech.com.tw/comparative%20tracking%20index.pdf
2020年11月6日 星期五
訓練數學感 271 ─ 三角函數題組
$2(sin 3x)(cos 4x)= sin 5x, \; x = \;?$
$sin 10° + sin 50° = sin X°, \; X = ?$
$cos 20°\times cos 40°\times cos 80°= \;?$
$sin^{2} 10°+ sin^{2} 30°+ sin^{2} 50°+ sin^{2} 70°= \;?$
$sin^{2} 20°+ sin^{2} 40°+ sin^{2} 60°+ sin^{2} 80°= \;?$
難度 ✩✩✩✩
2020年11月2日 星期一
社區財務點交
購買預售屋或新成屋時,在管委會成立前,建商都會預收幾個月份管理費,本文的重點就是這筆管理費如何從建商的手中順利移交給社區管委會,這是繼社區公設點交之後,對新社區第三件重要的事。
每個社區會有兩筆錢,一個叫管理費,移交前由建商預收代管,另一個是共同基金,由建商建造房屋時提撥給縣市政府。
管委會成立後,這些錢會移交給管委會,管理費將放在活期存款,通常應有3個月份管理費收入金額,以因應日常開支,而共同基金則會存放到定期存款,這些是未來社區重大修繕時使用,安全存量為兩年份管理費收入,剛開始共同基金絕對不足,建議十年時間將其補足。
正常情形,從社區第一戶交屋起,建商開始託管,並支用管理費,等到交屋六成七以上,才召開第一次區分所有權人大會並成立社區管理委員會,將公設、管理費、共同基金等項目移交管委會,但今年遭遇 COVID-19,本社區不得不延後區分所有權人大會舉辦,致使建商託管時間延長,預收的管理費已經用鑿。
我們這屆管委會的任務就是
2020年10月29日 星期四
2020年10月25日 星期日
為什麼要睡覺?(Why We Sleep)
為什麼要睡覺?:睡出健康與學習力、夢出創意的新科學
Why We Sleep:The New Science of Sleep and Dreams
作者: 沃克 Matthew Walker
譯者: 姚若潔
出版社:天下文化,ISBN: 978-986-479-631-1
人的一生約有 1/4 ~ 1/3 的時間在睡覺,因為這件事情很重要才會占用我們這麼多時間,另外這也是大多數人所忽略的日常,有人會刻意每天縮短幾小時去做一些事情,看完此書後深切了解這是有害健康的!以前看過一本書 睡眠管理手冊 (睡出時間來) ,她是從商務人士的角度來看待睡眠,每天偷幾小時來努力工作或學習,確實時間放在何處,成功就在何處,但是這些成功都是從健康逐步侵蝕而來。
現在個人已年過半百,但是續命時間仍有數十年,希望過一個健康有品質的生活,我覺得最簡單的做法就是睡飽覺 (接近八小時 + 午休),因為睡眠期間,身體自然會修復損傷,無論體內還是體外,簡單說就是可以不藥而癒,但是很多人反其道而行,吃很多保健品或藥品並且縮短睡眠時間,看似生活精彩但是有病痛纏身。
以約 90 分鐘一個睡眠周期來看,最佳睡眠應有五個完整週期,睡覺睡到一半被打斷強迫起床,尤其是非完整週期,是令人蠻難過的事,所以盡量睡到自然醒,當設定鬧鐘時間應該注意一下週期。此外可利用光線幫我們調節睡眠,因為褪黑激素與光線有關,當少光時自然想睡,另外腺苷 (睡眠壓力) 是體內另一股驅使你想睡的力量,它不會因為你喝了大量咖啡、茶或提神飲料而消滅它們,它會隨醒著的時間增加而一直增加,直到你陷入深層睡眠才能真正消除它們,有時通宵熬夜後感覺第二天有段時間精神特好,這是褪黑激素與腺苷是兩套獨立的系統 (p-035),但是接下來將是身體需要報復性的休息。
睡覺前三個周期以深眠為主,幫助我們學習記憶,腦是睡著,但身體還未完全休息。後面時間的睡覺以淺眠 快速動眼期(Rapid Eye Movement,REM)為主,腦是醒著的,身體卻在睡覺,有助於穩定情緒以及獲得創造力。
2020年10月21日 星期三
訓練數學感 269 ─ 直角三角形裡的線長與角度
2020年10月17日 星期六
社區公設點交 ─ 營建品質檢測
近日社區進行公設點交,管委會遴選出 SGS 為公正第三檢驗單位,我們請他們進行社區機電、消防與營建的檢驗,因為機電、消防等設施政府有規定必須通過檢驗,才視為建商完成社區點交,不過營建的品質檢測,政府並無強制規定,原先建商是不願意支出這筆檢驗費用,但是經過協商後,他們點頭答應,展現出有品牌的大建商氣度。
現在大樓入住前裝潢,都需要從梯廳、走道至門口需要貼上一層保護,以免裝潢施工程搬運過程碰傷牆面與地板。營建品質檢測,主要靠目視以及敲擊檢查,看天花板、壁面、地板的外觀有無瑕疵、破損,磁磚、石材有沒有貼牢有空心的情形,因此現在正在裝潢中的住戶,社區管委會籲請他們暫時拆除保護貼以便檢查。
全社區兩百多戶,裝潢中有二、三十戶,
2020年10月13日 星期二
整數直角三角形的特性
前文提到 Andy 發現整數直角三角形具有下列特性
$c^{2}=a^{2}+b^{2},\;a^{2}>2b\;\;or\;\; b^{2}>2a,\; \; a,b,c \in N$
其由來為
可以利用平方差來求直角三角形的整數解,例如
$a^{2}=12321=1\times 12321=(6161-6160)\times (6161+6160)=6161^{2}-6160^{2}=c^{2}-b^{2}$
可以觀察到 $a^{2}>2b$ 以及
$c = (m+n)/2,\;b = (m-n)/2,\; \; m,n \in N,\;and\;m \times n = a^{2} 為一定值$
2020年10月9日 星期五
2020年10月5日 星期一
直流馬達旁 104 陶瓷電容
圖片來自 FB 給氣狼機器人聯盟 (Robot Wolf Group) 貼文 |
一網友在 FB 上貼文,詢問為何選擇 104 陶瓷電容,以及其作用為何?
先討論 104 陶瓷電容是怎樣的電容器?再說明它在這電路的作用。
一般陶瓷電容表面會標示 104K,它代表 10 x 104 pF ±10% = 10 x 104 x 10-12 F = 10-7 F = 0.1 μF
它通常用於消弭高頻雜訊,因為不需要精密限定特定頻率,所以選擇 ±10% 誤差,會使用陶瓷電容主因為價廉穩定,溫度範圍廣 −55 °C 至 85 °C。
2020年10月1日 星期四
小學珠心算對中學數學的影響
之前我在 FB 高中數學討論區貼了一個問題,詢問小學珠心算對中學數學的影響,竟獲得數千人回應,也引出大神孫文先先生的留言,並引發珠心算看法的正反大戰,超乎我的意料。
2020年9月27日 星期日
訓練數學感 267 ─ 幾倍角度
$a b c$為三角形的三邊,它們的對應角分別為 ∠A ∠B ∠C,已知 $b+c = 2a \cdot cosB$,求 ∠A 是∠B 的幾倍?
2020年9月23日 星期三
2020年9月19日 星期六
2020年9月15日 星期二
BBS 23-1.01 開叫 2NT 答叫發展
開叫者:21-22點,平均牌(4333,4432,5332) 門門有擋,可能有五張牌組
答叫者:手持平均牌型,且無四張以上高花牌組,可採以下直接加叫
大牌點
2NT --- --- 0-4
3NT 5-10 (束叫)
4NT 11-12 (邀請 6NT)
6NT 13-14 (束叫)
5NT 15-16 (邀請 7NT)
7NT 17以上 (束叫)
其它方式答叫
2NT --- 3C 不迫叫史蒂曼 (Non-Forcing Stayman responses to NT)
詢問同伴高花情形或表示自己特殊牌情,4點以上
答叫者再叫 3NT為無王試局,答叫花色為邀請滿貫
3D/H 傑柯比轉換叫 (Jacoby Transfer bid after NT,吉可貝)
轉換高花,讓持強牌者當莊
答叫者再叫 3NT為無王試局,答叫花色為邀請滿貫
3S 低花史蒂曼
兩門低花 (五五或五四) 或一門六張低花以上
4C 哥柏特約 (Gerber convention over NT)
詢問同伴 Ace 張數,決定無王合約線數
4D/H 德州轉換叫 (Taxes Transfer bid after NT,德克薩斯)
六張以上高花,邀請滿貫
4S 高階低花史蒂曼
通常少於 6點,兩門五五低花,束叫於五線低花
5C/D 五線低花束叫
2020年9月11日 星期五
訓練數學感 265 ─ 哪一箱沒被抽到?
某魔術師有三個不同顏色的箱子,以及 100 顆球,這些球編號 1 到 100,每個箱子至少放一顆球在裡面,魔術表演時,魔術師背對箱子,請觀眾從任兩個箱子各拿出一顆球,將號碼相加告訴他,魔術師就可以立即回答哪一個箱子沒有被挑中。
請問有多少種放球的方法,可以讓魔術師精準表演這個魔術?
2020年9月7日 星期一
GPIB vs PCIe
2020年9月3日 星期四
訓練數學感 264 ─ 循環迭代 (Cycling Iteration)
2020年8月30日 星期日
狀態配對乘法 (State-Pair Multiplication)
你有沒有想過,乘法其實沒你所想的那麼簡單?
乘法除了算數字之外,還能解排列組合!?
討論問題之前,先看看一個直式乘法
---------------
12345654321
這個算式跟兩個骰子組合相關,標示出藍字應該更容易理解,
-----------------------------------
1 2 3 4 5 6 5 4 3 2 1
-----------------------------------------
1 2 3 4 5 6 5 4 3 2 1 0 0
----------------------------------------------------------
1 2 3 4 5 6 5 4 3 2 1 0 0
注意,每一位單獨乘法結果相加不進位,例如藍字5為三顆骰子數值總和,共有6種排列方式 (1,1,3),(1,3,1),(3,1,1),(1,2,2),(2,1,2),(2,2,1)。
倘若 A + B + C = 6,1 ≤ A ≤ 6,1 ≤ B ≤ 4,0 ≤ C ≤ 4,A, B, C ∈ N,請問有多少種排列組合?
2020年8月26日 星期三
2020年8月22日 星期六
混沌 (Chaos - video)
分享一則數學影片關於混沌,https://mp.weixin.qq.com/s/_cPDgjBJ8rLyvZpdAEv32w
它講述 $f(x) = rx(1-x)$ 數學式與混沌之間關聯。
2020年8月18日 星期二
訓練數學感 262 ─ 儀器的信賴區間
某精密儀表進行環境測試,DCV 1V 檔位輸入 1V,測試四台電錶,分別獲得 0.99999, 1.00000, 1.00001, 1.00002 四組數據,求這一型電錶符合 99% 機率信賴區間。
2020年8月14日 星期五
社區管理委員的產生
今年 COVID-19 發生之前,搬進新建社區居住,主要之前房子空間太小,有換屋需求,基本上,一個家庭有多少人,就應該住幾房,這樣才不會太擁擠。
回歸主題,社區直到最近七月才招開第一次區分所有權人大會,首要重點是社區規約相關條款通過,其中管理委員選任之資格條款為:
主任委員、副主任委員、監察委員及財務委員,由具區分所有權人身分或其配偶、具行為能力之直系血親之住戶任之,其他管理委員得由住戶任之。
在會議中有住戶提案反對加入藍字部分,因為他住過的社區曾經發生委員賠償訴訟,因為該委員非所有權人並且也沒有財產而無法求償,經過表決拿掉藍字部分,限定這四位委員必須為區分所有權人。
2020年8月10日 星期一
訓練數學感 261 ─ 圈選數值的範圍
2020年8月6日 星期四
無人機登記與 HBSE
2020年8月2日 星期日
訓練數學感 260 ─ 梯形中三角形面積
請求 ∆ACE 面積為多少?
2020年7月29日 星期三
BBS 22-1 開叫 1NT 答叫者弱牌發展
開叫 1NT,答叫者弱牌,欲花色束叫。
1NT --- ---
| 答叫者 0-7 點,平均牌型 |
1NT --- 2C ---
2# --- ---
| 可能 4441 牌型,不迫叫史蒂曼特約 |
1NT --- 2D/H ---
2,3H/S --- ---
| 五張高花以上,傑柯比轉換叫 |
1NT --- 2S ---
2NT/3C --- ---/3C/D
| 低花兩門五五或單門六張以上,低花史蒂曼特約 有可能高花四張低花五張 |
2020年7月25日 星期六
2020年7月21日 星期二
賀 TMT11 佳績
Andy 最近參加了 TMT11檢定考,他說這次考試沒有特別準備,全憑實力,雖然只有 15 題選擇題, 15 題選填,但是答錯會倒扣,所以不能亂猜,他的成績落在所有考生前 3%,並且是全校第一,恭喜他創造自己的佳績。
Andy 自小喜歡數學,應該是深受我的影響,不過我不會要他算題本,因為學校作業已經很多了。小時候偶而會出題給他想想,例如 訓練數學感 3 ─ 好難的小二數學,到了小學三四年級之後,換他開始出題考我,例如 訓練數學感 9 ─ Total 22,就這樣讓他養成常常思考的習慣,很自然的不會害怕數學,曾經問他是甚麼原因讓他喜歡數學?他覺得能夠想一些奇怪的題目考別人,是能增進數學能力的好方法。
2020年7月17日 星期五
訓練數學感 258 ─ 生產管制 (Production Control)
請制定精密儀表在 DCV 1V 檔位,輸入 1V 時的生產管制範圍。
求解這個問題前需要先解
訓練數學感 254 ─ Cpk(Process Capability Index,製程能力指標)
訓練數學感 255 ─ Uncertainty
訓練數學感 257 ─ Uncertainty (2)
2020年7月13日 星期一
偶兒玩玩 ─ 莊育慧老師的網站
照片中身穿橘色衣服就是莊育慧老師 |
因為自己並無這方面天賦,所以我以往從數理方面發展,著重電子產品的功能性設計,不過近年開始回頭設計桌遊,以及個人也對小型機器人有興趣,這場演講內容正好滿足個人這方面的需求。
以人體為例,成人完美比例是八等身,可愛的小孩是三等身,只要比例對了,看起來就會順眼。
然後是形狀,所有物體皆可拆解成圓、三角、矩形、五邊、六邊 ... 等形狀組合。
搞定形狀後,可以加入線條補充,它會影響人物的個性。
最後再上顏色,盡量七彩,有主色也要有對比色襯托,加入陰影增加立體感。
2020年7月9日 星期四
訓練數學感 257 ─ Uncertainty (2)
精密校驗儀 DCV 3.3 V range,它的穩定度 (Stability) 於 24 小時內 +/- 1 ℃ 為 +/-(2 ppm + 1.5 uV) 。它的 absolute uncertainty 在一年內 +/- 5 ℃ 為 +/- (11 ppm + 2 uV),
求此精密校驗儀在 DCV 3.3 V range,DCV 1 V 的 uncertainty。
2020年7月5日 星期日
BBS 21-1.01 開叫 1NT 答叫三線新花發展
答叫者:1. 五張以上高花(牌型平均) 邀請滿貫
2. 四張高花,五張以上低花,迫叫成局 (至少 3NT)
1NT --- 3C
3D
3H
3S
|
xxx5 牌型 \
xx5x 牌型 / 有一門四張未叫高花,迫叫成局
x5xx 牌型 \
5xxx 牌型 / 邀請滿貫
|
發展通則:答叫者 1. 邀請滿貫 ─ 新花為示叫,王牌確定
2. 迫叫成局 ─ 尋求較佳合約
2020年7月1日 星期三
訓練數學感 256 ─ 請多加油
加油
多加油
+請多加油
----------------
1891
「請多加油」這四個字分別代表四個阿拉伯數字,請問這四位數字是多少?
難度 ✩✩
2020年6月27日 星期六
在 blogspot 顯示程式碼
近期開始在部落格貼出程式碼,但是排版顯示總是不盡理想,因此參考別人怎樣處理,這篇文章處理的方法最簡單,所以就選用它。
https://marcus116.blogspot.com/2018/02/blogger-blogger-show-code-using-google-code-prettify.html
程式顯示範例如下
void setup() { Serial.begin(57600); int a = 255; char str2[4] = "ABCD"; // ROM 1576 bytes, RAM 196 bytes Serial.print(str2); Serial.print(a); Serial.println("EF"); }
2020年6月23日 星期二
訓練數學感 255 ─ Uncertainty
某精密電表在 DCV 1V 檔位測試 1V,每變動 1℃ 溫度係數 0.0010% of reading + 0.0005% of range,該電表校驗於 23℃,試問它在 28℃ 時的 Uncertainty。
2020年6月19日 星期五
ROSA 2020 系統開發 4 ─ 超音波距離偵測器
會開發這個程式是因為正好在重新設計 ROSA,文創造設計工作室的張宇文老師正在設計一個超音波感測讓垃圾桶蓋開閉的程式,因此就順手寫一個相同功能的程式。
主程式為 ROSA_Door.ino,Arduino pin 12, 11 分別連接超音波感測器 trig, echo,pin 9 接 servo ,並使用 USB 來幫忙除錯,所以 pin 1, 0 分別為 TX, RX,baud 115200 bps,程式碼如下:
// (C) 2019-2020, Bridan Wang, CC BY-NC-SA 3.0 TW // This is a demo program applied Robot Operating System for Arduino (ROSA) // http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino) //軟件許可協議 // //研發養成所 Bridan Wang 提供此軟體供學校教育或個人單獨使用 //對外分享展示本軟體時,請說明來源來自研發養成所 //你可以架構在本軟體基礎上,設計新功能或修改 //本軟體屬於 Bridan 和或其它原始碼供應商,並受適用的法律版權保護 //此軟體按“原樣”提供,可能含有錯誤,不作任何明示,暗示或法律的保證 //本軟體僅限 Arduino 部分微控制器產品,適用於特定用途 // Bridan 在任何情況、環境以及特殊使用不負任何原因損害賠償責任 // //這是 ROSA 韌體版本的一部分。 // //建議使用 Arduino-1.8.8 以後版本編譯,因為有發現舊版本有錯誤情形 /*********************************************************** // System Condition DEFINE ************************************************************/ #define PRODUCT "ROSA,Door " #define VERSION "v2020.5.12" //#define TIME_2ms // ROSA_TIME_2ms() //#define TIME_10ms // ROSA_TIME_10ms() #define TIME_50ms // ROSA_TIME_50ms() //#define TIME_100ms // ROSA_TIME_100ms() //#define TIME_250ms // ROSA_TIME_250ms() #define TIME_500ms // ROSA_TIME_500ms() //#define TIME_1sec // ROSA_TIME_1sec() //#define TIME_SYSTEM // ROSA_TIME_SETUP() #define STRING_LENGTH 25/*********************************************************** // Include ************************************************************/ #include ".\ROSA\ROSA_BASE.cpp" #include ".\ROSA\ROSA_LINK.cpp" #include ".\ROSA\ROSA_SENSOR.cpp" #include ".\ROSA\ROSA_SERVO.cpp" ROSA_LINK link; ROSA_SONAR sonar; ROSA_SERVO servo; /*********************************************************** // Main Program ************************************************************/ void setup() { link.USB_SETUP(115200); // pin 1, 0 TX, RX USB, 115200 baud sonar.SETUP(12, 11); // pin trig, echo servo.SETUP(9); // pin 9 } void loop() { ROSA_TIME_RUNNING(); // 系統時間處理 } /*********************************************************** // SYSTEM TIMER ************************************************************/ void ROSA_TIME_50ms() { servo.PROCESS(); // 伺服馬達處理 } void ROSA_TIME_500ms() { int cm = sonar.DETECT(); // 超音波偵測 link.PRINT(STRING("Distance : %d cm\n", cm)); // 印出以便偵錯 if (cm < 25) { // 接近時開動 servo.setAngle = 180; servo.hold = HOLDON; } else if (cm > 100) { // 遠離時關閉 servo.setAngle = 0; servo.hold = 0; } }
2020年6月15日 星期一
訓練數學感 254 ─ Cpk(Process Capability Index,製程能力指標)
工廠每月生產 100 台精密儀表,測試 DCV 1V 在 1V 電壓檔位,
這檔的規格為 23 ℃ 1 Year 0.025% of reading + 0.005% of range,
將這 100 台電表在這個測試點讀取一筆資料,取總平均得 0.9999789 V,
採取移動全距每組個數 n = 2,移動全距 Rm = |Vk - Vk+1|,∑ Rm = 0.00125 V
k 樣本總數,求 Cpk = ?
2020年6月11日 星期四
ROSA 2020 系統開發 3 ─ Arduino 的 String
最近開始動手重寫 ROSA (Robot Operating System for Arduino),原本想利用 Arduino 的字串函數來處理字串,發現它的函數庫尚未優化,會佔用很多記憶體,因此留文記錄問題,並提供 ROSA 的解決方案。
正式討論 ROSA 程式之前,先從資料結構說起,話說 String 是一串字元以零值結尾,可以表示成
String str1 = "123456789"; 它也可以是字元陣列, char str2[10] = "123456789"; 或 char str3[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 0}; 或 char str4[10] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x00}; 或 char str5[10] = {49, 50, 51, 52, 53, 54, 55, 56, 57, 0}; 甚至可以是字元指標, char* str6 = str2; 將 str6 指標指向 str2 字串的起頭。
了解上述概念後,我們寫幾個程式測試,你會更加清楚怎麼一回事。
void setup() {
// put your setup code here, to run once:
Serial.begin(57600);
String str1 = "123456789";
Serial.println(str1);
}
void loop() {
// put your main code here, to run repeatedly:
}
這個程式編譯後,程式碼佔用 ROM 2642 bytes,RAM 使用 208 bytes後面的程式僅更改 setup() 比較差異,
void setup() {
// put your setup code here, to run once:
Serial.begin(57600);
char str2[10] = "123456789"; // ROM 1546 bytes, RAM 198 bytes
Serial.println(str2);
}
當陣列改成 {'1', '2', '3', '4', '5', '6', '7', '8', '9', 0}、{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x00} 或 {49, 50, 51, 52, 53, 54, 55, 56, 57, 0},都和 "123456789" 一樣。void setup() { // put your setup code here, to run once: Serial.begin(57600); char str2[10] = "123456789"; // ROM 1546 bytes, RAM 198 bytes char* str6 = str2; Serial.println(str6); }使用指標也相同於陣列。
=====================================================
再來測試字串與數值混雜顯示的情形,
void setup() { // put your setup code here, to run once: Serial.begin(57600); int a = 255; char str2[4] = "ABCD"; // ROM 1576 bytes, RAM 196 bytes Serial.print(str2); Serial.print(a); Serial.println("EF"); } void setup() { // put your setup code here, to run once: Serial.begin(57600); int a = 255; Serial.println(String("ABCD")+a+"EF"); // ROM 3132 bytes, RAM 206 bytes } void setup() { // put your setup code here, to run once: Serial.begin(57600); int a = 255; char str2[10]; // ROM 3020 bytes, RAM 196 bytes sprintf(str2, "ABCD%dEF", a); Serial.println(str2); } void setup() { // put your setup code here, to run once: Serial.begin(57600); int a = 255; Serial.println(STRING("ABCD%dEF", a)); // ROM 1728 bytes, RAM 206 bytes } void setup() { // put your setup code here, to run once: Serial.begin(57600); int a = 255; Serial.print(STRING("ABCD%dEF\n", a)); // ROM 1710 bytes, RAM 204 bytes }這個 STRING() 副程式是自己設計的,雖然無法像第一個例子 ROM size 那麼小,但是可以像 sprintf() 進行格式設定。
2020年6月7日 星期日
自由軟體 (Free Software)
這裡做一個註記,五個不錯的 Free Software,介紹內容請詳見下列連結
https://slat-tw.blogspot.com/2018/12/5.html?fbclid=IwAR2Htwb7fXJrwTqgg6FSlZy9h_C-50ot0UxbsOWd1IyMykWvAJOQooh_0lw
1. Shotcut 跨平台的影音編輯軟體
2. XMind 心智圖軟體
3. Stellarium 虛擬星象軟體
4. Inkscape 向量繪圖軟體
5. Blender 3D 動畫設計軟體
2020年6月3日 星期三
訓練數學感 253 ─ 費氏數列 (Fibonacci numbers) 中 17 的倍數
大家熟知費氏數列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... , F(n-2), F(n-1), F(n), F(n+1), F(n+2), ...
2020年5月30日 星期六
ROSA 2020 系統開發 2 ─ 投幣計時器 (4rdp Timer)
去年因參加創客比賽,學會雷切木盒子設計,因此計時器從外觀設計到內部電路及程式設計,一手包辦,下次擺攤時,這個計時器就可以讓遊客們打賞使用。
電路的挑選就是 Arduino Uno 和 LCD KeyPad 模組,一個按鈕 (停止鍵) 和微動開關 (偵測投幣)。
這個 LCD KeyPad 模組,使用 Arduino pin 4 ~ 9,pin 10 為背光控制,A0 是按鍵讀取的腳位,利用類比方式處理,因此不會占用過多數位腳,不過模組的按鍵這裡沒有使用。 另外這個投幣計時器使用 pin 3 偵測計時啟動,pin A1 偵測計時停止,這兩隻腳都設定數位輸入,並且 PULLUP,所以未按鍵時會讀到 1。
程式當然是使用 ROSA 2020,它使用了ROSA_BASE.cpp 、ROSA_DISPLAY.cpp、ROSA_TIMER.cpp 三個函式庫,ROSA_DISPLAY 內含 LCD KeyPad 驅動程式,並引用外部的程式庫 LiquidCrystal.h (Arduino 內含的程式庫)、LCDKeypad.h,ROSA_TIMER 函式可以處理碼錶正數和倒數計時,ROSA_BASE 除了基本時間和 IO 腳控制外,還加入 STRING,可將整數依據格式轉換成字串,這個 STRING 讓我花了五天時間把它最佳化,下一篇文章再仔細介紹設計的關鍵在哪裡。
現在繼續看 ROSA_Coin.ino 程式碼,系統使用 2ms 和10ms,2ms 用於碼錶計時,也是 ROSA 系統最小時間單位,10ms 為按鍵讀取時間間隔,原本設定 50ms 即可,不需要這麼密集,但是怕有人反應計時器按鍵反應遲鈍誤差高達 50ms,所以選擇 10ms,另外 Stop 按鍵持續一秒鐘,會把時間歸零。
// (C) 2019-2020, Bridan Wang, CC BY-NC-SA 3.0 TW // This is a demo program applied Robot Operating System for Arduino (ROSA) // http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino) //軟件許可協議 // //研發養成所 Bridan Wang 提供此軟體供學校教育或個人單獨使用 //對外分享展示本軟體時,請說明來源來自研發養成所 //你可以架構在本軟體基礎上,設計新功能或修改 //本軟體屬於 Bridan 和或其它原始碼供應商,並受適用的法律版權保護 //此軟體按“原樣”提供,可能含有錯誤,不作任何明示,暗示或法律的保證 //本軟體僅限 Arduino 部分微控制器產品,適用於特定用途 // Bridan 在任何情況、環境以及特殊使用不負任何原因損害賠償責任 // //這是 ROSA 韌體版本的一部分。 // //建議使用 Arduino-1.8.8 以後版本編譯,因為有發現舊版本有錯誤情形 /*********************************************************** // System Condition DEFINE ************************************************************/ #define PRODUCT "ROSA- 4rdp Timer" #define VERSION "v2020.5.12" #define TIME_2ms // ROSA_TIME_2ms() #define TIME_10ms // ROSA_TIME_10ms() //#define TIME_50ms // ROSA_TIME_50ms() //#define TIME_100ms // ROSA_TIME_100ms() //#define TIME_250ms // ROSA_TIME_250ms() //#define TIME_500ms // ROSA_TIME_500ms() //#define TIME_1sec // ROSA_TIME_1sec() //#define TIME_SYSTEM // ROSA_TIME_SETUP() #define PROJECT_ROOT C:\Users\bridwang\Desktop\Bridan\ROSA_2020 #define TO_STRING(s) #s #define ABSOLUTE_PATH(root, relative_path) TO_STRING(root\relative_path) #define RELATIVE_PATH(library) ABSOLUTE_PATH(PROJECT_ROOT, library) /*********************************************************** // Include ************************************************************/ #include RELATIVE_PATH(ROSA\ROSA_BASE.cpp) #include RELATIVE_PATH(ROSA\ROSA_DISPLAY.cpp) #include RELATIVE_PATH(ROSA\ROSA_TIMER.cpp) ROSA_PIN key_start; ROSA_PIN key_stop; ROSA_LCD_KEYPAD lcd; ROSA_TIMER timer; /*********************************************************** // Main Program ************************************************************/ void setup() { timer.START(0, 0, 0, 0, 0); // start, hr, min, sec, msec key_start.SETUP(3, INPUT_PULLUP); // pin 3 key_stop.SETUP(A1, INPUT_PULLUP); // pin A1 lcd.SETUP(); // pin 4 ~ 9, 10, A0 DISPLAY_INITIAL(); } void loop() { ROSA_TIME_RUNNING(); // 系統時間處理 DISPLAY_UPDATE(); } /*********************************************************** // DISPLAY ************************************************************/ void DISPLAY_INITIAL() { lcd.CLEAR(); lcd.PRINT(PRODUCT); lcd.CURSOR(0,1); // 換行 lcd.PRINT(" 00:00:00.000"); } void DISPLAY_UPDATE() { lcd.CURSOR(2,1); // 換行 lcd.PRINT(STRING("%02d:", timer.hr)); lcd.PRINT(STRING("%02d:", timer.min)); lcd.PRINT(STRING("%02d.", timer.sec)); lcd.PRINT(STRING("%03d", timer.msec)); } /*********************************************************** // SYSTEM TIME ************************************************************/ void ROSA_TIME_2ms() { timer.RUNUP(); } void ROSA_TIME_10ms() { if (key_stop.IN()==0) { if (key_stop.count == 100) // 持續按 STOP 一秒 timer.START(0, 0, 0, 0, 0); // start, hr, min, sec, msec else { timer.start = 0; // 按一下 STOP key_stop.count++; } } else { key_stop.count = 0; if (key_start.IN()==0) // 投幣 START timer.START(1, 0, 0, 0, 0); // start, hr, min, sec, msec } }