Bài viết này giúp các bạn có thể dễ dàng tạo được một phầm mềm trên máy tính laptop để gửi dữ liệu từ đến board Arduino nhằm điều khiển trạng thái của đèn LED.
Cụ thể: Dùng phần mềm processing tạo ra một giao diện trên laptop có nút nhấn để điều khiển LED13 trên Board Arduino Uno R3. Khi nhấn nút trên màn hình thì thông qua bluetooth máy tính sẽ gửi “ON” hoặc “OFF” cho module Bluetooth HC05. Arduino đọc gói tin nhận được từ HC05. Nếu đọc được “ON” thì bật đèn, OFF thì tắt đèn.
1. Kết nối Board Arduino Uno R3 với Module Bluetooth HC05
Các bạn kết nối như sơ đồ sau:
2. Lập trình cho Board Arduino Uno R3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span style="font-family: 'times new roman', times, serif; font-size: 14pt;">void setup() { Serial.begin(9600); // mở serial, baudrate: 9600 pinMode(13, OUTPUT); //cấu hình chân 13 là output digitalWrite(13, 1); } String data; void loop() { if (Serial.available()) { data = Serial.readString(); Serial.println(data); if (data.indexOf("ON") != -1) digitalWrite(13, 1); //nhận được ON thì bất đèn else if (data.indexOf("OFF") != -1) digitalWrite(13, 0);//nhận được OFF thì tắt đèn } delay(500); }</span> |
Lưu ý nhỏ: Khi nạp chương trình, các bạn nên rút chân Tx và Rx của Module Bluetooth HC05 ra khỏi Board Arduino để tránh xung đột, sau khi nạp xong mới cắm vào lại nếu không quá trình nạp có thể sẽ xẩy ra lỗi. (Các bạn có thể dùng Software Serial để tránh trường hợp này).
3. Kết nối Bluetooth Laptop và Module Bluetooth HC05
Tại góc màn hình, các bạn nhấn vào biểu tượng Windown và tìm kiếm từ khóa Bluetooth để vào cửa sổ bên dưới. Sau đó các bạn bật Bluetooth, thêm thiết bị bằng cách nhấn vào biểu tượng Add Bluetooth or otherdevices:
Lưu ý: Module Bluetooth HC05 phải được cấp nguồn trước; 1234 là mật khẩu mặc định để kết nối, các bạn có thể thay đổi hoặc reset về mặc định bằng cách sử dụng tập lệnh AT của module này.
Sau khi kết nối thành công, chúng ta sẽ thấy xuất hiện 2 cổng COM mới, trong trường hợp máy mình là COM3 và COM4. Với COM3 là cổng giao tiếp gửi dữ liệu.
4. Lập trình phần mềm Processing
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
<span style="font-family: 'times new roman', times, serif; font-size: 14pt;">import processing.serial.*; Serial serial; int circleX, circleY; // vi trí của nút nhấn int circleSize = 93; // kích thước của nút nhấn color circleColor; // màu của nút nhấn color circleHighlight; // màu khi rê chuột vào nút nhận color currentColor; boolean circleOver = false; boolean status=true; void setup() { size(640, 360); //tạo ra một cửa sổ 640x360 circleColor = color(255); circleHighlight = color(204); currentColor = color(102); circleX =320; circleY = 180; serial = new Serial(this, "COM3", 9600); // tương tự lệnh serial. truyền vào COM3 là cổng giao tiếp, baudrate: 9600 } void draw() { update(mouseX, mouseY); // xác định xem vị trí chuột có nằm trong nút nhấn hay không background(currentColor); //tô màu cho back ground frame.setTitle("DIEU KHIEN DEN QUA BLUETOOTH");//đặt tên cho task if (circleOver&&status) { // khi chuột nằm trong vùng nút nhấn và đèn đang tắt thì tô màu đen cho nút nhấn, nghĩa là nếu nhấn vào nút sẽ chuyển sang màu đen, đại diện cho tắt fill(color(0)); } else if (circleOver&&!status) { // khi chuột nằm trong vùng nút nhấn và đèn đang bật thì tô màu trắng cho nút nhấn, nghĩa là nhấn vào nút chuyển sang màu trắng, đại diện cho bật fill(color(255)); } else { fill(circleColor); // trường hợp chuộc nằm ngoài nút nhấn, tô màu trùng với trạng thái đèn } textSize(32); // cấu hình kích thước chữ text("LIGHT", 280, 130); // tạo ký tự LIGHT tại vị trí 280x130 ellipse(circleX, circleY, circleSize, circleSize); //tạo ra nút nhấn tại ví trí cicleX x cicleY, kích thước circlesize } void update(int x, int y) { // cùng chức năng với overCicle(), tuy nhiên loại bỏ thông số size của nút nhấn để gọn hơn if ( overCircle(circleX, circleY, circleSize) ) { circleOver = true; } else { circleOver = false; } } void mousePressed() { // hàm mousePressed là hàm được gọi ra mỗi lần nhấn chuột if (circleOver&&status) { // khi chuột nằm trong nút nhân và đèn đang sáng thì chuyển màu nút nhấn sang màu đen, đống thời gửi ký tự OFF lên bluetooth circleColor=color(0); status=false; serial.write("OFF"); } else if (circleOver&&!status) { // khi chuột nằm trong nút nhân và đèn đang tắt thì chuyển màu nút nhấn sang màu trắng, đống thời gửi ký tự ON lên bluetooth circleColor=color(255); status=true; serial.write("ON"); } } boolean overCircle(int x, int y, int diameter) { // xác định xem vị trí x,y có nằm trong phạm vi nút nhấn hay không float disX = x - mouseX; float disY = y - mouseY; if (sqrt(sq(disX) + sq(disY)) < diameter/2 ) { return true; } else { return false; } } </span> |
Giao diện lập trình giống Arduino IDE, thân thiện.
Sau khi nhấn vào biểu tượng khoanh đỏ trên hình thì chúng ta có được giao diện điều khiển sau, các bạn kết hợp với việc mở Serial Mornitor của Arduino IDE lên để quan sát nhé.
Chúc các bạn thành công!
Trịnh Vĩnh Trường – TAPIT Member