Một số câu lệnh, cấu trúc thường gặp

Một phần của tài liệu Đồ án thiết kế mô hình cân điện tử bằng arduino (Trang 54)

Ký hiệu, câu

lệnh Ý nghĩa câu lệnh

// Dấu // dùng để giải thích nội dung, khi kiểmtra chương trình thì phần kiểm tra sẽ bỏ qua phần này.

/*…. ….. */

Ký hiệu này cũng dùng để giải thích, nhưng giải thích dành cho 1 đoạn, tức có thể xuống dòng được.

#define biến chân

Define nghĩa là định nghĩa, xác định. Câu lệnh này nhằm gán tên 1 biến vào 1 chân nào đó. Ví dụ #define led 13

digitalWrite(ch

đây trạng thái chân có thể là HIGH hoặc LOW. Ví dụ: digital(led,HIGH);, hoặc digital(led,LOW);. Chú ý dấu chấm phẩy đằng sau câu lệnh.

analogWrite(ch ân, giá trị);

Có ý nghĩa dùng để băm xung (PWM), thường dùng để điều khiển tốc độ động cơ, độ sáng led,…

digitalRead(ch

ân); Read nghĩa là đọc, lệnh này dùng để đọcgiá trị digital tại chân muốn đọc. analogRead(ch

ân);

Read nghĩa là đọc, lệnh này dùng để đọc giá trị analog tại chân muốn đọc.

delay(thời gian);

Delay nghĩa là chờ, duy trì. Lệnh này dùng để duy trì trạng thái đang thực hiện chờ một thời gian. Thời gian ở đây được tính bằng mili giây, 1 giây bằng 1000 mili giây. if() { … } else () { ... }

if nghĩa là nếu, sau if là dấu (), bên trong dấu ngoặc là một biểu thứ so sánh. Ví dụ: if (giatriAnalog>500) //nếu giá trị đọc được của biến giatriAnalog lớn hơn 500

{

digitalWrite(Led,HIGH); //Ra lệnh cho led sáng

delay(1000);//chờ 1s }

else nghĩa là ngược lại.

Serial.print() In ra màn hình máy tính, lệnh này in khơngxuống dòng. Serial.println() In ra màn hình máy tính, in xong xuốngdịng, giá trị tiếp theo sẽ được in ở dịng kế

tiếp.

• Lập trình cho Arduino IDE

Trước tiên hãy đảm bảo rằng máy tính đã cài đặt Arduino IDE và Arduino driver. Chuẩn bị phần cứng là một board Arduino Uno R3 và một sợi dây cáp (để kết nối Arduino với máy tính).

Hình 2.48. Kết nối Arduino Uno R3 với máy tính

Bước 2: Tìm cổng kết nối của Arduino Uno R3 với máy tính. Khi Arduino Uno R3 kết nối với máy tính, nó sẽ sử dụng một cổng COM để máy tính và bo mạch có thể truyền tải dữ liệu qua lại thơng qua cổng này. Windows có thể quản lí đến 256 cổng COM. Để tìm được cổng COM đang được sử dụng để máy tính và mạch Arduino UNO R3 giao tiếp với nhau cần phải mở chức năng Device Manager của Windows.

Mở cửa sổ Device Manager lên để tìm cổng COM kết nối với board Arduino Uno R3 là cổng số mấy.

Mở mục Ports (COM & LPT), sẽ thấy cổng COM3 mà Arduino Uno R3 đang kết nối, ở cổng USB khác thì cổng COM sẽ khác.

Hình 2.49. Arduino Uno R3 được kết nối với COM3.

Thông thường Windows sẽ sử dụng lại cổng COM3 để kết nối nên khơng cần thực hiện thêm thao tác tìm cổng COM này nữa.

Bước 3: Chọn board Arduino Uno R3 trên IDE.

Hình 2.50. Chọn board Arduino Uno trong IDE Lưu ý nhớ chọn đúng board Ardunio mình sử dụng.

Tiếp theo vào menu Tools > Serial Port > chọn cổng Arduino đang kết nối với máy tính.

Hình 2.51. Chọn cổng COM cho Arduino IDE

Xác nhận cổng COM của Arduino IDE ở góc dưới cùng bên phải cửa sổ làm việc.

Hình 2.52. Xác nhận cổng COM

Những lần sau khi đưa chính board Arduino đó vào máy tính thì khơng cần chọn cổng COM, nếu đưa board Arduino khác vào máy thì cần phải chọn lại cổng COM và board Arduino trên IDE.

Bước 4: Thiết kế chương trình cần chạy cho Arduino Uno R3.

Hình 2.53. Cửa sổ thiết kế các dịng lệnh Bước 5: Nạp chương trình vào board Arduino.

Hình 2.54. Nạp chương trình xuống Arduino Uno R3.

2.7 Arduino Bluetooth Terminal

Cách dễ nhất để hiển thị dữ liệu cảm biến Arduino trực tiếp trên điện thoại thơng minh Android. Ứng dụng có thể hiển thị đồng thời các kết quả đọc từ tối đa 10 cảm biến.

Trong phiên bản mới nhất với chức năng đầu cuối, dữ liệu thậm chí có thể được gửi từ điện thoại thông minh Android đến Arduino. Các tin nhắn đến cũng được hiển thị trong ứng dụng.

Tất cả những gì bạn cần là một đoạn mã nhỏ trên Arduino, mô-đun Bluetooth (HC-05) và ghép nối mô-đun Bluetooth với điện thoại thơng minh trong cài đặt hệ thống.

Hình 2.6.1 Icon của app Arduino Bluetooth Terminal.

Bước 1 :Mở điện thoại kết nối Bluetooth với HC05

Hình 2.6.1 Giao diện app

Hình 2.6.2 Giao diện app

Bước 3 chọn HC05 và bấm Receiver

Bước 4 Đọc tín hiệu và kiểm tra kết nối

Hình 2.6.4 Giao diện app

Kết luận chương

Đã xây đựng được bài toán cân điện tử tìm hiểu rõ về nguyên lý loạt động, thông số kỹ thuật, cách sử dụng của các linh kiện và ứng dụng cần sử dụng trong cái khối. Chuẩn bị thiết kế, thi cơng lắp ráp hồn thiện mơ hình.

CHƯƠNG 3: THIẾT KẾ VÀ THI CƠNG 3.1 u cầu bài tốn

Thiết kế mơ hình cân điện tử sử dụng Arduino đáp ứng được các yêu cầu sau:

- Sử dụng sóng Loacell để truyền nhận tín hiệu được cho thiết bị HX711. Lựa chọn sử dụng module HX711. Thiết bị được phải đọc điện tín hiệu tương tự trả về tín hiện số gửi truyền cho Ardunio R3.

-Dùng ma trận phím 4*4 để nhập tín hiệu vào Ardunio. Để nhận được biến dưới dạng “float” hoặc “int”.

- Ardunio phải mã hóa được cái tín hiệu để tính tốn số cân ra giá tiền sản phẩm được cân .

- Hiện thị được tất cả ra màn LCD 16*2. -cân chính xác sai số khơng q ± 0.01 Kg.

3.2. Lựa chọn phương án thi công.

Mạch cân điện tử cần ba khối chức năng cơ bản là:

- Khối cảm biến lực tác động để đo khối lượng vật cần đo lường.

- Khối xử lý có nhiệm vụ tính tốn, xử lý dữ liệu để đưa đến khối hiển thị (Khối xử lí do nhà sản xuất hoặc người sử dụng thiết kế).

- Khối hiển thị có chức năng hiển thị các thơng số đo

Hình 1.8. Sơ đồ khối cơ bản của cân điện tử.

Do đó có một số phương án thi cơng dùng những linh kiện phù hợp với các khối chức năng trong cân điện tử như sau:

- Cảm biến Loadcell. - Vi điều khiển IC16F877A. - LED 7 đoạn. - Cảm biến Loadcell. - Vi điều khiển 8051. - LCD - Cảm biến loadcell. - Vi điều khiển Arduino. - LCD

Cảm biến loadcell là thiết bị đo trọng lượng vật dùng trong mạch điện tử, đa dạng về tính năng và hình dạng, rất dễ sử dụng cùng module HX711.

Arduino là một board mạch được tích hợp sẵn vi xử lý chính cùng các linh kiện điện tử cần thiết giúp mạch có nhiều tính năng và chạy ổn định. Hiện nay board Arduino Uno được nhiều người sử dụng và ứng dụng trong rất nhiều mạch điện tử.

LCD, cụ thể là LCD 16x2 rất hay được dùng trong các mạch điện tử vì LCD có thể hiển thị được cả chữ và số theo yêu cầu người người sử dụng.

Do vậy, trong mạch cân điện tử ở báo cáo tốt nghiệp lần này, cần sử dụng các linh kiện dùng trong mạch cân điện tử là cảm biến loadcell, module HX711, Arduino Uno R3, LCD, nút bấm

Hình 3.1. Sơ đồ khối tổng quát

Hoạt động sơ đồ: khi khởi động bộ nguồn sẽ cấp nguồn hoạt động cho hệ thống. Đầu tiên loadcell sẽ gửi tín hiệu điện cho bộ khuếch đại và ADC và chuyển thành tín hiệu 24bit để gửi về khối xử lý. Khi nhập giá tiền thì ma trận 4*4 sẽ gửi tín một giá trị kiểu char về cho khối xử lý. Cuối cùng khi khối xử lý nhập đủ tín hiệu khối lượng và giá tiền thì khối sẽ xử lí tính tốn và đưa kết quả ra khối hiển thị.

3.4. Sơ đồ nguyên lý.

Hoạt động thuật toán:khởi tạo các dữ liệu các tên biến char, float, int,... .Nhập từ bàn phím giá trị tiền kiểu “char giatien[4];” rồi cấu hình đọc tín hiệu và chuyển đổi giá trị từ bàn phím và mudol HX711, khi nhập đủ thơng tin tạo điều khiện thực tín tốn hiện thị bằng nút bấm nếu bấm thì sẽ tính tốn gửi tín hiệu lên bluetooth và hiện thị trên LCD khơng thì chương trình chạy lặp chờ bấm

3.5.1 Thuật toán cân điện tử cho Arduino

1. Khởi tạo dữ liệu các biến và giá trị cần dùng: char nhapgia[6];

2. Nhập giá tiền:

nhapgia[i]=EnterKey; // Nhập lần lượt các ký tự vào biến chuỗi ký tự gia

3. Đọc tín hiệu từ HX711:

long zero_factor = scale.read_average();// đọc tín hiệu HX711

4. Chuyển đổi giá trị: float weight;

float calibration_factor = -100525; // giá trị này bạn lấy từ code hiệu

5. Xử lý trung tâm: Serial.begin(9600); BTserial.begin(9600);

6. Tính Tốn:

gia=(gia1*1000) + (gia2*100) + (gia3*10) + gia4; tien = (gia * weight)+(0.5);

7. Hiện thị LCD:

lcd.setCursor(0, 1); lcd.print("gia:");

Hình 3.3. Mơ phỏng mạch.

Cấp nguồn cho mạch điện tử thông qua cổng USB trên board Arduino. Dùng một vật bất kì (nhỏ hơn 40kg) đặt lên bàn cân, loadcell bị biến dạng, HX711 đọc dữ liệu từ loadcell, qua chân DT và SCK đưa về chân D5 và D6 của board Arduino. Sau đó, Arduino xử lí dữ liệu, thơng qua các chân D7, D8, D9, D10, D11, D12, D13, trả kết quả lên màn hình LCD. Đồng thời, giao diện trên máy tính được kết nối với board Arduino cũng hiển thị giá trị đo được tương ứng trên LCD. Ngồi ra, mạch cịn sử dụng thêm nút bấm để reset giá trị về 0.

Ví dụ nếu sử dụng một cái đĩa để đựng các loại hạt muốn cân, đặt đĩa lên mặt cân rồi nhấn nút reset, giá trị hiển thị sẽ trở về 0, sau đó cho các loại hạt lên cân khối lượng như bình thường.

Lưu ý: khi khơng sử dụng đĩa cân nữa, nên ấn nút reset một lần nữa.

3.7 Lắp ráp và hồn thiện thi cơng

3.7.1 Danh sách linh kiện

1. Cảm biết loadcell 40kg.

3. Mạch chuyển đổi HX711.

4. Arduino Uno R3 Atmega8.

5. Nút bấm.

6. Ma trận phím 4*4.

7. Module HC05 bluetooth.

8. Một số tấm mica, keo nếm, thiếc hàn,... 3.7.2 Tiến hành thi cơng

Hình 3.5 lắp đặt thực tế

3.8 Phương pháp tính tiền

3.8.1. Phương pháp tính giá trị khối lượng Dùng ADC HX711 24 bit, điện áp 5V.

Ta có: 5000mV --- ứng với --- 224-1 (24bit) Nên : 40 000g ----- ứng với --- 224-1 (24bit)

x Kg ----- ứng với --- giá trị ADC đo được. Do đó:

3.8.2. Phương pháp tính giá trị khối lượng đổi ra tiền VNĐ

Ta có: y mức giá nhập vào từ bàn phím (nghìn đồng “K.VNĐ”)

x giá trị ADC đổi sang khối lượng (Kg)

z giá trị khối lượng đổi ra thành tiền (nghìn đồng “K.VNĐ”)

do đó

3.9 Phương pháp cân

B1: cấp nguồn cho mạch khởi động bật máy.

B2: nhập giá tiền của sản phẩm bằng ma trận 4x4.

B3: kết nối bluetooth với điện thoại.

B4:đặt sản phẩm cần cân khối lượng lên bề mặt loadcell

B5:bấm nút để hiển thị giá trị cân và giá tiền đã được tính

B6:đọc giá trị. Hình 3.6. Hồn thành thi công mạch. Bảng 2.8. Bảng so sánh với cân thực tế. Mạch cân tự thiết kế Cân tự động có sẵn Smartphone 0.25kg 0.25g

Chai dầu gội 0.55g 0.55g

20 quyển

truyện tranh 2.72kg 2.72kg

Kết quả so sánh cho thấy mạch cân điện tử tự thiết kế này có sai số trong khoảng từ 0 kg đến 0.001 kg.

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI.

Trong các ngành công nghiệp khác nhau, cân điện tử ngày càng trở nên cần thiết để đo lường và tin học hóa trọng lượng (khối lượng) của sản phẩm để nâng cao chất lượng và năng suất và giảm chi phí. Do tính linh hoạt của bộ xử lý, tuỳ theo mục đích cụ thể mà chương trình viết cho bộ xử lý khác nhau. Do đó, hệ thống cân này có thể ứng dụng trong nhiều lĩnh vực có liên quan đến việc đo khối lượng.

Với những yêu cầu đặt ra như trình bày ở trước. Các phần đã thực hiện và hoạt động được có thể kể ra như sau: Mơ hình cân có gắn Loadcell, nguồn cung cấp ổn định, màn hình hiển thị kết quả rõ. Q trình thiết kế và thi cơng mạch cân điện tử đã hồn thành nhưng cịn nhiều tính năng mà cân điện tử trong bài khơng có nên có thể phát triển thêm như: có thể cân được khối lượng cao hơn, đổi được các đơn vị cân nặng, giao diện hiển thị lên máy tính có thể xuất ra được file excel, …cho mạch ổn định, hiển thị kết quả trên LCD và máy tính.

Để nâng cao tính năng cho phần mạch dùng vi xử lý có thể thiết kế thêm các nút nhấn để chỉnh bước cân (span) nhằm cài đặt hệ số cho vi xử lý tính tốn các giá trị cân chính xác theo khối lượng chuẩn quy định, hoặc có thể là chọn dấu chấm thập phân bằng cách thay đổi trên nút nhấn,… Một số chức năng của đầu cân thực tế có thể thực hiện được nếu sử dụng bộ nhớ và nguồn ni cho nó và dùng các linh kiện có chất lượng cao.

TÀI LIỆU THAM KHẢO.

[1]ThS.Trương Anh Ngọc, “Giáo trình vi điều khiển PIC Lý thuyết - Thực hành”, Đại học Công Nghiệp Hà Nội, 2018

[2]ThS. Phạm Thị Thanh Huyền - ThS. Nguyễn Thị Minh Tâm - TS. Nguyễn Ngọc Anh, Giáo trình linh kiện điện tử, Trường đại học công nghiệp Hà Nội, 2016.

[3]TS.Lê Văn Doanh – TS.Phạm Khắc Chương, Kỹ thuật vi điều khiển, Nhà xuất bản khoa học kỹ thuật.

[4] TS.Lê Chí Kiên, Giáo trình đo lường cảm biến, Nhà xuất bản đại học quốc gia TP. Hồ Chí Minh.

PHỤ LỤC Chương trình chính.

Chương trình nạp vào board Arduino Uno: #include "HX711.h" #include <Wire.h> #include <Keypad.h> #include <Servo.h> #include <LiquidCrystal_I2C.h> #include <SoftwareSerial.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

Servo myservo; //Tạo biến myServo của loại Servo //Tạo ký tự đặc biệt &

byte va[] = { B00000, B01100, B10010, B10100, B01000, B10101, B10010, B01101 };

int sensorPin = A0; int sensorValue = 0; const byte ROWS = 4; const byte COLS = 4; char nhapgia[6]; int i = 0; int on=0; float a = 0.01; int b = int(a); int gia=0; int gia1=0; int gia2=0; int gia3=0; int gia4=0;

int gia5=0; float tien=0; float W; int congtac=13; char MatrixKey[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'D','0','F','D'} }; byte rowPins[ROWS] = {2,3,4,5}; // R1,R2,R3,R4 byte colPins[COLS] = {6,7,8,9}; // C1,C2,C3,C4

Keypad Mykeys = Keypad( makeKeymap(MatrixKey), rowPins, colPins, ROWS, COLS);

HX711 scale(12, 11);

int rbutton = 13; // nút nhấn được sử dụng để reset giá trị trọng lượng về 0

float weight;

float calibration_factor = -100525; // giá trị này bạn lấy từ code hiệu chỉnh void setup() { Serial.begin(9600); BTserial.begin(9600); pinMode(congtac, INPUT_PULLUP); scale.set_scale();

long zero_factor = scale.read_average(); //đọc thông tin lcd.init();

lcd.backlight(); lcd.begin(16,2);

lcd.createChar(0, va); // Tạo ký tự đặc biệt & }

void loop() {

//IMPORTANT: The complete String has to be of the Form: 1234,1234,1234,1234;

//(every Value has to be seperated through a comma (',') and the message has to

//end with a semikolon (';'))

if (digitalRead(congtac) == LOW) { BTserial.print(weight); BTserial.print(","); BTserial.print(gia); BTserial.print(","); BTserial.print(tien); BTserial.print(","); BTserial.print("VND"); BTserial.print(","); BTserial.print("0"); BTserial.print(";");

//message to the receiving device delay(20);

}

int as = digitalRead(congtac); char EnterKey = Mykeys.getKey(); scale.set_scale(calibration_factor); lcd.setCursor(0, 1); lcd.print("gia:"); lcd.setCursor(9, 1); lcd.print("K"); lcd.setCursor(0, 2); lcd.print("tien:"); lcd.setCursor(0, 0); lcd.print("KHOI LUONG "); if (EnterKey) {

nhapgia[i]=EnterKey; // Nhập lần lượt các ký tự vào biến chuỗi ký tự gia i++; on++; Serial.println(nhapgia); // Nhập gia if (i == 1) { nhapgia[0] = EnterKey; gia1 = nhapgia[0]-'0'; lcd.setCursor(5, 1); lcd.print(gia1);

delay(500); // Ký tự hiển thị trên màn hình LCD trong 0.5s }

if (i == 2) {

gia2 = nhapgia[1]-'0'; lcd.setCursor(6, 1); lcd.print(gia2); delay(500); } if (i == 3) {

Một phần của tài liệu Đồ án thiết kế mô hình cân điện tử bằng arduino (Trang 54)

Tải bản đầy đủ (DOCX)

(82 trang)
w