Tìm kiếm mã

Bài học 14/31-4: Ví dụ 1 về hàm map() trong lập trình Arduino

Bài học 14/31-4: Ví dụ 1 về hàm map() trong lập trình Arduino

Hướng dẫn này là một phần của loạt bài về lập trình Arduino và tập trung vào việc sử dụng thực tế của hàm map(). Trong bài học này, bạn sẽ học cách chuyển đổi giá trị phần trăm (0–100) thành giá trị PWM (Điều chế độ rộng xung) (0–255) để điều khiển độ sáng của đèn LED. Thay vì tự tính toán rằng 60% bằng 153, hàm map() sẽ xử lý việc chuyển đổi tuyến tính cho bạn, giúp mã của bạn sạch hơn và trực quan hơn.

Kỹ thuật này rất cần thiết cho nhiều ứng dụng thực tế khi bạn cần chuyển đổi số liệu từ cảm biến hoặc đầu vào của người dùng sang các dải giá trị khác nhau. Ví dụ, bạn có thể sử dụng nó để:

  • Điều khiển tốc độ của động cơ DC dựa trên số đọc của chiết áp.
  • Hiển thị giá trị thô của cảm biến nhiệt độ trên thang 0-100%.
  • Ánh xạ tọa độ cần điều khiển sang góc của động cơ servo.
  • Điều chỉnh độ sáng của đèn LED dựa trên cảm biến ánh sáng môi trường.
  • Chuyển đổi số đọc analog 0-5V sang giá trị kỹ thuật số 0-1023 hoặc ngược lại.

Phần cứng/Linh kiện

Để thực hiện theo dự án này, bạn sẽ cần các linh kiện sau:

  • Bo mạch Arduino (Uno, Nano, v.v.)
  • Một đèn LED
  • Một điện trở 220 ohm
  • Dây jumper
  • Breadboard (tùy chọn, nhưng được khuyến nghị)

Hướng dẫn đấu dây

Trong video, giảng viên trình bày dự án bằng cách sử dụng sơ đồ đấu dây từ bài học trước về làm mờ đèn LED. Mạch rất đơn giản: kết nối cực dương (chân dài) của đèn LED với điện trở 220 ohm, và kết nối đầu còn lại của điện trở đó với chân kỹ thuật số 3 trên Arduino. Kết nối cực âm (chân ngắn) của đèn LED trực tiếp với chân nối đất (GND) trên Arduino.

Giải thích mã

Mã cho ví dụ này rất ngắn gọn, với logic cốt lõi nằm trong hàm setup(). Hãy phân tích các phần có thể tùy chỉnh của người dùng.

int LEDpin = 3; //xác định chân cho LED

Dòng này xác định chân Arduino mà đèn LED của bạn được kết nối. Trong ví dụ này, nó được đặt ở chân 3, một chân hỗ trợ PWM, cần thiết cho đầu ra analog. Bạn có thể thay đổi số này nếu bạn kết nối đèn LED với một chân PWM khác.

int b=8;//độ sáng 60%

Đây là biến quan trọng bạn sẽ sửa để kiểm tra các mức độ sáng khác nhau. Nó đại diện cho độ sáng mong muốn dưới dạng phần trăm. Chú thích trong mã nói "60%", nhưng giá trị được đặt là 8 cho mục đích minh họa trong video. Bạn có thể thay đổi giá trị này thành bất kỳ số nguyên nào từ 0 đến 100. Ví dụ, đặt b = 60 sẽ đại diện cho mức độ sáng 60%.

int brightness = map(b, 0, 100, 0,255);

Đây là phần cốt lõi của bài học. Hàm map() lấy giá trị phần trăm của bạn (b) và chuyển đổi nó từ dải ban đầu (0 đến 100) sang dải mục tiêu mới (0 đến 255). Kết quả được lưu trong biến brightness, sau đó được sử dụng để ghi giá trị analog vào chân LED.

analogWrite(LEDpin, brightness);// bật LED với độ sáng 60%

Cuối cùng, dòng này gửi giá trị đã được ánh xạ đến chân LED bằng cách sử dụng analogWrite(). Điều này đặt chu kỳ hoạt động của LED, từ đó điều khiển độ sáng của nó. Điểm hay của phương pháp này là bạn chỉ cần thay đổi biến b để điều khiển LED, và hàm map() sẽ xử lý tất cả các phép tính cần thiết.

Dự án/Demo trực tiếp

Trong video, giảng viên tải mã lên và trình bày hiệu quả của việc thay đổi biến b. Khi b được đặt ở 8, màn hình nối tiếp in giá trị được ánh xạ là 20, và đèn LED mờ đi rõ rệt. Thay đổi b thành 90 dẫn đến giá trị được ánh xạ là 229, làm cho đèn LED sáng hơn nhiều. Đặt b thành 100 ánh xạ thành 255, tức là độ sáng tối đa. Demo thực tế này cho thấy rõ ràng cách hàm map() đơn giản hóa quá trình điều khiển đầu ra analog với các giá trị phần trăm thân thiện với người dùng.

Các dự án liên quan từ video này

Chương

  • [00:00] Giới thiệu về Khóa học Arduino của Robojax
  • [01:19] millis() là gì và tại sao sử dụng nó
  • [05:46] Ví dụ 1: Sử dụng millis() cho một sự kiện hẹn giờ
  • [08:29] Ví dụ 2: Sử dụng millis() với nút nhấn
  • [12:14] Ví dụ 3: Phát hiện lần nhấn nút thứ hai sau một khoảng trễ
  • [17:20] Giới thiệu về hàm map()
  • [19:47] Hướng dẫn mã cho ví dụ map()
  • [20:41] Demo trực tiếp về hàm map()

Hình ảnh

Sunfounder car assembled
Sunfounder car assembled
919-Lesson 14/31-4: Arduino coding map() example 1
Ngôn ngữ: C++
/*
Lesson 14/31: Arduino coding map( ) example-1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
int LEDpin = 3; //defind pin for LED
                   
 
 void setup() {
    Serial.begin(9600);//initialize serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=8;//60% brightness
    int brightness = map(b, 0, 100, 0,255);
    Serial.println(brightness);//print it on serial monitor
    analogWrite(LEDpin, brightness);// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }
 

Tài nguyên & tài liệu tham khảo

Tập tin📁

Hướng dẫn Sử dụng