Nội dung bài học:
- Nội dung
- Chuẩn bị
- Thực hành
- Bài tập nâng cao
Bài tập nâng cao (Bài trước)
Đề bài 01: Sử dụng cảm biến chạm để bật tắt đèn led , yêu cầu là khi ấn sẽ thay đổi trạng thái của đèn. Có nghĩa khi đèn đang sáng ấn vào thì đèn sẽ tắt và ngược lại nếu đèn đang tắt thì ấn vào thì đèn sáng.
- Gợi ý: sử dụng biến phủ định để làm cho đèn thay đổi trạng thái. Ví dụ ta có biến state = 1 thì phủ định của state là 0 và ngược lại. Phủ định được viết bằng cách thêm dấu “!” vào trước biến đó
- Lưu ý: Trong lập trình thì mức HIGH có thể thay thế bằng số 1 và mức LOW là số 0.

Hình 2.14. Chương trình thay đổi trạng thái led bằng cảm biến chạm
Trong trương tình ta sử dụng 1 biến State để lưu trạng thái hiện tại của led, nó được biểu diễn thông qua 2 số 0 và 1. Trong hàm setup ta sẽ khai báo led là ngõ ra , cảm biến là ngõ vào và đặt cho đèn led lúc bắt đầu chương trình luôn là trạng thái tắt. Vào trong hàm loop() thì chương trình sẽ đọc giá trị của cảm biến và lưu vào biến “value””liên tục sau mỗi 200ms (bạn có thể tăng giảm delay bạn muốn để xem cách chương trình chạy). Khi mà giá trị value bằng LOW hoặc HIGH thì sẽ thay đổi trạng thái của đèn. Nếu đèn đang ở trạng thái tắt thì sang bật và ngược lại.
Bạn sẽ để ý ở hình ảnh trên thì chúng ta khai báo các biến ở cả phía bên trong hàm loop() và bên ngoài, vậy điều đó có khác gì nhau không?

Hình 2.15. Ví dụ phạm vi của biến
Trong lập trình thì đây được gọi là phạm vi của biến. Chúng ta có 2 kiểu để khai báo biến đó là biến cục bộ (local variable) và biến toàn cục (global variable). Biến toàn cục thì có thể được sử dụng bất kì đâu trong chương trình, còn biến cục bộ chỉ dùng trong hàm mà nó được khai báo. Như ở ví dụ bên trái thì 2 biến a và b sẽ là 2 biến toàn cục và biến c là biến cục bộ của hàm loop(). Khi đó, biến a và b có thể sử dụng ở cả trong hàm setup() lẫn hàm loop() để in kết quả ra màn hình. Nhưng nếu bây giờ sang ví dụ bên phải thì a và b lúc này là biến cục bộ của hàm setup() và chỉ sử dụng trong hàm setup() nên khi chúng ta thực hiện lệnh c = a + b trong hàm loop chương trình sẽ báo lỗi “ biến a và b chưa được khai báo “.
Một lỗi thường gặp đối với biến cục bộ. chúng ta sẽ thay đổi 1 chút ở hàm void loop() trong “chương trình thay đổi trạng thái led bằng cảm biến chạm” ở phía trên bằng chương trình phía dưới. Sau đó bạn thử compile xem chương trình có chạy được không.

Ban đầu nhìn logic và các biến có vẻ đúng nhưng khi compile thì sẽ xuất hiện lỗi là “’a’ was not declared in this scope”. Nhưng chẳng phải ta đã khai báo rồi sao? Lý do chính là khi chương trình chạy bạn đầu thì đi đến lệnh if (value == HIGH) nhưng lúc này value vẫn chưa bằng HIGH nên sẽ không thực hiện những lệnh bên trong vòng if này nên biến “a” sẽ không được khởi tạo. Từ đó khi chương trình đến vòng if(a == 1) thì chương trình sẽ không thấy biến a khởi tạo nên sẽ báo lỗi.
🡪 Vậy nên với những biến cục bộ (local variable) thì bạn nên khởi tạo khai báo các biến ở bên ngoài các vòng lặp điều kiện if, else, while ,… và ở phía trên cùng trong 1 hàm.
Lưu ý: Khi các lập trình viên viết các chương trình dài thì thường họ sẽ tránh sử dụng biến toàn cục vì nó rất khó để kiểm soát. Thay vào đó với những biến chỉ xuất hiện trong 1 hàm của họ thì họ sẽ sử dụng biến cục bộ để sử dụng còn những biến sử dụng xuyên suốt chương trình thì họ sẽ dùng biến toàn cục. Với những chương trình ngắn thì bạn sẽ chưa nhận ra sự khác biệt quá nhiều đâu, nhưng bạn nên tập thói quen như thế từ sớm.
Nội dung
Bài học này chúng ta sẽ làm việc với cảm biến dò đường (Line Tracking) TCRT5000 đồng thời làm quen với bộ ADC, biến đổi tín hiệu tương tự sang tín hiệu số.
Chuẩn bị
- Mô đun TCRT5000 4 chân, đầu ra số và đầu ra tương tự
- Kiến thức cơ sở

