Vì sao button bấm không nhạy trong arudino

Bài viết này ta sẽ tìm hiểu cách đọc một Điện trở quang (một loại biến trở nhạy sáng) bằng cách sử dụng đầu vào analog của Arduino. Linh kiện này còn được gọi là LDR (light-dependent resistor – điện trở phụ thuộc vào ánh sáng).

Các bài hướng dẫn trước đã chỉ ta cách Điều khiển đèn LED với đầu ra analog của Arduino và đọc biến trở (một loại điện trở khác). Chúng ta cũng sẽ thực hành lại các kỹ năng đó trong bài viết này. Hãy nhớ rằng đầu vào analog của Arduino (chân được đánh dấu từ A0-A6) có thể phát hiện tín hiệu điện thay đổi dần dần, và chuyển tín hiệu đó thành một giá trị từ 0 đến 1023.

Vì sao button bấm không nhạy trong arudino

Mạch mẫu Cảm biến ánh sáng (điện trở quang) với Arduino trên Tinkercad

Ở mạch mẫu trên, nhấp vào “ Start simulation” và nhấp vào điện trở quang (hình bầu dục màu nâu), sau đó kéo thanh trượt độ sáng để điều chỉnh lượng ánh sáng đầu vào.

Để thực hành xây dựng mạch thật giống với mẫu trên, bạn sẽ cần sử dụng:

  • 1 Arduino Uno
  • 1 cáp USB
  • 1 breadboard và dây
  • 1 đèn LED
  • 1 điện trở 220 ohm
  • 1 điện trở 4,7k ohm
  • 1 điện trở quang

Tham khảo thêm: Sản phẩm Quang Trở GL5559

Bước 1: Xây dựng mạch

Vì sao button bấm không nhạy trong arudino
Hình 1

Vì sao button bấm không nhạy trong arudino
Hình 2

Hãy nhìn vào mạch breadboard trong hình 1 (hoặc mạch gọn hơn ở hình 2). Trong bước này, bạn sẽ xây dựng một bản mạch này của riêng mình (theo như mạch mẫu) trong bảng làm việc (workplane).

Trong bảng làm việc của Tinkercad Circuits, hãy xác định các linh kiện: điện trở quang, đèn LED, điện trở và dây nối với Arduino

Kéo Arduino Uno và breadboard từ bảng components vào bảng làm việc.

Nối đường ray nguồn (+)đường ray đất (-) của bảng mạch đến Arduino 5Vđất (GND), bằng cách nhấp chuột để tạo dây.

Mở rộng đường ray nguồn và đường ray đất với cạnh đối diện của bảng mạch. Cắm đèn LED vào hai hàng breadboard khác nhau để cực âm (chân ngắn hơn) kết nối với một chân của điện trở (giá trị bất kỳ từ 100-1K ohms đều được). Điện trở có thể lắp theo một trong hai hướng vì điện trở không phân cực (khác với đèn LED, phải được nối theo một hướng nhất định để có thể hoạt động).

Nối chân điện trở còn lại với đất.

Nối dây cực dương của đèn LED (chân dài hơn) vào chân 9 của Arduino.

Kéo một điện trở quang từ bảng components vào bảng mạch, để các chân của nó cắm vào hai hàng khác nhau.

Nhấp chuột để tạo dây nối một chân điện trở quang với nguồn điện.

Kết nối chân còn lại (*) với chân analog A0 của Arduino.

Kéo một điện trở từ bảng components để nối chân điện trở quang (*) và điều chỉnh giá trị thành 4.7k ohms.

Bước 2: Lập trình với các khối code

Vì sao button bấm không nhạy trong arudino

Hãy sử dụng trình chỉnh sửa khối code để xem trạng thái của điện trở quang, sau đó đặt đèn LED ở độ sáng tương đối dựa trên lượng ánh sáng mà cảm biến nhìn thấy. Nếu cần, bạn có thể xem lại nội dung bài Hướng dẫn làm đèn LED thay đổi độ sáng.

Nhấp vào nút “Code” để mở trình chỉnh sửa. Các khối màu xám là chú thích và chúng sẽ không được thực thi khi chương trình chạy đâu nhé.

Nhấp vào danh mục Variables trong trình chỉnh sửa code.

Để lưu trữ giá trị điện trở của Điện trở quang, hãy tạo một biến có tên “sensorValue“.

Kéo ra một khối “set“. Chúng ta sẽ lưu trữ trạng thái của Điện trở quang trong biến sensorValue.

Nhấp vào danh mục Input, kéo ra khối “analog read pin” và đặt nó vào trong khối “set“, sau từ “to

Vì biến trở được kết nối với Arduino ở chân A0, hãy thay đổi từ menu thành A0.

Nhấp vào danh mục Output và kéo ra khối “print to serial monitor“.

Chuyển đến đến danh mục Variables và kéo biến sensorValue vào khối “print to serial monitor“, đồng thời chỉnh từ Menu để thành “with newline”. Tại đây, bạn có thể mô phỏng thử (Start Simulation) và mở màn hình serial monitor để xem các số có hiển thị khi điều chỉnh cảm biến không nhé. Giá trị Analog input sẽ nằm trong khoảng từ 0-1023.

Hiện tại, ta muốn chuyển đến đèn LED một tín hiệu giá trị từ 0 (tắt hẳn) đến 255 (độ sáng cao nhất). Ta sử dụng khối “map” để thực hiện một số phép nhân chéo. Di chuyển chuột đến danh mục Math và kéo ra khối “map“.

Ở vị trí ô trống đầu tiên, hãy kéo biến sensorValue vào, sau đó đặt phạm vi từ 0 đến 255.

Quay lại danh mục Output, kéo ra khối “set pin” analog (mặc định sẽ có nội dung là “set pin 3 to 0.“) và điều chỉnh thành chân số 9.

Kéo khối map bạn đã thực hiện trước đó vào ô “to” của khối “set pin” để ghi giá trị đã điều chỉnh vào chân đèn LED.

Nhấp vào danh mục Control, kéo ra một khối wait và điều chỉnh để nó delay chương trình trong khoảng 0,1 giây.

