--- title: Talk slides template tags: description: View the slide with "Slide Mode". --- <!-- [toc] --> <!-- 嘿嘿這樣就可以有目錄 --> {%hackmd @HungPin/Dark %} # 開關 <!-- Put the link to this slide here so people can follow --> <!-- slide: https://hackmd.io/p/template-Talk-slide --- We have a collaborative session please prepare laptop or smartphone to join! --> ## <font color="#78E533">開關的作用</font> 開關是一種可以控制電流通過與不通,或流到其他電路的電子元件。 「閉路」(close)表示電子接點相連,允許電流流過;「開路」(open)表示電子接點不導通形成開路,不允許電流流過。 :::warning **NC**(nomal close)開關是指平時**電流可通過**,按下按鈕時斷電的開關;**NO**(nomal open)開關平時電流不通,按下按鈕才通電。 ::: ![](https://hackmd.io/_uploads/HJ8PDziTn.png) :arrow_up:上圖的開關有三個接腳,分別是COM、NO和NC。COM(common)接腳是共同的接腳,可以和NC或NO連通;沒有按下開關時,COM和NC是通路,和NO斷路;按下後COM和NO通路,和NC斷路。 ![](https://hackmd.io/_uploads/HJwOZMjph.png) :arrow_up: 如圖,上面是沒有按開關時的電路,下面是按下開關後的電路。 --- <!-- ## <font color="#78E533">機械開關</font> 觸控螢幕和薄膜開關對薄型的視覺化控制面板相當實用,但在某些應用上,設計人員則需注重安全性、取用簡便性、高電壓或電流的切換能力、啟動時的已知配置或耐用性。在此情形下,機械開關通常會是理想的選擇。以下三種是常見的觸動開關: --> ## 常見的開關及按鈕 #### 微動開關 以很小的力量就可以觸動微動開關,將信號傳遞出去。這種開關可以用在滑鼠上,也可以裝在機器上用來偵測機器是不是有碰撞到障礙物或邊界外牆。 ![](https://hackmd.io/_uploads/rJIJwGo6h.png) #### 翹板開關 翹板開關常被用來控制機器的主電源,按下時會擺動,擺動時一邊會升起,另一邊會是壓下的,並且能控制電流的開啟或者是關閉。 ![](https://hackmd.io/_uploads/SycXwGjTn.png) #### <font color="#78E533">輕觸開關(按鈕)</font> 復歸式開關通常用來提供觸發信號,指的是只在按下時提供一瞬間的導通訊號,當放手後,開關內部機械結構會把按鍵彈回到原始位置,開關內部接點也會回復成初始的斷開狀態。 **這種按鈕可以在arduino等開發板上看到作為Reset按鈕** ![](https://hackmd.io/_uploads/rkPWHCV63.png) #### <font color="#78E533">自鎖式開關(按鈕)</font> 自鎖式開關通常作為持續性且長時間的導通訊號或者迴路的電源供給後端的線路,直到第二次按下後才斷開。類似於常用的按壓原子筆,內部有一組機構卡榫,按壓按紐時會沿著一個槽滑動,槽的兩個尖端分別對應開關的鎖定與釋放位置;如此反覆來回地作鎖定與釋放的動作。也因為多了一組卡榫的構造,有時需要多一些空間來放置。 ![](https://hackmd.io/_uploads/ryn4u1BT3.png) :::success 有時候輕觸開關和自鎖式開關的外觀可能很相似,需要自己按壓測試是哪一種 ::: #### <font color="#78E533">緊急開關</font> 緊急開關也屬於觸動開關,是NC開關,每一台機器都必須有。緊急開關的功能是讓控制機器的人員能**快速地手動停止整個機台運作**,以免發生問題後擴大災難。緊急開關的電路位置的電路位置是放在電源正極處開始時的位置,並與後面電路串聯,保證按他時能最迅速的斷掉電流。正常使用的方式是:按下開關->電路開;轉開旋鈕->電路關。 <font color="#f00">通常緊急開關會很醒目,也會放在容易按壓的位置。</font>![](https://hackmd.io/_uploads/S1piECNah.png) ## <font color="#78E533">接點彈跳(Bounce)</font> :::spoiler 接點彈跳是一個在機械開關與繼電器上普遍的問題。開關與繼電器的接點通常由彈性金屬製成。當接點一起敲擊,接點在衝力與彈力一起作用下,導致彈跳部分在接點穩定前發生一次或多次。結果就是一個快速脈衝電流取代了從零到全電流的明確轉換。此效應在電源電路中通常不重要,但是在某些類比電路或邏輯電路上就會引起問題,因為這種快速開關反應足夠快到會導致上述電路將這類開關脈衝誤以為是資料流。 當壓下按鈕開關並隨即放開按鈕在我們看來只是按了一下開關,但是對於電路而言卻是經歷了數次甚至數十次的開開關關,這種不穩定的現象稱為彈跳 (bounce) 肇因於按鈕開關的機械結構,雖然這個現象只發生一瞬之間,但是可能足以造成電路誤動作。 ### 理想中的按鈕訊號 ![](https://hackmd.io/_uploads/BJNFIC4p2.png) ### 實際放出的訊號 ![](https://hackmd.io/_uploads/S16F8AN62.png) 而Bounce也有可以解決的方式,大致分成從硬體或從軟體解決。例如從軟體可以利用時間延遲為依據判斷電位是否變化,硬體方面可以添加電容等。 ::: --- <!-- {%youtube E8Nj7RwXf0s %} --> <!-- --- <!-- ### Usage flow --- --> <!-- ```graphviz digraph { compound=true rankdir=RL graph [ fontname="Source Sans Pro", fontsize=20 ]; node [ fontname="Source Sans Pro", fontsize=18]; edge [ fontname="Source Sans Pro", fontsize=12 ]; subgraph core { c [label="Hackmd-it \ncore"] [shape=box] } c -> sync [ltail=session lhead=session] subgraph cluster1 { concentrate=true a [label="Text source\nGithub, Gitlab, ..."] [shape=box] b [label="HackMD Editor"] [shape=box] sync [label="sync" shape=plaintext ] b -> sync [dir="both"] sync -> a [dir="both"] label="An edit session" } } ``` --- ### Architecture of extension --- ![](https://i.imgur.com/ij69tPh.png) --- ## Content script - Bind with each page - Manipulate DOM - Add event listeners - Isolated JavaScript environment - It doesn't break things --- # :fork_and_knife: --- <style> code.blue { color: #337AB7 !important; } code.orange { color: #F7A004 !important; } </style> - <code class="orange">onMessage('event')</code>: Register event listener - <code class="blue">sendMessage('event')</code>: Trigger event --- # :bulb: --- - Dead simple API - Only cares about application logic --- ```typescript import * as Channeru from 'channeru' // setup channel in different page environment, once const channel = Channeru.create() ``` --- ```typescript // in background script const fakeLogin = async () => true channel.answer('isLogin', async () => { return await fakeLogin() }) ``` <br> ```typescript // in inject script const isLogin = await channel.callBackground('isLogin') console.log(isLogin) //-> true ``` --- # :100: :muscle: :tada: --- ### Wrap up - Cross envornment commnication - A small library to solve messaging pain - TypeScript Rocks :tada: --- ### Thank you! :sheep: You can find me on - GitHub - Twitter - or email me --> -->