Hình 2.16. Mô đun cảm biến TCRT5000 [17]
Mô đun cảm biến dò đường TCRT5000 có 4 chân tín hiệu như trên hình 2.14. Trong đó chân VCC được cấp nguồn điện áp 3.3~5V, chân GND là điện thế 0V. Mô đun này có 2 chân tín hiệu đầu ra dạng số (D0) và tín hiệu tương tự (A0) được sử dụng để phát hiện màu sắc và khoảng cách.
Thực hành
Việc lắp mạch cũng khá đơn giản, ta chỉ cần nối chân D0, A0 với 2 chân bất kỳ của ESP32 và chân đó có hỗ trợ ADC. Ở đây, ta nối D0 với chân D34 còn A0 với chân D35 có bộ ADC1_6 và chuẩn bị bề mặt nhẵn, phẳng đặt trước cảm biến khoảng cách từ 2-3 mm.


Hình 2.17. Sơ đồ kết nối giữa cảm biến dò đường và ESP32

Hình 2.18. Chương trình làm việc với cảm biến dò đường
Chương trình kiểm tra được viết như trên hình 2.17. Chú ý rằng trong quá trình chạy, bạn có thể xoay triết áp để điều chỉnh độ nhạy cũng như thay đổi màu sắc trên bề mặt (màu đen sẽ hấp thụ toàn bộ ánh sáng, còn màu trắng sẽ phản hồi toàn bộ, các màu khác sẽ hấp thụ ánh sáng của màu đó) để từ đó quan sát các giá trị thay đổi qua cổng Serial.
Từ thử nghiệm có thể thấy rõ khi bề mặt hoàn toàn màu đen, tín hiệu số sẽ là 1 và tín hiệu tương tự cao nhất ở mức 4095, còn trong các trường hợp còn lại thì tín hiệu số là 0 và tín hiệu tương tự sẽ nhỏ. Ứng dụng cảm biến này ta có thể tạo ra các đường màu đen để Robot sử dụng cảm biến dò đường này để bám theo.
Bài tập nâng cao
Đề bài 02: Sử dụng cảm biến dò đường để bật đèn led RGB, đèn RGB này sẽ sáng theo giá trị analog từ 0-4095.
Đáp án sẽ được đăng ở bài sau.
By: Lương Hưu Nhật Minh
https://mazda-demio.ru/forums/index.php?autocom=gallery&req=si&img=6343
http://toyota-porte.ru/forums/index.php?autocom=gallery&req=si&img=3245
https://hrv-club.ru/forums/index.php?autocom=gallery&req=si&img=6900
https://honda-fit.ru/forums/index.php?autocom=gallery&req=si&img=7193
Good https://shorturl.at/2breu
Very good https://shorturl.at/2breu
Awesome https://shorturl.at/2breu
Good https://lc.cx/xjXBQT
Awesome https://lc.cx/xjXBQT
https://honda-fit.ru/forums/index.php?autocom=gallery&req=si&img=7139
https://honda-fit.ru/forums/index.php?autocom=gallery&req=si&img=7139
Very good https://lc.cx/xjXBQT
Good https://lc.cx/xjXBQT
Very good https://lc.cx/xjXBQT
Very good https://t.ly/tndaA
Very good https://urlr.me/zH3wE5
Very good https://rb.gy/4gq2o4
Good https://is.gd/N1ikS2
Awesome https://is.gd/N1ikS2
Good https://is.gd/N1ikS2
Good https://is.gd/N1ikS2
Very good https://is.gd/N1ikS2
Awesome https://is.gd/N1ikS2
Good https://is.gd/N1ikS2
Good https://is.gd/N1ikS2
Good https://is.gd/N1ikS2
Very good https://is.gd/N1ikS2
Very good https://is.gd/N1ikS2
Awesome https://is.gd/N1ikS2
Awesome https://is.gd/N1ikS2
Very good https://shorturl.fm/bODKa
Very good https://shorturl.fm/bODKa
https://shorturl.fm/TbTre
https://shorturl.fm/TbTre
https://shorturl.fm/N6nl1
https://shorturl.fm/m8ueY
https://shorturl.fm/YvSxU
https://shorturl.fm/0EtO1
Turn traffic into cash—apply to our affiliate program today! https://shorturl.fm/G5cKL
Get paid for every referral—enroll in our affiliate program! https://shorturl.fm/meESI
Share your unique link and earn up to 40% commission! https://shorturl.fm/9ODma
Boost your income—enroll in our affiliate program today! https://shorturl.fm/QCpNP
Join our affiliate community and maximize your profits—sign up now! https://shorturl.fm/S4ykT
Boost your income—enroll in our affiliate program today! https://shorturl.fm/2fuAp
https://shorturl.fm/lDQ0G
https://shorturl.fm/XcVY2
https://shorturl.fm/yjCis
https://shorturl.fm/Rdi4n
https://shorturl.fm/AQRtG
https://shorturl.fm/cxAJd
https://shorturl.fm/y7Fxs
https://shorturl.fm/pyg25
https://shorturl.fm/GDNV4
https://shorturl.fm/szsV6
https://shorturl.fm/VEZSq
https://shorturl.fm/MZsrc
https://shorturl.fm/qPxat
https://shorturl.fm/oCvCG
https://shorturl.fm/HHSbq
https://shorturl.fm/rqE4v
https://shorturl.fm/rjs4y
https://shorturl.fm/5h4kY
https://shorturl.fm/HFsXx
https://shorturl.fm/wZqJP
https://shorturl.fm/VyBt3
https://shorturl.fm/VvPoZ
https://shorturl.fm/GIe5h
https://shorturl.fm/a7JeA
https://shorturl.fm/tKGTC
https://shorturl.fm/0K4kh
https://shorturl.fm/WsD7l
https://shorturl.fm/XVIKG
https://shorturl.fm/hNV5y
https://shorturl.fm/8juVn
https://shorturl.fm/GeJn7