Các chân Analog và Digital trên board

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 49)

- UART - 2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thơng qua 2 chân này. Kết nối bluetooth thường thấy nói nơm na chính là kết nối Serial khơng dây. Nếu khơng cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết.

- Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác.

- Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngồi các chức năng thơng thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác.

- LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng.

Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V, tương đương với 1024 (210) giá trị. Với chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit.

Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.

2.6.2. Lập trình cho Arduino Uno.

• Arduino IDE - Intergrated Development Environment

Để lập trình cũng như gửi lệnh và nhận tín hiệu từ mạch Arduino, nhóm phát triển dự án này đã cũng cấp đến cho người dùng một mơi trường lập trình Arduino được gọi là Arduino IDE (Mơi trường phát triển tích hợp). Cơng cụ này được đội ngũ kĩ sư của Arduino phát triển và có thể chạy trên Windows, MAC OS X và Linux.

Các thiết bị dựa trên nền tảng Arduino được lập trình bằng ngơn riêng. Ngôn ngữ này dựa trên ngôn ngữ Wiring được viết cho phần cứng nói chung. Và Wiring lại là một biến thể của C/C++ hay có thể gọi là “ngơn ngữ Arduino”. Ngôn ngữ Arduino bắt nguồn từ C/C++ phổ biến hiện nay do đó dễ học, dễ hiểu.

Hình 2.44. Giao diện Arduino IDE

Arduino IDE đi kèm với một thư viện phần mềm được gọi là "Wiring", từ project Wiring gốc, có thể giúp các thao tác input/ output được dễ dàng hơn. Người dùng chỉ cần định nghĩa 2 hàm

để tạo ra một chương trình vịng thực thi (cyclic executive) có thể chạy được:

- setup(): hàm này chạy mỗi khi khởi động một chương trình, dùng để thiết lập các cài đặt.

- loop(): hàm này được gọi lặp lại cho đến khi tắt nguồn board mạch.

Vùng lệnh: bao gồm các nút lệnh menu (File, Edit, Sketch, Tools, Help). Phía dưới là các icon cho phép sử dụng nhanh các chức năng thường dùng của IDE được miêu tả như sau:

Hình 2.45. Một số ký hiệu và chức năng trong Arduino IDE Vùng viết chương trình: Vùng này để người lập trình thực hiện việc lập trình cho chương trình của mình.

Vùng thơng báo: Những thơng báo từ IDE sẽ được hiển thị tại đây. Góc dưới cùng bên phải hiển thị loại board Arduino và cổng COM được sử dụng, nếu chọn sai loại board hoặc cổng COM sẽ khơng thể upload được code.

Hình 2.46. Vùng thơng báo trong Arduino IDE

Có vài menu trong phần mềm IDE, tuy nhiên thơng dụng nhất vẫn là menu File, ngồi những tính năng như mở một file mới hay lưu một file, phần menu này có một mục đáng chú ý là Example. Phần Example (ví dụ) đưa ra các ví dụ sẵn để người lập trình có thể tham khảo, giảm bớt thời gian lập trình.

Hình 2.47. Menu File trong Arduino IDE • Cấu trúc của một chương trình Arduino IDE.

Khai báo biến: Đây là phần khai báo kiểu biến trong Arduino IDE, tên các biến, định nghĩa các chân trên board một số kiểu khai báo biến thông dụng:

#define

Nghĩa của từ define là định nghĩa, hàm #define có tác dụng định nghĩa, hay cịn gọi là gán, tức là gán một chân, một ngõ ra nào đó với 1 cái tên.

Ví dụ: #define led 13

Khai báo các kiểu biến khác như: int (kiểu số nguyên), float,…

Thiết lập: Phần này dùng để thiết lập cho một chương trình Arduino IDE, cần nhớ rõ cấu trúc của nó:

void setup() {

… }

Cấu trúc của nó có dấu ngoặc nhọn ở đầu và ở cuối, nếu thiếu phần này khi kiểm tra chương trình thì chương trình sẽ báo lỗi.

Vịng lặp: Dùng để viết các lệnh trong chương trình để mạch Arduino thực hiện các nhiệm thường bắt đầu bằng:

void loop() {

… }

Bảng 2.7. Một số câu lệnh, cấu trúc thường gặpKý hiệu, câu 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 Yê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 tố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)

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 49)

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

(82 trang)
w