CÀM BIÀN ÁNH SÁNG DÙNG QUANG TRà.Giãi thißu và nái dung cÅn nÁm: Quang trá là mát lo¿i "vật liáu" đián tử rÃt hay gặp và đ°ợc sử dụng trong những m¿ch cÁm biÁn ánh sáng.. Ph°¡ng pháp có
Trang 1LAP Trinh Arduino V2
Kỹ thuật lập trình (Trường Đại học Công nghiệp Hà Nội)
LAP Trinh Arduino V2
Kỹ thuật lập trình (Trường Đại học Công nghiệp Hà Nội)
Trang 2L¾P TRÌNH ĐIÀU KHIÂN
ARDUINO CHO NG£äI MâI
BÀT ĐÄU V2
Trang 3H àC VI¾T CH£¡NG TRÌNH CHO ARDUINO THÔNG QUA
5. CÀM BIÀN SIÊU ÂM (KHOÀNG CÁCH SRF04)
6. CÀM BIÀN ÂM THANH
Trang 4TRONG QUÁ TRÌNH VI¾T EBOOK CÓ GÌ MONG CÁC B¾N THÔNG CÀM!!!! THAY M¾T CHO tdhshop.com.vn CÀM ¡N Đ¾N TÂT CÀ MàI NG£äI Đà TIN T£æNG
SHOP
Trang 51. CÀM BIÀN ÁNH SÁNG DÙNG QUANG TRà.
Giãi thißu và nái dung cÅn nÁm:
Quang trá là mát lo¿i "vật liáu" đián tử rÃt hay gặp và đ°ợc sử dụng trong những m¿ch cÁm biÁn ánh sáng Có thá hiáu mát cách dß dàng rằng, quang trá là mát lo¿i ĐIàN TRà có đián trá thay đổi theo c°ßng đá ánh sáng NÁu đặt á môi tr°ßng có
ít ánh sáng, có bóng râm hoặc tái thì đián trá cÿa quang trá s¿ tăng cao còn nÁu đặt
á ngoài nắng, hoặc n¡i có ánh sáng thì đián trá s¿ giÁm
Làm thế nào để đọc tín hiệu từ quang trở?
Ph°¡ng pháp có tên gọi là đọc hiáu điÁn thÁ từ c¿u phân áp (gợi ý, quang trá b¿n
cā xem là đián trá R1, vào phía tr°ớc mßi chân Analog cÿa Arduino có mát đián trá, và xem đó là đián trá R2 = 10k) Bây giß, chúng ta xem cách mắc thôi
Trang 6Bây giß b¿n upload code này lên và xem giá trị cÿa quang trá, nhớ là hãy thay đổi
đá sáng cÿa môi tr°ßng đá xem sự thay đổi cÿa quang trá (chẳng h¿n b¿n lÃy bàn tay che ánh sáng chiÁu trực tiÁp vào quang trá chẳng h¿n)
int quangtro = A5; //ThiÁt đ¿t chân analog đác quang trở
Đèn led đ¤ợc nối vßi chân digital 2
BiÁn trở đ¤ợc nối tßi chân analog 4
Trang 7Bây giå b¿n upload đo¿n code sau và điÁu chỉnh bi¿n trç đà đèn LED sáng ho¿c tÁt:
int quangtro = A5; //ThiÁt đ¿t chân analog đác quang trở
int bientro = A4; // ThiÁt đ¿t chân analog đác biÁn trở
int led = 2;// ThiÁt đ¿t chân digital là đèn led
int giatriQuangtro = analogRead(quangtro);// đác giá trß quang trở
int giatriBientro = analogRead(bientro);// đác giá trß biÁn trở
Trang 8*/
Serial.println((giatriQuangtro <= giatriBientro) ? "Sang" : "Tat");
}
Và trên thị tr°ßng hián nay đã có sẵn module cÁm biÁn ánh sáng:
S¢ đá nßi dây trên kit tā hác:
Trang 9Ch°¡ng trình:
int cambien = 10;// khai báo chân digital 10 cho cÁm biÁn
int Led = 8;//kháo báo chân digital 8 cho đèn LED
void setup (){
pinMode (Led, OUTPUT );//pinMode xuÃt tín hiệu đ¿u ra cho led
pinMode (cambien, INPUT );//pinMode nhận tín hiệu đ¿u vào cho cÁm biê
}
void loop (){
int value = digitalRead (cambien);//l¤u giá trß cÁm biÁn vào biÁn value
digitalWrite (Led,value);// xuÃt giá trß ra đèn LED
}
CÁm bi¿n phát hißn lửa
Đây là lo¿i cÁm biÁn chuyên dùng đá phát hián lửa , th°ßng đ°ợc sử dụng trong há thông báo cháy T¿m phát hián trong khoÁng 80cm, góc quét là 60 đá Có thá phát hián lửa tát nhÃt là lo¿i có b°ớc sóng từ 760nm - 1100nm M¿ch đ°ợc tích hợp IC LM393 so sánh đá t¿o māc tín hiáu => ta có thá chỉnh đá nh¿y bằng biÁn trá Thông sá kỹ thuật:
Trang 11Ch¤¢ng trình :
/ /CH£¡NG TRÌNH CHO CÀM BIÀN BÁO CHÁY
//Cách n ối dây: chân G nối GND, chân V+ nối nguồn 5V
//Chân AO (Analog Output-tín hiệu ra Analog) nối chân A1
//Chân DO (Digital Output - tín hiệu ra on/off) nối chân 4
#define ChanAO 1//Chân A1 là chân để đác tính hiệu Analog AO
#define ChanDO 4//Chân 4 (bên digital) là chân để đác tín hiệu Digital DO
#define baochay 12//Chân để điều khiển đèn led báo cháy
float giatriAO;//Bi Án chÿa giá trß Analog AO
float giatriDO;//BiÁn chÿa giá trß Digital DO
void setup()
{
Serial.begin(9600);//Giao ti Áp vßi máy tính
pinMode(ChanDO, INPUT);//Đßnh nghĩa chanDO (chân 4) là chân đác tính hiệu vào
pinMode(baochay,OUTPUT);//Đßnh nghĩa chân báo cháy (chân 12) là chân xuÃt tín hiệu ra cho đèn led
}
void loop()
{
giatriAO=analogRead(ChanAO);//Đác giá trß Analog tā ChanAO
giatriDO=digitalRead(ChanDO);//Đác giá trß digital tā ChanDO
Serial.print("Gia tri Chan Analog: ");//In giá trß Analog ra màn hình
Serial.print(giatriAO);
Serial.print(" Gia tri chan Digital: ");//In giá tr ß digital ra màn hình
Serial.println(giatriDO);
Trang 12if(giatriAO<900)//Điều kiện để phát tín hiệu cháy (do ng¤ái dùng tự đ¿t)
Trang 133. C ÀM BI¾N DÒ LINE.
Power supply: +5V
Operating current: <10mA
Operating temperature range: 0°C ~ + 50°C
Output interface: 3-wire interface (1 - signal, 2 - power, 3 - power supply
Trang 14Mã code:
// CH£¡NG TRÌNH THĂ Đ¾C TÍNH CĀA CÀM BIÀN DÒ Đ£àNG
#define den 13 // S ă dÿng chân 13 để điều khiển đèn led
#define tinhieu 2 //Chân S cāa cÁm biÁn nối vßi chân 2 trên m¿ch Arduino
int a;//Tên biÁn chÿa giá trß cāa cÁm biÁn dò đ¤áng
void setup()
{
Serial.begin(9600);//Фa dą liệu lên máy tính để quan sát
pinMode(den,OUTPUT);//Đßnh nghĩa chân ra để điều khiển đèn led
pinMode(tinhieu,INPUT);//Đßnh nghỉa chân 2 là chân lÃy tín hiệu vào cāa cÁm biÁn
Trang 154. C ÀM BI¾N M£A.
Chúng ta có thá dß dàng nhận biÁt m°a bằng mắt th°ßng hoặc cÁm nhận á da Với t° t°áng Ãy, các há tháng đián tử phát hián m°a cũng chia ra làm hai lo¿i: thā nhÃt là dùng camera đá nhận biÁt và lo¿i thā hai là dùng cÁm biÁn (t°¡ng tự da cÿa con ng°ßi) Trong môi tr°ßng Arduino, b¿n có thá dùng cÁ 2 cách trên đá phát hián m°a Tuy nhiên, đá tiÁt kiám chi phí và dß dàng trong viác lập trình, cài đặt, ng°ßi
ta th°ßng chọn ph°¡ng pháp thā hai
VÃn đß vß phát hián m°a thì cực kì đ¡n giÁn, nh°ng đá truyßn dữ liáu cÁm biÁn m°a vß trung tâm thì khó h¡n đôi chút Trong ph¿m vi bài viÁt này, mình chỉ đß cập đÁn ph¿n làm thÁ nào đá đọc cÁm biÁn m°a thôi
M¿ch cÁm biÁn m°a gồm 2 ph¿n:
M¿ch cÁm biÁn m°a đ°ợc gắn ngoài trßi
M¿ch đißu chỉnh đá nh¿y c¿n đ°ợc che chắn
M¿ch cÁm biÁn m°a ho¿t đáng bằng cách so sánh hiáu đián thÁ cÿa m¿ch cÁm biÁn nằm ngoài trßi với giá trị định tr°ớc (giá trị này thay đổi đ°ợc thông qua 1 biÁn trá màu xanh) từ đó phát ra tín hiáu đóng / ngắt r¡ le qua chân D0(digital) hoặc AO(analog) Vì vậy, chúng ta dùng mát chân digital hoặc analog đá đọc tín hiáu từ cÁm biÁn m°a
Trang 16Khi cÁm biÁn khô ráo (trßi không m°a), chân D0 cÿa module cÁm biÁn s¿ đ°ợc
giữ á māc cao (5V) Khi có n°ớc trên bß mặt cÁm biÁn (trßi m°a), đèn LED màu
đß s¿ sáng lên, chân D0 đ°ợc kéo xuáng thÃp (0V)
Trang 17Serial.begin(9600);// Khởi đáng Serial ở baudrate 9600
Serial.println("Da khoi dong xong");
}
void loop() {
int value = digitalRead(rainSensor);//Đác tín hiệu cÁm biÁn m¤a
if (value == HIGH) { // CÁm biÁn đang không m¤a
Serial.println("Dang khong mua");
Trang 185 CÀM BI¾N SIÊU ÂM.
S¡ đồ chân cÿa HC-SR04 gồm: VCC, trig, echo, GND Trong đó:
VCC > pin 5V Arduino
trig > chân digital (OUTPUT), đây là chân s¿ phát tín hiáu từ cÁm biÁn
echo > chân digital (INPUT), đây là chân s¿ nhận l¿i tín hiáu đ°ợc phÁn x¿ từ vật cÁn
GND -> GND Arduino
Nguyên lý ho¿t đáng
Đá đo khoÁng cách, ta s¿ phát 1 xung rÃt ngắn (5 microSeconds - ú) từ
chân trig Sau đó, cÁm biÁn s¿ t¿o ra 1 xung HIGH á chân echo cho đÁn khi nhận
Trang 19l¿i đ°ợc sóng phÁn x¿ á pin này Chißu ráng cÿa xung s¿ bằng với thßi gian sóng siêu âm đ°ợc phát từ cÁm bián và quay trá l¿i
Tác đá cÿa âm thanh trong không khí là 340 m/s (hằng sá vật lý), t°¡ng đ°¡ng với 29,412 microSeconds/cm (106/ (340*100)) Khi đã tính đ°ợc thßi gian, ta s¿ chia cho 29,412 đá nhận đ°ợc khoÁng cách
S¡ Đà NÞI DÂY:
Trang 20LÀP M¾CH:
L¾P TRÌNH
const int trig = 8;//chân trig cāa HC-SR04
const int echo = 7;//chân echo cāa HC-SR04
void setup()
{
Serial.begin(9600);//giao tiÁp Serial vßi baudrate 9600
pinMode(trig,OUTPUT);//chân trig s¿ phát tín hiệu
pinMode(echo,INPUT);//chân echo s¿ nhận tín hiệu
}
void loop()
{
unsigned long duration;//biÁn đo thái gian
int distance;//biÁn l¤u khoÁng cách
/* phát xung tā chân trig */
digitalWrite(trig,0);//tắt chân trig
Trang 21delayMicroseconds(2);
digitalWrite(trig,1);// phát xung tā chân trig
delayMicroseconds(5);// xung có đá dài 5 microSeconds
digitalWrite(trig,0);//tắt chân trig
/*tính toán thái gian*/
duration = pulseIn(echo,HIGH);//đo đá ráng xung HIGH ở chân echo
distance = int(duration/2/29.412);//tính khoÁng cách đÁn vật
/*in kÁt quÁ ra Serial monitor*/
Trang 226. C ÀM BI¾N ÂM THANH.
CÁm bi¿n âm thanh
CÁm biÁn âm thanh sử dụng microphone và opamp đá phát hián âm thanh, khi c°ßng đá âm thanh v°ợt qua 1 ng°ỡng xác định (thay đổi đ°ợc bằng biÁn trá) thì ngõ ra s¿ đ°ợc kéo xuáng māc thÃp, đồng thßi có led báo hiáu
Thông sß kỹ thu¿t:
Nguồn: DC 4-6V
Kích th°ớc: 38mm * 16mm * 9mm
VCC Nguồn 4V đÁn 6V GND Mass
D0 A0
Đ¿u ra tín hiáu sá (māc cao hoặc māc thÃp) Đ¿u ra t°¡ng tự (analog)
S¡ Đà NÞI DÂY:
Trang 23Ch°¡ng trình mẫu:
//CH£¡NG TRÌNH CÀM BIÀN ÂM THANH
//Dây G nối vßi chân GND, dây + nối vßi chân 5V
//Dây AO (dây tín hiệu Analog) nối vßi chân A1
//Dây DO (dây tín hiệu digital) nối vßi chân 4
Trang 24 Sử dung chip LM393 đá so sánh, ổn định làm viác
ĐÅu k¿t nßi sừ dung 3 dây:
VCC 3.3V ~ 5V GND GND cÿa nguồn ngoài
DO Đ¿u ra tín hiáu sá (māc cao hoặc māc thÃp)
AO Đ¿u ra tín hiáu t°¡ng tự (Analog)
Trang 25S¡ Đà NÞI DÂY:
B ¿n có thà tham khÁo vÁ module role t¿i: va-cach-su-dung-ro-le
http://tdhshop.com.vn/module-ro-le-Code tham khÁo:
//Ch¤¢ng trình ĐàC DĄ LIÊU TĀ CÀM BIÀN ĐO Đà ÀM ĐÂT
int CBDoAm = 1;//Nối chân ra cāa cÁm biÁn đo đá Ám vßi chân A1
#define role 12 //Chân nối vßi role 12
float Doamdat; //BiÁn đá Ám đÃt
Trang 268. C ÀM BI¾N ĐO Đà ÆM VÀ NHIÞT Đà DTH11.
Sau khi d ownload vÁ các b¿n làm theo các b¤ãc sau:
1.Copy file nén vào th° vián arduino
2.Từ ổ đĩa : C > Users > Admin > My Documents > Arduino > Libraries
Trang 273 GiÁi nén file
4 Trên thanh công cụ cÿa ch°¡ng trình IDE :
Sketch > Import Library > add Library (và dẫn đÁn đ°ßng dẫn á trên ) > open (là xong)
H o¿c các b¿n vào đây tham khÁo nhé cách cài nhé:
Trang 28L¿p trình điÁu khiÃn: (ch¤¢ng trình này không có sā tham gia cÿa LCD) Chúng ta xem dÿ lißu trāc ti¿p trên Serial port
#include "DHT.h"
const int DHTPIN = 2; //Đác dą liệu tā DHT11 ở chân 2 trên m¿ch Arduino
const int DHTTYPE = DHT11; //Khai báo lo¿i cÁm biÁn, có 2 lo¿i là DHT11 và DHT22
Sau khi upload ch¤¢ng trình lên m¿ch Arduino, b¿n hãy bÃm Ctrl + Shift +
M đà mç cửa sã Serial Monitor và xem k¿t quÁ
Trang 29Mát l°u ý nho nhß cho những b¿n lập trình nâng cao, đó là cÁm biÁn DHT11 s¿ "treo" (delay) ch°¡ng trình cÿa b¿n trong quá trình nó đọc nhiát đá, đá Ám!
Trang 30B¿n chỉ viác hàn m¿ch vào nh° thÁ này là xong
2 chân SDA và SCL là 2 chân tín hiáu dùng cho giao tiÁp I2C
Download và cài đặt thư viện hỗ trợ sử dụng màn hình LCD qua giao tiếp I2C: http://tdhshop.com.vn/tong-hop-cac-thu-vien-cho-arduino
NÁu b¿n không có module hß trợ này, b¿n vẫn có thể điều khiển màn hình theo cách thông th¤áng Tuy nhiên s¿ rÃt tốn thái gian và ch¤a chắc b¿n s¿ làm đ¤ợc !
K¿t nßi module màn hình vãi Arduino
Module màn hình LCD (16 x
Trang 31// l¤u ý mát số lo¿i LCD l¿i să dÿng đßa chỉ : 03F
//0x27 là đßa chỉ màn hình trong bus I2C Ph¿n này chúng ta không c¿n phÁi quá bận tâm vì h¿u hÁt màn hình (20x4, ) đều nh¤ thÁ này!
//16 là số cát cāa màn hình (nÁu dùng lo¿i màn hình 20x4) thì thay bằng 20
//2 là số dòng cāa màn hình (nÁu dùng lo¿i màn hình 20x4) thì thay bằng 4
Trang 32K¿t hợp đác nhißt đá đá - đá Çm và xuÃt ra màn hình: (sau khi đã nßi LCD nh¤ trên tiêp tục k¿t nßi vãi DHT11 vãi s¢ đá nßi dây nh¤ hình trên)
Bây giß b¿n đã biÁt cách đọc nhiát đá, đá Ám rồi và cũng đã biÁt xuÃt ra màn hình Vậy bây giß chúng ta chỉ viác kÁt hợp cÁ 2 l¿i đá đ°ợc mát đo¿n code nh° thÁ này:
N¿p code trên vào arduino và cùng xem kÁt quÁ nhé:
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
const int DHTPIN = 2;
const int DHTTYPE = DHT11;
Trang 33CÁm biÁn nhiát đá LM35 là mát lo¿i cÁm biÁn t¤¢ng tự rÃt hay đ°ợc āng dụng
trong các āng dụng đo nhiát đá thßi gian thực Vì nó ho¿t đáng khá chính xác với sai sá nhß, đồng thßi với kích th°ớc nhß và giá thành rÁ là mát trong những °u điám cÿa nó Vì đây là cÁm biÁn t°¡ng tự (analog sensor) nên ta có thá dß dàng đọc đ°ợc giá trị cÿa nó bằng hàm analogRead() Nào, cùng nhau tìm hiáu thôi!
Qua bài viÁt này, mình hi vọng nó s¿ đem l¿i cho b¿n mát vài m¿o nhß đá āng dụng hàm analogRead() mát cách nhu¿n nhuyán, và bật mí cho b¿n cách sử dụng cÁm biÁn LM35 - mát cÁm biÁn nhiát đá rÃt hay và dß sử dụng!
Trang 34Giãi thißu vÁ cÁm bi¿n LM35:
LM35 là mát cÁm bi¿n nhißt đá analog:
Nhiát đá đ°ợc xác định bằng cách đo hiáu đián thÁ ngõ ra cÿa LM35
→ Đ¡n vị nhiát đá: °C
→ Nhiát đá thay đổi tuyÁn tính: 10mV/°C
Sơ đồ chân của LM35
LM35 không cÅn phÁi canh chỉnh nhißt đá khi sử dụng
Trang 35Đá chính xác thực tÁ: 1/4°C á nhiát đá phòng và 3/4°C ngoài khoÁng -55°C tới 150°C
LM35 có hiáu năng cao, công suÃt tiêu thụ là 60uA
CÁm bi¿n LM35 ho¿t đáng bằng cách cho ra mát giá trß hißu đißn th¿ nhÃt đßnh t¿i chân Vout (chân giÿa) āng vãi mßi māc nhißt đá
Nh° vậy, bằng cách đ°a vào chân bên trái cÿa cÁm biÁn LM35 hiáu đián thÁ 5V, chân phÁi nái đÃt, đo hiáu đián thÁ á chân giữa bằng các pin A0 trên arduino (giáng y hát cách đọc giá trị biÁn trá), b¿n s¿ có đ°ợc nhiát đá (0-100ºC) bằng công thāc:
float temperature = (5.0*analogRead(A0)*100.0/1024.0);
Với LM35, b¿n có thá tự t¿o cho mình m¿ch cÁm biÁn nhiát đá sử dụng LM35 và
tự đáng ngắt đián khi nhiát đá v°ợt ng°ỡng tái đa, đóng đián khi nhiát đá thÃp h¡n ng°ỡng tái thiáu thông qua module r¡ le
LM35 thay đãi nhißt đá nhanh và chính xác
S¢ đá nßi dây:
Trang 36LÁp m¿ch:
L¿p trình diÁu khiÃn:
int sensorPin = A0;// chân analog kÁt nối tßi cÁm biÁn LM35
void setup() {
Serial.begin(9600); //Khởi đáng Serial ở mÿc baudrate 9600
// B¿n không c¿n phÁi pinMode cho các chân analog tr¤ßc khi dùng nó
}
void loop() {
//đác giá trß tā cÁm biÁn LM35
int reading = analogRead(sensorPin);
//tính ra giá trß hiệu điện thÁ (đ¢n vß Volt) tā giá trß cÁm biÁn
float voltage = reading * 5.0 / 1024.0;
// ở trên mình đã gißi thiệu, cÿ mßi 10mV = 1 đá C
// Vì vậy nÁu biÁn voltage là biÁn l¤u hiệu điện thÁ (đ¢n vß Volt)
// thì ta chỉ việc nhân voltage cho 100 là ra đ¤ợc nhiệt đá!
float temp = voltage * 100.0;
Serial.println(temp);
/*Mẹo:
Các b¿n phaỉ khai báo ph¿n thực cho toàn bá các số thực nhé!
Trang 37*/
delay(1000);//đợi 1 giây cho l¿n đác tiÁp theo
}
à đây ta s¿ dùng Module cÁm biÁn khí ga MQ2-GAS Đây là cÁm biÁn indoor nên b¿n phÁi đá nó trong nhà á nhiát đá phòng Māc khí GAS nhận đ°ợc b¿n đọc
vß á đ¿u ra d¿ng Analog cÿa nó Với Arduino thì ta dùng các chân Analog cÿa nó
đá đọc
S¡ đồ nái dây giữa arduino và CB khí gas (MQ2)
S¡ đồ nái dây theo bÁng này:
Trang 38int value = analogRead(A0); //đác giá trß điện áp ở chân A0 - chân cÁm biÁn
//(value luôn nằm trong khoÁng 0-1023)
Serial.println(value); //xuÃt ra giá trß vāa đác
Trang 39 Sử dụng mát chân data với 64bit serial code cho phép chúng ta dùng nhißu con trên cùng 1 chân digial (c¡ chÁ 1-Wire)
Có thá cÃp nguồn từ 3 - 5.5V
Đo từ -55°C đÁn +125°C sai sá ±0.5°C nÁu đang trong khoÁn -10°C đÁn +85°C
S¢ đá nßi dây:
Trang 40L¿p trình Arduino cho cÁm bi¿n DS18B20:
Tr¤ãc khi bÁt tay vào l¿p trình ta cÅn phÁi tÁi hai th¤ vißn sau và add vào th¤ vißn cho arduino IDE:
Th¤ vißn thā 1: OneWire.h
onewire.zip
http://www.mediafire.com/file/a9s0ww0l10dl25s/2689_123450-1468426301-0-Th¤ vißn thā 2: DallasTemperature.h
arduino-temperature-control-library-master.zip
http://www.mediafire.com/file/4r9ksj6z455d55j/2664_882450-1468426343-0-Ta bắt tay vào lập trình sau khi add xong 2 th° vián trên:
//Include th¤ viện
#include <OneWire.h>
#include <DallasTemperature.h>
// Chân nối vßi Arduino
#define ONE_WIRE_BUS 2 //ThiÁt đ¿t th¤ viện onewire