iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
3
IoT

IoT沒那麼難!新手用JavaScript入門做自己的玩具~系列 第 20

[Day 19] -用JS控制Arduino吧!聖光啊!你看見那個鐵人了嗎?Johnny-Five 之 光敏電阻 Photoresistor

IoT沒那麼難!新手用 JavaScript 入門做自己的玩具!(iT邦幫忙鐵人賽系列書)

★本系列文章已集結成冊,和系列文不同的是:

  • 本書使用大量的圖解來說明LED系列、多種感測器等原理。
  • 補足系列文程式碼的解說,增加逐行程式碼的詳細解說!
  • 全彩的書籍,用圖解的方式,讓讀者來理解Johnny-Five各種API的功能與效果,讓你不會只讀文字看到想睡覺而學不起來。

歡迎大家做出自己想要的玩具,為了樂趣而學習,讓學習變成你的樂趣!ヽ(・×・´)ゞ
讓Arduino也能用JavaScript創造出屬於自己的作品!

★購書連結-天瓏網路書局:
https://www.tenlong.com.tw/products/9789864345328

《IoT沒那麼難!新手用 JavaScript 入門做自己的玩具!(iT邦幫忙鐵人賽系列書)》
博客來、金石堂、momo、誠品、PChome、讀冊,均有販售喔!─=≡Σ((( つ•̀ω•́)つ
ISBN:9789864345328

我絕對不會說我玩過暗黑3 (´∩ω∩`)

Sensor 篇第二彈!今天要介紹的是

光 敏 電 阻 ~

謎之音:這...可以幹嘛...
本魯宅:做小夜燈.....不!我們要做中二的小夜燈!
(●` 艸 ´)

Photoresistor 光敏電阻 介紹

光敏電阻是一種利用「光電導效應」使電阻值變化的特殊電阻
光敏電阻和入射光強弱有直接關係,
當光強度增加,則電阻減小;光強度減小,則電阻增大。

工作原理

光敏電阻內有處於穩定狀態的電子~
但當有光線照射時,穩定狀態的電子受到激發而成為自由電子,自由電子愈多電阻就會越小。

恩....原理了解一下就好~(大誤

相關資料:

維基百科 - 光敏電阻
https://w.wiki/9NQ

電路方面

由於光的強弱也是連續的類比訊號。
所以我們要把光敏電阻的 pin 腳接到 Arduino 的類比輸入腳(Analog In)。
  

這邊要注意的是!

因為光敏電阻也是電阻的一種,當光照越強,它的電阻也會越小
依照歐姆定律來說,
電阻也會越小,就表示流過的電流就會越大,而導致Arduino板子燒毀...
使用前需要加上一顆限流電阻。

什麼意思呢?用生活化一點的角度來說明~

  • 水管 是 電壓 (V)
  • 水龍頭 是 電阻 (R)
  • 水 是 電流 (I)
  • 洗臉盆 是 Arduino 的 IC

水管的大小不會變 (沒看過水管會忽大忽小吧XD)
水龍頭提供阻力,決定了水流量的大小
水龍頭開越大代表阻力越小,水流出來的量越多!

假設你突然把水龍頭全開,這時沒有水龍頭控制水量,水一定會用噴的流出來...
當你的洗臉盆裝滿水承受不住那麼大的水量時,水就會溢出來淹的到處都是!

在電子電路上也是一樣,
電阻變小電流就會上升,如果IC負載不了就爆了...

限流電阻的腳色就像是在水龍頭上加裝節水開關,開多大的水都會限制一定的水流量

所以我們必須在使用之前加上一顆限流電阻的原因就是這樣啦!
希望這樣講解讓大家比較能了解一點(* ˙∀˙)~♥

歐姆定律 公式
V = I*R

當電壓不變時,電流和電阻成反比;
電阻越小,電流愈大

科學驗證!直接手算給你看!


不好意思....字很醜很久沒寫字了.....Orz

  • V = 電壓
  • I = 電流
  • R = 電阻

※假設電壓固定 5V
※假設初始電阻值 R = 330Ω

初始狀態
I = 5V / 330Ω → I = 0.015A (安培) → I = 15mA (毫安培)

結果:
初始狀態的電流是 15mA (毫安培)

=> 光照變強,電阻值變小,假設光敏電阻阻值降為 100Ω
I = 5/100Ω → I = 0.050A (安培) → I = 50mA (毫安培)

結果:
被強光照射下的光敏電阻的電流升高為 50mA (毫安培)

引用這篇網誌 - 「 十種錯誤操作而毀壞Arduino的方式 」 寫到

Method #1: 將任一個 I/O Pins 與 GND 連接形成短路
Method #1: Shorting I/O Pins to Ground

每個針腳的最大絕對電流值為 40mA 。每個針腳典型內部的電阻只有 25 歐姆,一個接到地面的短路可以允許多達 200mA 的電流流動,這些電流遠遠超過並足以銷毀微控制器的針腳。

由剛剛手算的結果來看,
當阻值變小趨近於0時,其實對 Arduino 的晶片是有燒毀的風險在!

所以我們會加一顆限流電阻來確保電阻值在一定的範圍內,而不會過低。


了解限流電阻的重要性後~來看電路圖(シ_ _)シ

電路圖


介紹完後,我們開始來實作吧~
準備需要的東西有~ヽ(・×・´)ゞ

硬體方面

  • Arduino Uno 一片 + USB TypeB 線材一條 (標配
  • 電阻一顆 10KΩ 電阻色碼:棕黑橙金
  • 杜邦線 看你用幾條準備幾條

軟體部分

Johnny Five - photoresistor
http://johnny-five.io/examples/photoresistor/

開始吧!(  ̄□ ̄)/ <( ̄ㄧ ̄ ) <( ̄ㄧ ̄ )

使用寫法-範例

這次的程式比較簡單,用 Johnny-Five 的 Sensor 元件即可,寫法和昨天一模一樣~

var five = require('johnny-five');
var board = new five.Board();

board.on('ready', function() {
  // new 一個 Johnny-Five Sensor 物件,宣告為 photoresistor
  photoresistor = new five.Sensor({
    pin: 'A0',
    freq: 1000,
  });

  photoresistor.on('data', function() {
    // 讀取光敏電阻的值
    console.log(this.value);
  });
});

接下來,一樣 node 執行程式下去~

$ node photoresistor.js 

江~江~ σ´∀´)σ

(PS:限流電阻用110Ω的話)

可以看到 0.5 秒偵測一次數值~
一開始的環境光數值大概在 700 ~ 800,我遮住光敏電阻後阻斷光線,數值會標高到900多,光敏電阻接收強光後數值降到200 ~ 400之間。

恩~這個數值好像可以拿來做什麼玩具.....嘿嘿嘿~( ≖◞౪◟≖)
明天我們來玩一個好玩的,敬請期待XD

文後

想到鐵人賽完賽之後,下班回家應該會很空虛吧...
唉~魯宅工程師的生活,往往就是這麼樸實無華,且枯燥~
.
.
.
才不會~(其實我已經想好要來玩什麼NS遊戲了XD


本系列的程式碼皆會上傳到 GitHub 上開源

2019ironman-JS-IoT :
https://github.com/tinatyc/2019ironman-JS-IoT

喜歡按個星星吧~乾蝦乾蝦<(_ _)>


團隊系列文:

CSScoke - 金魚都能懂的這個網頁畫面怎麼切 - 金魚都能懂了你還怕學不會嗎
Hina Hina - 陣列大亂鬥
阿斬 - Python 程式交易 30 天新手入門
Clarence - LINE bot 好好玩 30 天玩轉 LINE API
塔塔默 - 用Python開發的網頁不能放到Github上?Lektor說可以!!
Vita Ora - 好 Js 不學嗎 !? JavaScript 入門中的入門。


同步連載於blogger-King 學習前端之人生


上一篇
[Day 18]-用JS控制Arduino吧!視覺化溫度資料 Highcharts + Socket.io + Johnny Five - 溫度器 Thermometer
下一篇
[Day 20]-用JS控制Arduino吧!小財神啊!你看見那個鐵人在惡搞iT邦熊俠嗎?Johnny Five 之 光敏電阻- 小遊戲(?)應用篇
系列文
IoT沒那麼難!新手用JavaScript入門做自己的玩具~33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言