Bước 3: Giải thích code Arduino của điện trở quang

Khi trình chỉnh sửa code mở, bạn có thể nhấp vào menu bên trái và chọn “Block + Text” để hiển thị code Arduino được tạo bởi các khối code này. 

int sensorValue = 0;

Trước hàm setup(), ta tạo một biến để lưu trữ giá trị hiện tại đọc được từ biến trở. Nó được khai báo là int vì là một số nguyên.

void setup() { pinMode(A0, INPUT); pinMode(9, OUTPUT); Serial.begin(9600); }

Bên trong setup, các chân được cấu hình bằng pinMode(). Chân A0 được cấu hình như một đầu vào (INPUT), để ta có thể xem trạng thái điện của biến trở. Chân 9 được cấu hình làm đầu ra (OUTPUT) để điều khiển đèn LED.

Để có thể gửi thông điệp giúp theo dõi, Arduino có một kênh giao tiếp là hàm Serial.begin(), với đối số là tốc độ giao tiếp (trong trường hợp này là 9600 bit mỗi giây).

void loop() { // read the value from the sensor sensorValue = analogRead(A0); // print the sensor reading so you know its range Serial.println(sensorValue);

Các nội dung ghi sau hai dấu gạch chéo // đều là phần nhận xét, giúp ghi chú thông tin để người lập trình hiểu chương trình. Trong vòng lặp chính loop(), hàm analogRead(); sẽ kiểm tra trạng thái của chân A0 (là một số nguyên từ 0-1023) và lưu trữ giá trị đó trong biến sensorValue.

// map the sensor reading to a range for the LED analogWrite(9, map(sensorValue, 0, 1023, 0, 255)); delay(100); // Wait for 100 millisecond(s) }

Hãy nhớ hàm analogWrite() lấy hai đối số: số pin (trong trường hợp này là 9) và giá trị cần ghi (phải nằm trong khoảng từ 0 đến 255). Hàm map() bên trong nhận năm đối số: số để đánh giá (biến sensorValue luôn thay đổi), giá trị tối thiểu dự kiến, tối đa dự kiến, giá trị tối thiểu mong muốntối đa mong muốn. Vì vậy, hàm map() trong trường hợp này có chức năng là đánh giá giá trị cảm biến đưa vào, và thực hiện một số phép nhân chéo để chia tỷ lệ đầu ra giảm từ 0-1023 xuống còn 0-255. Kết quả được trả về đối số thứ hai của analogWrite(); và từ đó thiết lập độ sáng của đèn LED (được kết nối với chân 9).

Bước 4: Thực hành xây dựng mạch Arduino 

Vì sao button bấm không nhạy trong arudino

Để lập trình Arduino Uno thực tế, cần cài đặt phần mềm Arduino Uno và mở nó lên. Các tế bào quang điện khác nhau có các giá trị khác nhau, vì vậy nếu mạch không hoạt động, có thể bạn sẽ cần thay đổi một điện trở khác.

Ta nối mạch Arduino Uno bằng cách cắm các linh kiện và dây sao cho khớp với mạch mẫu trong Tinkercad circuits. Sao chép code từ cửa sổ code Tinkercad circuits và dán vào một bản thảo trống trong phần mềm (hoặc nhấp tải xuống và mở tệp bằng phần mềm). Ngoài ra, bạn cũng có thể tìm thấy ví dụ này ở mục Tệp -> Ví dụ -> 03.Analog -> AnalogIn OutSerial.

Cắm cáp USB, chọn bo mạch và cổng trong Menu Tools của phần mềm.

Tải code lên, sau đó dùng tay che cảm biến hoặc chiếu sáng vào cảm biến).

Mở serial monitor để quan sát các giá trị được ghi nhận. Ngoài thực tế, có khả năng các giá trị này sẽ không đạt được đến mức 0 hoặc 1023, do tùy thuộc vào điều kiện ánh sáng. Hãy điều chỉnh phạm vi 0-1023 thành mức tối thiểu quan sát đượcmức tối đa quan sát được, để có được phạm vi độ sáng tối đa trên đèn LED nhé.

Nguồn: instructables.com
Lượt dịch: Fuvitech.vn

Vì sao button bấm không nhạy trong arudino

Trong bài viết này chúng ta sẽ học cách phát hiện chuyển động trong phòng, bằng cách sử sụng Cảm biến chuyển động PIRĐầu vào digital của Arduino. Ta sẽ nối một mạch bằng breadboard và dùng code Arduino đơn giản để điều khiển một đèn LED. Phần mềm mô phỏng Tinkercad Circuits cũng được sử dụng để giúp bạn bắt kịp với nội dung và trợ giúp quá trình thực hành lắp mạch.

Trong chuỗi bài viết về Arduino trên Tinkercad, bạn có thể đã học được cách Đọc tín hiệu nút bấm với Đầu vào Digital của Arduino. Hôm nay, chúng ta sẽ dùng kiến thức đó trong bài viết này. Mặc dù cảm biến chuyển động dường như có vẻ khá phức tạp trong mạch chuyên dụng, tuy nhiên nó cũng được cấu hình để gửi tín hiệu HIGH hoặc LOW – giống như một nút bấm thông thường.

PIR là viết tắt của Passive InfraRed. Thuật ngữ này mô tả công nghệ mà linh kiện sử dụng – đó chính là phát hiện thụ động các mức ánh sáng hồng ngoại (khác với camera hồng ngoại: phát ra ánh sáng hồng ngoại để ghi lại tín hiệu phản xạ). Vòm trắng là một thấu kính giúp mở rộng trường nhìn của máy dò hồng ngoại. Cảm biến này mặc định ghi nhận tín hiệu LOW. Khi đọc lượng ánh sáng hồng ngoại xung quanh đi vào, cảm biến kích hoạt tín hiệu HIGH trong một khoảng thời gian nhất định (khi mức độ ánh sáng thay đổi) để báo có sự chuyển động. RIP có thể cho bạn biết liệu có chuyển động trong tầm nhìn hay không, nhưng sẽ không thể phát hiện được khoảng cách bao xa. Vì vậy, nếu cần, bạn có thể cân nhắc một loại cảm biến tương tự là Máy đo khoảng cách siêu âm.

