發表文章

目前顯示的是有「LM35」標籤的文章

Python可以這樣玩(21):LM35 與 DHT11

圖片
我決定把這兩個感應器一起討論,因為這兩種感應器都不屬於 I2C ,為了節省時間,我就把這兩個感應器一起接在麵包板上面,一起讀取數據。 不過,這兩種感應器的程式寫法非常不同,而且連接的 PIN 也非常不同, LM35 必須使用 Analog PIN 來讀取資料, DHT11 則必須用 Digital PIN 來讀取資料。 線路如何接?請參考下圖,接法很簡單,兩個模組都有三個腳位,分別是 VCC 、 GND 與 OUT ,請將 VCC(+) 接在 5V , GND(-) 接地,接下來就是 OUT , LM35 請接到 A0 , DHT11 請接到 D7 。 首先談 LM35 ,利用 Arduino 開發板上的類比輸入,讀取溫度感測 IC 上的值,轉成實際溫度然後透過 Serial port 傳輸至電腦,而電腦這端則是利用序列監視器 ] 來接收。 Arduino 這邊的程式很簡單,先初始化 serial port ,然後再經由 A0 讀入 LM35 的感測值,要注意這個感測值是 10 位元 (bits) ,根據 LM35 的 datasheet 得之,正確溫度的計算方式是每 10mV(0.01V) 增加一度 C ,也就是說 0V 代表 0 度 C , 0.1 V(10*0.01V) 代表 10 度 C ,以此類推。因為每次讀回 10bit 的資料 n ,我們要將 n 換成電壓值 : (5V/1024)*n ,又每 10mv 增加一度,所以實際溫度 =(5V/1024)*n/10mV = (500/1024)*n 。 算出實際溫度之後,利用 Serial.print() 函數將資料輸出至 Serial port 傳輸至電腦 ( 我的系統是 COM4) ,此時的資料是字串型式 ( 每筆資料都是整數兩位數,小數兩位數,加上小數點共五個字元, EX:  28.93) 。 void setup()  {   Serial.begin(9600);  } void loop() {   float x;   int n;   n = analogRead(0);   x = 500.0 * n ...

Python可以這樣玩(20):PyMata 與I2C

圖片
到目前為止,大部分基礎的 Arduino 電路實驗我們學會了,相信大家對於 pySerial 、 pyFirmata 擴充庫也有了基本的認識,我們現在即將進入第二個階段。 在這之前,先回顧一下之前我們學的七段顯示器,如果用最原始的方法,一個小小的七段顯示器幾乎就把 Arduino UNO 的腳位都站滿了,當我把我的實驗作品 PO 上臉書的時候,就有網友建議我可以使用 BCD 的方式簡化線路, 7447 與 7448 這兩個 IC 就具備了 BCD 轉七段顯示器的功能,不過,比較常用的方法是使用 74HC595 來做,它把序列輸入轉成串列輸出,加上可以串接,因此減少了非常多的腳位並可以連接非常多的七段顯示器。 從這裡得到的啟示是,如果可以使用一些特殊的 IC 或是特殊的通訊協定,基本上可以做到的事情就更多了。 要更進一步釐清觀念,我們就來談談三種通訊協定: UART 、 I2C 、以及 SPI 。 UART 、 I2C 、 SPI 對於專業電子工程人員而言,當然非常清楚 UART 、 I2C 、 SPI 之間的差別,然而對於不是電子工程背景的玩家,對這些協定就比較陌生了,但是我們必須去面對,因為 Arduino 、 Raspberry Pi 開發板就有這些介面。 以 Arduino 而言,最原初的 Arduino 就有 UART ,而演化不久後也加添了 I2C ,現在無論 Arduino 家族開發板如何演化,多會具備 UART 與 I2C 。而 RPi 方面則是從 2012 年最原初的 RPi 開始,就同時具備這三種介面,事實上 Arduino 開發板所用的微控制器晶片,其本身也是具備 SPI 介面功能的,只是 Arduino 將此功能掩蓋、關閉而已。 UART 是用於 RS-232 與 USB 的通訊協定,中文名稱是通用非同步收發傳輸器。我們將 Arduino 插入電腦的 USB 孔,事實上開發板就開始以此方式與電腦通訊了。從下圖中我們就可以看到每種通訊功能所使用的腳位,還記得 d0 與 d1 吧, Rx/Tx 就是 UART 的腳位。 接下來進階的課程中,就會開始用到 SPI 與 I2C 。 I2C I²C ( Inter-Integrated Circuit ...