Để thực hành xây dựng mạch thực tế, ta sẽ cần sử dụng:

  • 1 Arduino Uno
  • 1 cáp USB
  • 1 breadboard và dây
  • 1 đèn LED
  • 1 điện trở bất kỳ giá trị từ 100-1K Ohm
  • 1 cảm biến chuyển động PIR

Tham khảo thêm: Sản phẩm Cảm Biến Vật Cản Hồng Ngoại

Bước 1: Xây dựng mạch

Vì sao button bấm không nhạy trong arudino

Bạn hãy xem mạch mẫu bên dưới bằng cách nhấp Start Simulation và nhấp vào Cảm biến chuyển động. Thao tác này sẽ kích hoạt mở ra một khu vực được đánh dấu ở phía trước cảm biến, với một “đối tượng” hình tròn bên trong. Nhấp và kéo vòng tròn “đối tượng” phía trước cảm biến để mô phỏng sự chuyển động. Đèn LED sẽ bật trong một thời gian ngắn khi phát hiện chuyển động.

Mạch mẫu Cảm biến chuyển động PIR với Arduino trong Tinkercad Circuits

Đầu tiên, ta xác định vị trí các linh kiện: cảm biến chuyển động PIR, đèn LED, điện trở và dây kết nối với Arduino.

Kéo Arduino Unobreadboard từ bảng components vào bảng làm việc.

Kết nối đường ray nguồn (+) và đường ray đất (-) của bảng mạch tương ứng với Arduino 5Vchân đất (GND) (nhấp chuột để tạo dây).

Mở rộng đường ray nguồn và đường ray đất ở mép đối diện của bảng mạch bằng cách tạo một dây màu đỏ giữa hai thanh nguồn và một dây màu đen giữa hai thanh đất.

Cắm đèn LED vào hai hàng breadboard khác nhau để cực âm (chân ngắn hơn) kết nối với một chân của điện trở (giá trị bất kỳ từ 100-1K Ohms). Điện trở có thể lắp theo một trong hai hướng vì điện trở không phân cực (khác với đèn LED, cần phải được nối theo một chiều nhất định để có thể hoạt động).

Nối chân điện trở còn lại với đất.

Nối dây cực dương của đèn LED (chân dài hơn) vào chân 13 của Arduino.

Kéo Cảm biến chuyển động PIR từ bảng components vào bảng mạch, đặt sao cho các chân của nó cắm vào ba hàng khác nhau.

Nhấp chuột để tạo dây nối chân ngoài cùng bên phải với nguồn điện.

Nối chân giữa với đất.

Cuối cùng, tạo một dây nối chân ngoài cùng bên trái với chân A0 của Arduino.

Bước 2: Lập trình bằng các khối code

Vì sao button bấm không nhạy trong arudino

Nhấp vào nút “Code” để mở trình chỉnh sửa.

Nhấp vào danh mục Variables và tạo một biến mới gọi là sensorState.

Kéo ra một khối “set“.

Chúng ta sẽ lưu trữ trạng thái của cảm biến chuyển động PIR vào biến sensorState. Nhấp vào danh mục Input Block, kéo khối “read digital pin” ra và đặt vào khối “set”, sau từ “to”.

Vì cảm biến của chúng ta được kết nối với Arduino ở chân 2, hãy thay đổi giá trị từ menu của khối “read digital pin” thành “2“. Bây giờ, các khối của bạn sẽ là “set sensor State to read digital pin 2” nghĩa là lưu trữ tín hiệu digital của chân cảm biến vào sensorState.

Nhấp vào danh mục Control và kéo ra một khối “if then“.

Ta cấu hình để khối này thực hiện chức năng đánh giá xem liệu sensorState phải đang ở trạng thái HIGH hay không (bằng cách sử dụng khối So sánh toán học). Kéo khối So sánh toán học vào câu lệnh if.

Kết quả cuối cùng ta mong muốn là đèn LED sẽ sáng nếu cảm biến được kích hoạt, ngược lại, đèn LED sẽ tắt. Trong danh mục Output Block, tìm khối “set built-in LED to HIGH“. Hãy thử đặt thêm hai khối này vào câu lệnh if (sao cho đèn LED chỉ sáng lên khi cảm biến được kích hoạt). Khối “set built-in LED” nên có giá trị là HIGH khi trạng thái cảm biến là HIGH, và ngược lại.

Bước 3: Giải thích code Cảm biến chuyển động PIR

Khi trình chỉnh sửa code mở, nhấp vào menu bên trái và chọn “Block + Text” để hiển thị code Arduino được tạo bởi các khối code này. 

Vì sao button bấm không nhạy trong arudino

Trước setup(), ta tạo một biến để lưu trữ trạng thái hiện tại của cảm biến. Nó được khai báo bằng int vì là số nguyên (mặc dù rằng chúng ta sẽ chỉ sử dụng các giá trị là 0 và 1, tương ứng LOW và HIGH).

Vì sao button bấm không nhạy trong arudino

Bên trong setup(), các chân được cấu hình bằng pinMode(). Chân 2 được cấu hình như một INPUT, để chúng ta có thể xem trạng thái điện của cảm biến. Chân 13 được cấu hình làm OUTPUT để điều khiển đèn LED. Để có thể truyền ra thông điệp tín hiệu, ta mở một kênh giao tiếp với hàm Serial.begin() có đối số là tốc độ truyền (tốc độ giao tiếp), trong trường hợp này là 9600 bit mỗi giây.

Vì sao button bấm không nhạy trong arudino

Sau 2 dấu gạch chéo // là một nhận xét, để ghi chú cho dễ hiểu khi chương trình Arduino chạy. Trong vòng lặp chính, hàm digitalRead(); sẽ kiểm tra trạng thái của chân 2 (sẽ là 5V – CAO, hoặc nối đất -THẤP) và lưu trữ trạng thái đó trong biến sensorState đã tạo ở trên.

Vì sao button bấm không nhạy trong arudino

Bên dưới hai hàng chú thích nữa là câu lệnh if để kiểm tra xem liệu sensorState có phải là HIGH hay không (“==” là một toán tử so sánh , khác với “=” là một toán tử gán ). Nếu đúng, đèn LED tích hợp được đặt thành HIGH (bật). Nếu sai, code chứa bên trong else { sẽ được thực hiện: khiến đèn LED đặt thành LOW (tắt). Câu lệnh if có thể tồn tại một mình, hoặc đi kèm với nhiều câu lệnh else khác.

Bước 4: Thiết lập cảm biến chuyển động PIR

Vì sao button bấm không nhạy trong arudino

Nếu đang thực hành xây dựng mạch Arduino thật, bạn sẽ cần thiết lập Cảm biến chuyển động PIR của mình một chút.

Xác định vị trí 3 header trên bảng mạch. Chúng sẽ hướng về tâm của một cạnh và được gắn nhãn GND, OUT+5v (hoặc giá trị khác tương tự).

Cắm đầu nối có dây đi kèm vào ba chân, với dây màu đen được nối với GND.

Kiểm tra kỹ đầu nối đã được lắp chắc chắn hay chưa.

Ngoài ra, bạn cũng có thể kết nối ba dây mẫu riêng lẻ, từ đực sang cái, với các chân.

Bước 5: Thực hành xây dựng mạch Arduino

Vì sao button bấm không nhạy trong arudino

Để lập trình Arduino Uno, bạn cần cài đặt phần mềm Arduino Uno và mở nó lên.

Nối dây mạch Arduino Uno bằng cách cắm các linh kiện và dây, sao cho khớp với các kết nối ở mạch mẫu trên Tinkercad Circuit. .

Sao chép code  từ cửa sổ code Tinkercad Circuits và dán vào một bản thảo trống trong phần mềm (hoặc nhấp tải xuống và mở file bằng Arduino). Bạn cũng có thể tìm thấy ví dụ này ở mục Tệp -> Ví dụ -> 02.Digital -> Nút.

Cắm cáp USB, chọn bo mạch và cổng trong menu Tools của phần mềm.

Cuối cùng, tải code và xem đèn LED của bạn sáng có lên khi ta di chuyển vào vùng cảm biến không nhé.

Bước 6: Điều chỉnh cảm biến chuyển động PIR

Vì sao button bấm không nhạy trong arudino

Một số cảm biến chuyển động PIR đi kèm với hai biến trở có thể điều chỉnh để thay đổi độ nhạy và thời lượng của tín hiệu kích hoạt. Cảm biến chuyển động PIR trong bài viết này không có những điều chỉnh này.

Do đó, bạn có thể tuỳ ý sử dụng tua vít nhỏ để điều chỉnh độ nhạy và số thời lượng trên mặt bảng mạch của cảm biến chuyển động PIR.

Nguồn: instructables.com
Lượt dịch: Fuvitech.vn

Trong trình mô phỏng Tinkercad Circuits, Serial Monitor nằm ở cuối bảng Code và được dùng để vẽ biểu đồ các biến (khi chúng thay đổi). Ta sử dụng Serial Monitor để “giao tiếp” với máy tính như là một cách để kiểm tra xem code Arduino có đang thực hiện đúng như những gì ta mong muốn không. Việc này có thể rất hữu ích khi cần giải quyết các vấn đề liên quan đến code (thường được gọi là ‘serial debugging’).

Hai mạch trong bài viết này sử dụng các cấu hình tương tự như hai bài viết trước là: Digital input với nút nhấn và Analog input với biến trở. Sự khác biệt duy nhất là các mạch này không có breadboard và không có đèn LED rời.

Vì sao button bấm không nhạy trong arudino

Bước 1: Hiện kết quả ra Serial Monitor

Vì sao button bấm không nhạy trong arudino

Link mạch mô phỏng: Arduino Serial Monitor trên Tinkercad

Ta sẽ sử dụng trình chỉnh sửa code để thu tín hiệu từ một chân đầu vào của Arduino, sau đó xuất ra giá trị (analog hoặc digital) đó vào cửa sổ Serial Monitor.

Đầu tiên, ta nhấp vào nút “Code” để mở bảng code. Nhấp vào Serial Monitor ở cuối bảng code.

Nhấp vào “Start Simulation” để chạy code Arduino mẫu và quan sát các số trên màn hình serial khi bạn tương tác với biến trở. Bạn có thể nhấp qua lại giữa hai Arduino khi mô phỏng đang chạy, tuy nhiên chỉ có mạch analog mới hiển thị trong module nhúng bên trên.

Sau khi tạo một bản sao mạch mẫu vào tài khoản Tinkercad cá nhân, bạn sẽ có thể chỉnh sửa code theo như mong muốn.

Ta di chuột đến danh mục code Output, kéo ra một khối “print to serial monitor” và đặt nó ngay trước khối serial đã có trong chương trình.

Thay đổi văn bản mặc định (default text) để dán nhãn dữ liệu Serial của bạn (ví dụ như “sensor: “) và điều chỉnh từ menu để dữ liệu in mà không xuống dòng mới.

Bắt đầu mô phỏng và quan sát sự thay đổi trong Serial monitor. Bạn có thể đặt các khối serial như thế này để tạo các thông báo phản hồi giúp ích trong quá trình xây dựng code của bất kỳ dự án nào.

Bước 2: Giải thích code Arduino Serial Monitor

Vì sao button bấm không nhạy trong arudino

Trên Tinkercad Circuits, khi trình chỉnh sửa code mở, bạn có thể nhấp vào menu bên trái và chọn “Block + Text” để hiển thị code Arduino được tạo bởi các khối. Code này sẽ gửi dữ liệu từ Arduino đến Serial monitor.

Vì sao button bấm không nhạy trong arudino

Trước setup() là một đoạn nhận xét nhiều dòng, bắt đầu bằng /* và kết thúc bằng */.

Vì sao button bấm không nhạy trong arudino

Lúc bắt đầu chương trình, ta sẽ tạo một biến để giữ trạng thái của đầu vào (input).

Vì sao button bấm không nhạy trong arudino

Bên trong hàm setup, tương tự như các bài viết về analog input và digital input trước đó, chân nối với công tắc hoặc cảm biến được định cấu hình để trở thành đầu vào, bằng cách sử dụng pinMode(). Để có thể gửi thông điệp tín hiệu, Arduino cần mở một kênh giao tiếp mới bằng hàm Serial.begin(). Kể từ lúc gọi hàm, bạn sẽ mở ra một đường truyền thông tin. Đối số bên trong sẽ thiết lập tốc độ giao tiếp của Arduino, ở ví dụ bên trên là 9600 bit mỗi giây (hay còn gọi là baud).

Vì sao button bấm không nhạy trong arudino

Code bên trong vòng lặp sẽ đọc trạng thái của đầu vào bằng digitalRead () và lưu trữ nó trong biến buttonState. Sau đó, Serial.println() sẽ gửi dữ liệu đến màn hình (thông qua cáp USB nếu ta thực hành trên board Arduino thực tế). Nếu như bạn đã thay đổi các khối code trong chương trình (ở bước trước), thì bạn cũng sẽ thấy dòng code Serial.print().

Lưu ý rằng lệnh println sẽ ngắt dòng mới sau mỗi thông điệp và lệnh print thì không ngắt dòng. Đồng thời ta phải sử dụng dấu ngoặc kép xung quanh các text, ví dụ: Serial.print(sensor: );.

Nếu kết quả của serial debugging nằm trên cùng một dòng, bạn có thể sử dụng nhiều lệnh Serial.print() theo sau bởi một lệnh Serial.println().

Bước 3: Code Debugger (Gỡ lỗi code)

Vì sao button bấm không nhạy trong arudino

Tinkercad Circuit có một tính năng đặc biệt gọi là Trình gỡ lỗi (debugger). Tính năng này sẽ xem xét từng dòng code và cho phép bạn xem các biến của mình.

Khi mở trình chỉnh sửa code, hãy tìm Trình gỡ lỗi bằng cách nhấp vào nút có biểu tượng bug.

Ở chế độ “Block + Text” (hoặc “ Text-only”), hãy nhấp vào số dòng để thêm điểm ngắt. Đây sẽ là nơi trình gỡ lỗi dừng lại mỗi khi vòng lặp thực hiện.

Ta bấm Start Simulation. Sau đó di chuột qua các biến (khi chương trình tạm dừng) để xem giá trị của chúng nhé.

Bước 4: Khởi động Serial Circuit

Vì sao button bấm không nhạy trong arudino

Các mạch này cũng có sẵn trong mục Starters. Bạn có thể sử dụng chúng khi muốn đọc một digital input hoặc analog input nào đó, và xuất trạng thái của nó lên serial monitor.

Mạch có thể được lấy từ bảng components (menu -> Starters -> Arduino).

Bước 5: Biểu đồ dữ liệu serial

Vì sao button bấm không nhạy trong arudino

Tinkercad Circuits cũng tích hợp sẵn đồ thị dữ liệu serial. Tính năng này rất hữu ích cho việc xem xét các thay đổi trong lúc đọc tín hiệu cảm biến và input, cũng như để theo dõi các biến trong chương trình.

Khi Màn hình serial mở, hãy nhấp vào nút biểu đồ để mở bảng biểu đồ. Xóa khối nhãn sensor mà bạn đã thêm trước đó.

Sau đó, nhấp Start Simulation và tương tác với đầu vào để xem các giá trị trên đồ thị thay đổi nhé.

Bước 6: Thực hành với board Arduino

Vì sao button bấm không nhạy trong arudino

Bạn có thể tuỳ ý xây dựng một board Arduino, sau đó sử dụng phần mềm Arduino của máy tính để xem dữ liệu serial qua cáp USB.

Đầu tiên, ta nối dây mạch Arduino Uno bằng cách cắm các linh kiện và dây sao cho khớp với Mạch mẫu trên Tinkercad Circuits. Sao chép code từ cửa sổ code và dán vào một bản thảo trống trong phần mềm Arduino (hoặc nhấp tải xuống và mở file bằng Arduino). Ngoài ra, bạn cũng có thể tìm thấy ví dụ này trong phần mềm, ở mục Tệp -> Ví dụ -> 03.Analog -> AnalogInOutSerial hoặc Tệp -> Ví dụ -> 02.Digital -> DigitalInputPullup.

Sau đó, cắm cáp USB, chọn bo mạch và cổng trong menu Tools của phần mềm.

Tải code lên, nhấp vào biểu tượng kính lúp ở góc trên bên phải để mở màn hình serial. Nhớ kiểm tra kỹ xem tốc độ truyền có khớp với tốc độ được thiết lập không nhé, ở ví dụ này là Serial.begin(9600).

Cuối cùng, ta nhấn nút hoặc xoay núm (tuỳ theo mạch mà bạn thực hiện) và xem các thông số thay đổi trong cửa sổ Serial Monitor.

Nguồn: instructables.com
Lượt dịch: Fuvitech.vn

Trong bài viết này chúng ta cùng tìm hiểu cách đọc giá trị của biến trở (loại biến trở xoay) theo analog của Arduino. Chúng ta sẽ nối một mạch đơn giản, sử dụng breadboard và code Arduino để điều khiển một đèn LED.

Trong bài hướng dẫn này, chúng ta sẽ thấy được tín hiệu đèn thay đổi dần khi xoay biến trở với các đầu vào analog của Arduino (nằm ở hai phía đối diện của board từ các chân i/o digital – đầu vào/đầu ra). Các chân analog đặc biệt này được kết nối với Bộ chuyển đổi analog sang digital (hay còn gọi là ADC -Analog Digital Converter) của Arduino. ADC sẽ chuyển đổi tín hiệu analog đến (giữa 0V và 5V) thành một dải số từ 0-1023 (số 0 vẫn được tính là một giá trị nhé).

Hãy xem Mạch mẫu chiết áp với Arduino bằng cách nhấp vào “Start Simulation” và dùng chuột xoay chiết áp.

Để thực hành dựng mạch này, bạn cần có 1 board Arduino Uno, 1 cáp USB, 1 breadboard, 1 đèn LED, 1 điện trở (bất kỳ từ 100-1K Ohm), 1 biến trở và dây nối mạch.

Tham khảo thêm: Sản phẩm Biến trở RM065 – 0.5K

Bước 1: Xây dựng mạch

Vì sao button bấm không nhạy trong arudino

Vì sao button bấm không nhạy trong arudino

Hãy nhìn vào mạch breadboard trong hình trên. Lưu ý rằng các hàng của breadboard đều được kết nối ở bên trong, do đó bạn có thể cắm các linh kiện và dây để tạo ra kết nối nhanh chóng. Nếu muốn thực hành ảo, bạn có thể mở một cửa sổ Tinkercad Circuits mới và xây dựng bản mạch của mình theo như mạch mẫu.

Đầu tiên hãy xác định các linh kiện: biến trở, đèn LED, điện trởdây nối với Arduino.

Kéo Arduino Unobreadboard từ bảng components vào bảng làm việc.

Kết nối đường dây nguồn (+)đường dây nối đất (-) của bảng mạch chính với Arduino 5Vchân đất (GND), bằng cách nhấp chuột để tạo dây.

Mở rộng đường ray nguồn và đường ray nối đất tương ứng (ở mép đối diện của bảng mạch), bằng cách tạo một dây màu đỏ giữa hai thanh nguồn và một dây màu đen giữa hai thanh đất.

Cắm đèn LED vào hai hàng breadboard khác nhau để cực âm (chân ngắn hơn) kết nối với một chân của điện trở (giá trị bất kỳ từ 100-1K Ohm). Điện trở có thể lắp theo một trong hai hướng vì nó không phân cực (khác với LED, phải được kết nối theo một chiều nhất định).

Nối chân còn lại của điện trở với đất.

Nối dây cực dương của LED (chân dài hơn) vào chân 13 của Arduino.

Kéo một biến trở từ bảng components vào bảng mạch và để các chân của nó cắm vào ba hàng khác nhau.

Nhấp chuột để tạo một dây, nối một chân biến trở bên ngoài với nguồn điện.

Kết nối chân trung tâm với chân analog A0 của Arduino.

Tạo một dây nối chân bên ngoài còn lại với đất.

Bước 2: Code với khối

Vì sao button bấm không nhạy trong arudino

Hãy sử dụng trình chỉnh sửa code để xem trạng thái của biến trở, sau thay đổi biến trở thì LED sẽ nhấp nhấp theo tốc độ khác nhau.

Vì sao button bấm không nhạy trong arudino

Nhấp vào nút “Code” để mở trình chỉnh sửa code. Các khối ký hiệu màu xám là các chú thích để ghi lại ghi chú.

Nhấp vào danh mục “variables” trong trình chỉnh sửa code.

Để lưu trữ giá trị điện trở của biến trở, hãy tạo một biến có tên sensorValue.

Kéo ra một khối “set“. Ở đầu chương trình, đặt biến sensorValue thành “read analog pin” A0.

Nhấp vào danh mục Output và kéo khối đầu tiên ra để đặt đèn LED thành HIGH.

Nhấp vào danh mục Control và kéo khối Wait, sau đó quay trở lại Variables và kéo sensorValue vào khối chờ, đồng thời điều chỉnh từ menu thành mili giây.

Bước 3: Giải thích code biến trở Arduino

Khi trình chỉnh sửa code mở, bạn có thể nhấp vào menu bên trái và chọn “Block + Text” để hiển thị code Arduino được tạo bởi các khối code này.

int sensorValue = 0;

Trước setup(), chúng ta tạo một biến để lưu trữ giá trị hiện tại được đọc từ biến trở. Nó được khai báo dạng int vì là một số nguyên.

void setup() { pinMode(A0, INPUT); pinMode(13, OUTPUT); }

Bên trong setup(), các chân được cấu hình bằng pinMode(). Chân A0 được cấu hình như một đầu vào, để chúng ta có thể xem trạng thái của biến trở. Chân 13 được cấu hình làm đầu ra để điều khiển đèn LED.

void loop() { // read the value from the sensor sensorValue = analogRead(A0);

Mọi thứ ghi sau hai dấu gạch chéo // đều là phần nhận xét (dùng để ghi chú giúp chúng ta hiểu code hơn). Trong vòng lặp chính, hàm analogRead() giúp kiểm tra trạng thái của chân A0 (là một số nguyên từ 0-1023) và lưu trữ giá trị đó trong biến sensorValue.

// turn the LED on digitalWrite(13, HIGH); // pause the program for <sensorValue> millseconds delay(sensorValue); // Wait for sensorValue millisecond(s) // turn the LED off digitalWrite(13, LOW); // pause the program for <sensorValue> millseconds delay(sensorValue); // Wait for sensorValue millisecond(s) }

Hàm digitalWrite(); sẽ đặt đèn LED ở trạng thái bật (HIGH)tắt (LOW). Hai trạng thái này được tách biệt bằng các khoảng thời gian tạm dừng, với hàm delay();. Thời gian chờ này không cố định, mà sẽ được đặt theo giá trị của sensorValue ở cùng thời điểm đó. Vì vậy, nếu sensorValue là 1023, chương trình sẽ tạm dừng trong 1023 mili giây khi delay(sensorValue);được thực thi. Khi ta xoay biến trở và giá trị thay đổi, thời gian của mỗi lần nhấp nháy của đèn LED do đó cũng sẽ thay đổi.

Bước 4: Khởi động mạch Analog input

Vì sao button bấm không nhạy trong arudino

Mạch này cũng có sẵn trong mục Starter của Tinkercad Circuits. Bạn có thể sử dụng nó để đọc biến trở hoặc bất kỳ loại biến trở/ đầu vào analog nào khác.

Ta có thể lấy mạch Starter này từ trong bảng components (menu -> Starters -> Arduino). Mạch này có cùng code với mạch mẫu bên trên, tuy nhiên sẽ thiếu breadboard và sử dụng đèn LED tích hợp của Uno (có dây nối vào chân 13).

Bước 5: Xây dựng mạch với board Arduino

Vì sao button bấm không nhạy trong arudino

Để thực hành thực tế, bạn sẽ cần cài đặt phần mềm Arduino và mở nó lên.

Nối dây mạch Arduino Uno bằng cách cắm các linh kiện và dây để khớp với các kết nối được hiển thị ở mạch mẫu trên Tinkercad Circuits.

Sao chép code từ cửa sổ mã và dán nó vào một bản thảo trống trong phần mềm Arduino (hoặc tải xuống và mở file bằng phần mềm). Bạn cũng có thể tìm thấy ví dụ này trong phần Tệp -> Ví dụ -> 03.Analog -> AnalogInput.

Cắm cáp USB, chọn bo mạch và cổng trong menu Tools.

Tải code lên và xoay núm biến trở để điều chỉnh tốc độ nhấp nháy của đèn LED nhé.

Nguồn: instructables.com
Lượt dịch: Fuvitech.vn

Hôm nay chúng ta cùng tìm hiểu cách điều khiển một nút bấm, bằng cách sử dụng đầu vào kỹ thuật số (analog input) của Arduino. Ta sẽ nối một mạch đơn giản, sử dụng breadboard và code Arduino để điều khiển một chiếc đèn LED.

Đây là bài tiếp theo trong series hướng dẫn thực hành Arduino (với Tinkercad Circuits). Ở những bài viết trước, ta đã học được cách điều khiển nhiều đèn LED. Tuy nhiên đó mới chỉ là một trong nhiều công dụng của đầu ra (output) của Arduino. Ở bài viết hôm nay, ta sẽ dựa trên kết quả output này và thêm vào một input khác. Arduino có thể được lập trình để lắng nghe các tín hiệu điện và thực hiện các hành động dựa trên các input đó.

Nút nhấn được đề cập trong bài là một loại công tắc, một thiết bị cơ dùng để kết nối hoặc ngắt mạch.

Để thực hành trên mạch vật lý, bạn sẽ cần các linh kiện:

  • 1 bảng Arduino Uno
  • 1 cáp USB
  • 1 bảng mạch (breadboard) và dây
  • 1 đèn LED
  • 1 điện trở bất kỳ từ 100-1K Ohm
  • 1 điện trở 10K Ohm
  • 1 nút bấm

Tham khảo thêm: Sản phẩm Arduino Uno R3

Bước 1: Xây dựng mạch

Vì sao button bấm không nhạy trong arudino

Đầu tiên, ta hãy cùng xem mạch mẫu và kiểm tra thử nút nhấn: Mạch mô phỏng Điều khiển nút nhấn với Arduino. Lưu ý rằng các hàng của breadboard đã được kết nối ở bên trong, vì vậy ta có thể cắm các linh kiện và dây để tạo kết nối nhanh chóng. Nếu muốn, bạn cũng có thể mở một cửa sổ Tinkercad Circuits mới và xây dựng bản mạch riêng cho mình nhé.

Trong bảng làm việc (workplane) của Tinkercad Circuits, hãy tìm các linh kiện: nút bấm, đèn LED, hai điện trở và dây nối với Arduino.

Sau đó kéo Arduino Uno và breadboard từ bảng thành phần (components) vào bảng làm việc.

Kết nối đường dây nguồn (+)đường dây nối đất (-) của bảng mạch chính với Arduino 5Vchân đất (GND), bằng cách nhấp chuột để tạo dây.

Nối đường ray nguồn và đất tương ứng ở mép đối diện của bảng mạch, bằng cách tạo một dây màu đỏ giữa hai thanh nguồn và một dây màu đen giữa hai thanh đất.

Cắm đèn LED vào hai hàng breadboard khác nhau để cực âm (chân ngắn hơn) kết nối với một chân của điện trở (giá trị bất kỳ, từ 100-1K Ohms đều được). Điện trở có thể lắp theo một trong hai hướng vì điện trở không phân cực (khác với đèn LED – phải được kết nối theo một hướng nhất định mới có thể hoạt động).

Nối chân điện trở còn lại với đất.

Nối dây cực dương của LED (chân dài hơn) vào chân 13 của Arduino.

Kéo một nút bấm từ bảng thành phần vào giữa bảng mạch và đặt ngang qua đường ngắt ở giữa, sao cho các chân của nút đều cắm vào bốn hàng bảng mạch khác nhau.

Nhấp chuột để tạo dây nối một chân nút với nguồn điện.

Kết nối chân đối diện theo đường chéo đến chân số 2 của Arduino.

Tạo và đặt một điện trở có giá trị cao (ví dụ: 10K Ohm) giữa chân nút đó và đất.

Bước 2: Điện trở kéo xuống

Bạn có thắc mắc liệu tại sao chúng ta cần một điện trở để đọc công tắc?

Ở phần còn lại, hai phía của công tắc này không được kết nối với nhau. Bạn có thể di chuyển chuột qua các chân công tắc để xem nhãn thiết bị đầu cuối (Terminal) của chúng. Công tắc thông thường sẽ ở trang thái mở (trạng thái nghỉ), đầu dây số 12 và đầu dây số 22 không được kết nối với đầu dây số 11 và đầu dây số 21 của nút bấm. Chân 2 của Arduino được kết nối thông qua một điện trở 10K với đất. Khi ta nhấn nút, các dây dẫn công tắc được kết nối, cho phép chân 2 được kết nối với nguồn 5V, vốn không có điện trở. Vì dòng điện đi theo đường có ít điện trở nhất, nên chân cắm kết nối với nguồn điện và bỏ qua các đường nối yếu (10K) với đất.

Tuy nhiên, khi không có tín hiệu nào khác (khi công tắc không được nhấn), đường nối yếu với đất trở thành đường nối duy nhất. Vì vậy, điện trở “kéo chân xuống đất”, nên nó được gọi là pull-down resistor. Nếu không có điện trở này, chân 2 sẽ không được kết nối với bất kỳ thứ gì cho đến khi nút được nhấn. Tình huống này được gọi là “floating“, và nó có thể gây ra tình trạng nhiễu do tĩnh điện và nhiễu điện từ. Tương tự như vậy, điện trở cũng có thể được sử dụng để buộc một chốt vào nguồn điện. Khi đó nó được gọi là pull-up resistor.

Ta thêm một đồng hồ đo vào bảng làm việc, sau đó nối vào chân Arduino 2 và nối đất.

Nhấp vào start simulation và nhấn (hoặc giữ) nút nhấn để quan sát tín hiệu kỹ thuật số được thu nhận bởi chân 2.

Vì sao button bấm không nhạy trong arudino

Để hiểu rõ hơn, bạn có thể xem hình minh hoạ bên trên.

Bước 3: Code với khối

Vì sao button bấm không nhạy trong arudino

Bạn hãy sử dụng trình chỉnh sửa code (code blocks editor) để xem qua tín hiệu nút bấm, sau đó dự đoán thử xem đèn LED sẽ sáng lên khi nút bấm “được nhấn” hay “không được nhấn” nhé.

Ta nhấp vào nút “Code” để mở trình chỉnh sửa. Nhấp vào danh mục Variables và tạo một biến mới, gọi là buttonState.

Kéo ra một khối “set“.

Ta sẽ lưu trữ trạng thái của nút bấm vào biến buttonState. Nhấp vào danh mục Input Block, kéo khối “read digital pin” ra và đặt vào khối “set” sau từ “to”.

Vì nút bấm của chúng ta được kết nối với Arduino trên chân 2, hãy thay đổi từ menu của khối “read digital pin” thành 2. Bây giờ, các khối của bạn sẽ là  “set buttonState to read digital pin 2”, nghĩa là đặt biến buttonState để đọc trạng thái nút nhấn.

Nhấp vào danh mục Control và kéo ra một khối if then/else.

Ta cấu hình để nó thực hiện việc đánh giá xem buttonState có phải là giá trị HIGH hay không, bằng cách sử dụng khối so sánh toán học (Math comparator block). Cụ thể , ta kéo khối so sánh toán học vào câu lệnh if để kiểm tra xem biến buttonState có bằng HIGH không.

Ta muốn đèn LED sẽ sáng lên nếu nút được nhấn, ngược lại, đèn sẽ tắt. Trong danh mục Output block, hãy tìm khối “set built-in LED to HIGH”. Ta sẽ thử thêm các khối này vào câu lệnh if để đèn chỉ sáng khi nhấn nút ấn. “set built-in LED” nên ở trạng thái “HIGH” khi buttonState ở trạng thái “HIGH” – còn không thì “set built-in LED” nên ở trạng thái “LOW“.

Bước 4: Giải thích code Arduino

Vì sao button bấm không nhạy trong arudino

Khi trình chỉnh sửa code mở, ta có thể nhấp vào menu ở bên trái và chọn “Block + Text” để hiển thị code Arduino được tạo bởi các khối.

Vì sao button bấm không nhạy trong arudino

Trước setup(), chúng ta tạo một biến để lưu trữ trạng thái hiện tại của nút. Nó được khai báo bằng int bởi vì là số nguyên.

Vì sao button bấm không nhạy trong arudino

Bên trong hàm setup, các chân được cấu hình bằng pinMode(). Chân 2 được cấu hình như một đầu vào để chúng ta có thể xem được trạng thái của nút nhấn. Chân 13 được cấu hình làm đầu ra để điều khiển đèn LED.

Vì sao button bấm không nhạy trong arudino

Sau dấu gạch chéo // là một comment, chỉ để ghi chú cho chương trình. Trong vòng lặp chính, hàm digitalRead() sẽ kiểm tra trạng thái của chân 2 (sẽ là 5V (HIGH) hoặc là tiếp đất (LOW)) và lưu trữ trạng thái đó trong biến buttonState đã tạo ở trên.

Vì sao button bấm không nhạy trong arudino

Bên dưới các hàng comment là câu lệnh if để kiểm tra xem liệu buttonState có phải là HIGH hay không (“==” là một toán tử so sánh, không nên nhầm lẫn với “=” là một toán tử gán ). Nếu đúng, đèn LED sẽ được đặt thành HIGH (trạng thái bật). Nếu không, các code bên trong else { sẽ được thực thi. Khi đó đèn LED sẽ được đặt thành LOW (trạng thái tắt). Câu lệnh If có thể tồn tại một mình, hoặc với nhiều câu lệnh else khác .

Bước 5: Mạch nút nhấn Starter

Vì sao button bấm không nhạy trong arudino

Mạch này cũng có sẵn trong Tinkercad Circuits. Bạn có thể sử dụng nó khi muốn đọc tín hiệu nút bấm (hoặc các loại công tắc hoặc digital input khác)

Ta lấy mạch và code trong bảng component (menu thả xuống -> Starters -> Arduino). Bộ mạch Starter này có cùng code với mạch mẫu, tuy nhiên không có bảng mạch và sử dụng đèn LED tích hợp sẵn của Uno (dây nối vào chân 13).

Bước 6: Xây dựng mạch với board Arduino

Khi thực hành thực tế, ta nối dây mạch Arduino Uno bằng cách cắm các linh kiện và dây để khớp với các kết nối được hiển thị trong mạch mẫu (trên Tinkercad). Sau đó sao chép code từ cửa sổ code và dán vào một bản thảo trống trong phần mềm Arduino (hoặc tải xuống và mở file bằng Arduino). Bạn cũng có thể tìm thấy ví dụ này trong phần mềm Arduino ở mục File -> Examples -> 02.Digital -> Button.

Tiếp theo, cắm cáp USB, chọn bo mạch và cổng trong menu Tools của phần mềm.

Cuối cùng, tải lên code và xem đèn LED có sáng khi nhấn nút không nhé. 😁

Nguồn: instructables.com
Lượt dịch: Fuvitech.vn