55
4.3.5 Khối nguồn Adapter
- Khối nguồn Adapter dùng nguồn Adapter (5V-5A) cấp nguồn cho mơ hình.
4.3.6 Khối hiển thị
- Khối hiển thị dùng LCD 16x2, nhận tín hiệu từ khối XLTT và hiển thị giá trị dòng, áp.
4.3.7 Khối cảm biến hướng xoay
- Khối cảm biến hướng quay dùng biến trở, nhận biết hướng quay của tấm Pin NLMT và đưa thơng tin về khối XLTT.
Hình 4. 12 Khối hiển thị. Hình 4. 11 Khối nguồn Adapter. Hình 4. 11 Khối nguồn Adapter.
56
4.3.8 Khối công suất
- Khối công suất dùng Module L298N, nhận tín hiệu từ khối XLTT và điều khiển 2 ĐC Servo.
Hình 4. 14 Khối cơng suất. Hình 4. 13 Khối cảm biến hướng xoay. Hình 4. 13 Khối cảm biến hướng xoay.
57
4.3.9 Sơ đồ nguyên lý mạch điều khiển
58
4.3.10 Sơ đồ mạch in điều khiển
4.3.11 Sơ đồ mạch in của quang trở
Hình 4. 16 Mạch in điều khiển.
59
4.4 Chương trình điều khiển
4.4.1 Lưu đồ của chương trình điều khiển hệ thống
- Cách thức làm việc của hệ thống: kiểm tra biến “tt” nếu bằng 0 thì chương trình chính sẽ được chạy và bắt đầu đọc dịng đọc áp. Chương trình chính sẽ cho hệ thống chạy tự động. Ngược lại nếu “tt” bằng 1 thì sẽ bắt đầu nhận dữ liệu biến từ ESP8266 để điều khiển tay.
60
4.4.2 Lưu đồ giải thuật của chương trình Arduino cho Module ESP8266
- Chương trình khởi tạo các phần cứng cơ bản sau đó chạy App Blynk nếu “tt1” bằng 1 thì gửi số 1 (điều khiển lên). Còn nếu “tt1” bằng 2 thì gửi số 2 (điều khiển xuống), “tt1” bằng 3 thì gửi số 3 (điều khiển qua phải) và nếu “tt1” bằng 4 thì gửi số 4 (điều khiển qua trái) trên giao diện app Blynk. Ngược lại nếu
61
“tt1” khác những điều kiện trên thì kiểm tra “tt51” có bằng 1 hay khơng? Nếu có bằng 1 thì gửi số 5 (chạy tay). Và tiếp tục nếu “tt51” khơng bằng một thì kiểm tra “tt52” có bằng 1 khơng? Nếu có thì gửi số 7 (chạy tự động). Sau khi kiểm tra hết tất cả trạng thái thì tiếp tục kiểm tra “dl” có dữ liệu nào gửi qua hay khơng. Nếu có thì kiểm tra tiếp nếu “dl” bằng một ký tự “r” thì sẽ bắt đầu tính dịng điện và gửi lên App. Kiểm tra tiếp nếu “dl” bằng một ký tự “u” thì bắt đầu tính điện áp gửi lên app. Ngược lại nếu “dl” khơng nằm trong hai kí tự đó thì quay lại chạy Blynk.
4.4.3 Lưu đồ giải thuật chương trình con 1 (chay_td)
- Chương trình chay_td đọc cảm biến quang trở, điều khiển động cơ chạy theo ánh sáng mặt trời.
- Chương trình con chạy tự động khi bắt đầu gọi tất cả các chương trình con đọc ADC về quang trở và biến trở. Sau đó bắt đầu tính trung bình ADC giữa hai con quang trở với nhau. Sẽ lấy ADC đông (adcd) và ADC tây (adct) chia trung bình (hdt), ADC tây (adct) và ADC nam (adcn) chia trung bình (htn), ADC nam (adcn) và ADC bắc (adcb) chia trung bình (hnb) và ADC bắc (adcb) chia trung bình với ADC đơng (adcd) chia trung bình (hbd). Tiếp đến đọc ADC quang trở về lấy giá trị ADC. Nếu tất cả các ADC quang trở đã chia trung bình lớn hơn 450 thì sẽ cho mơ hình trở về vị trí ban đầu vì đây là đồng nghĩa khơng cịn ánh nắng. Cịn ngược lại nếu “hdt” nhỏ hơn “hnb” thì sẽ tiếp tục lấy “hnb” cộng cho một giá trị “gh”. Nếu cộng mà vẫn nhỏ hơn “hdt” thì bật động cơ đi xuống cịn nếu khơng nhỏ hơn thì tắt động cơ. Kiểm tra tiếp nếu “hnb” nhỏ hơn “hdt” thì sẽ lấy “hnb” cộng cho biến “gh” tiếp tục nếu vẫn bé hơn “hdt” thì bật động cơ đi lên ngược lại nếu bằng hoặc lớn hơn “hdt” thì tắt động cơ. Ngược lại tất cả điều kiện trên thì sẽ tắt động cơ và đi kiểm tra điều kiện khác. Như những điều kiện trên thì “hbd” so sánh với “hdt” thì cũng sẽ xét từng điều kiện như vậy và điều khiển động cơ quay trái phải.
62
63
4.4.4 Lưu đồ giải thuật chương trình con 2 (doc_adcd)
- Chương trình con “doc_adcd” đọc cảm biến quang trở hướng đơng, tính tốn giá trị ADC đọc được.
- Chương trình con “doc_adcd” đầu tiên cài đặt kênh ADC cần sử dụng và khởi tạo các biến như adc=0, i=0. Tiếp tục cho chương trình đọc ADC về 10 lần liên tiếp bằng vịng lặp for(i=0;i<10;i++). Khi hồn thành xong vịng lặp for, ta lấy giá trị “adc” vừa đọc được chia cho 10 để tính ra giá trị trung bình, sau đó chia tiếp cho 2,046 để tính ra giá trị “adc” và gán “adcd = adc”. Tiếp tục kiểm tra giá trị của biến “hdt” và gửi qua ESP8266 để xử lý và hiển thị.
Doc_adcd Set_adc_channel(0); Adc=0; i=0; i < 10 i ++; adc = adc + read_adc(); Delay_ms(1); adc = adc/10; adc = adc/2.048; adcd = adc; Hdt < 10 Hdt < 100 Hdt < 1000 printf("d00%ld .",hdt); printf("d0%ld." ,hdt); printf("d%ld.", hdt); end Đúng Sai
Sai Sai Sai
Đúng Đúng
Đúng
64
4.4.5 Lưu đồ giải thuật chương trình con 3 (doc_adct)
- Chương trình con “doc_adct” đọc cảm biến quang trở hướng tây, tính tốn giá trị ADC đọc được.
- Chương trình con “doc_adct” đầu tiên cài đặt kênh ADC cần sử dụng và khởi tạo các biến như adc=0, i=0. Tiếp tục cho chương trình đọc ADC về 10 lần liên tiếp bằng vịng lặp for(i=0;i<10;i++). Khi hồn thành xong vịng lặp for, ta lấy giá trị “adc” vừa đọc được chia cho 10 để tính ra giá trị trung bình, sau đó chia tiếp cho 2,046 để tính ra giá trị “adc” và gán “adct = adc”. Tiếp tục kiểm tra giá trị của biến “hdn” và gửi qua ESP8266 để xử lý và hiển thị.
65
4.4.6 Lưu đổ giải thuật chương trình con 4 (doc_adcn)
- Chương trình con “doc_adcn” đọc cảm biến quang trở hướng Nam, tính tốn giá trị ADC đọc được.
- Chương trình con “doc_adcn” đầu tiên cài đặt kênh ADC cần sử dụng và khởi tạo các biến như adc=0, i=0. Tiếp tục cho chương trình đọc ADC về 10 lần liên tiếp bằng vịng lặp for(i=0;i<10;i++). Khi hồn thành xong vòng lặp for, ta lấy giá trị “adc” vừa đọc được chia cho 10 để tính ra giá trị trung bình, sau đó chia tiếp cho 2,046 để tính ra giá trị “adc” và gán “adcn = adc”. Tiếp tục kiểm tra giá trị của biến “hnb” và gửi qua ESP8266 để xử lý và hiển thị.
Hình 4. 23 Lưu đồ giải thuật chương trình con 4 (doc_adcn).
Doc_adcn Set_adc_channel(2); Adc=0; i=0; i < 10 i ++; adc = adc + read_adc(); Delay_ms(1); adc = adc/10; adc = adc/2.048; adcn = adc; hnb<10 hnb<100 hnb<1000 printf("n00%ld .",hnb); printf("n0%ld." ,hnb); printf("n%ld.", hnb); end Đúng Sai
Sai Sai Sai
Đúng Đúng
66
4.4.7 Lưu đổ giải thuật chương trình con 5 (doc_adcb)
- Chương trình con “doc_adcb” đọc cảm biến quang trở hướng Bắc, tính tốn giá trị ADC đọc được.
- Chương trình con “doc_adcb” đầu tiên cài đặt kênh ADC cần sử dụng và khởi tạo các biến như adc=0, i=0. Tiếp tục cho chương trình đọc ADC về 10 lần liên tiếp bằng vịng lặp for (i=0;i<10;i++). Khi hồn thành xong vòng lặp for, ta lấy giá trị “adc” vừa đọc được chia cho 10 để tính ra giá trị trung bình, sau đó chia tiếp cho 2,046 để tính ra giá trị “adc” và gán “adcb = adc”. Tiếp tục kiểm tra giá trị của biến “hnd” và gửi qua ESP8266 để xử lý và hiển thị.
Doc_adcb Set_adc_channel(5); Adc=0; i=0; i < 10 i ++; adc = adc + read_adc(); Delay_ms(1); adc = adc/10; adc = adc/2.048; adcb = adc; hbd<10 hbd<100 hbd<1000 printf("b00%ld .",hbd); printf("b0%ld." ,hbd); printf("b%ld.", hbd); end Đúng Sai
Sai Sai Sai
Đúng Đúng
Đúng
67
4.4.8 Lưu đổ giải thuật chương trình con 6 (doc_adcu)
- Chương trình con “doc_adcu” đọc giá trị biến trở, chuyển đổi và tính tốn giá trị ADC đọc được.
- Chương trình con “doc_adcu” đầu tiên cài đặt kênh ADC cần sử dụng và khởi tạo các biến như adc=0, i=0. Tiếp tục cho chương trình đọc ADC về 10 lần liên tiếp bằng vịng lặp for(i=0;i<10;i++). Khi hồn thành xong vòng lặp for, ta lấy giá trị “adc” vừa đọc được chia cho 10 để tính ra giá trị trung bình, sau đó chia tiếp cho 2,046 để tính ra giá trị “adc” và gán “adcu = adc”. Tiếp tục kiểm tra giá trị của biến “adcu” và gửi qua ESP8266 để xử lý và hiển thị.
Doc_adcu Set_adc_channel(13); Adc=0; i=0; i < 10 i ++; adc = adc + read_adc(); Delay_ms(1); adc = adc/10; adc = adc/2.048; adcu = adc;
adcu<10 adcu<100 adcu<1000
printf("b00%ld .",adcu); printf("b0%ld." ,adcu); printf("b%ld.", adcu); end Đúng Sai
Sai Sai Sai
Đúng Đúng
Đúng
68
4.4.9 Lưu đổ giải thuật chương trình con 7 (doc_dong)
- Chương trình con “doc_dong” đọc giá trị adc, chuyển đổi và tính tốn giá trị ADC đọc được rồi tính tốn quy đổi ra dịng điện.
- Chương trình con “doc_dong” đầu tiên cài đặt kênh ADC cần sử dụng và khởi tạo các biến như adc=0, i=0. Tiếp tục cho chương trình đọc ADC về 10 lần liên tiếp bằng vòng lặp for (i=0;i<10;i++). Khi hồn thành xong vịng lặp for, ta lấy giá trị “adc” vừa đọc được chia cho 10 để tính ra giá trị trung bình, sau đó chia tiếp cho 2,046 để tính ra giá trị “adc”. Kiểm tra “adc” có lớn hơn 250 hay khơng? Nếu lớn hơn thì “adc = adc – 250”, ngược lại thì “adc = 250 – adc”. Sau đó áp dụng cơng thức tính dịng “dong = adc * 10 / 66” và kiểm tra giá trị của biến “dong” gửi qua ESP8266 để xử lý và hiển thị.
69
4.4.10 Lưu đổ giải thuật chương trình con 8 (doc_ap)
- Chương trình con “doc_ap” đọc giá trị adc, chuyển đổi và tính tốn giá trị ADC đọc được rồi tính tốn quy đổi ra điện áp.
- Chương trình con “doc_dong” đầu tiên cài đặt kênh ADC cần sử dụng và khởi tạo các biến như adc=0, i=0. Tiếp tục cho chương trình đọc ADC về 10 lần liên tiếp bằng vòng lặp for(i=0; i<10; i++). Khi hồn thành xong vịng lặp for,
doc_dong Set_adc_channel(9); Adc=0; i=0; i < 10 i ++; adc = adc + read_adc(); Delay_ms(1); adc = adc/10; adc = adc/2.048;
dong<10 dong<100 dong<1000
printf("r00%ld. ",dong); printf("r0%ld." ,dong); printf("r%ld.", dong); end Đúng Sai
Sai Sai Sai
Đúng Đúng Đúng adc>250 adc=adc-250; adc=250-adc; Sai dong=adc*10/66;
70
ta lấy giá trị “adc” vừa đọc được chia cho 10 để tính ra giá trị trung bình, sau đó chia tiếp cho 2,046 để tính ra giá trị “adc” và áp dụng cơng thức tính điện áp “ap = adc * 10 / 500”. Tiếp theo kiểm tra giá trị của biến “ap” gửi qua ESP8266 để xử lý và hiển thị.
4.4.11 Lưu đổ giải thuật chương trình con 9 (nhan)
- Chương trình con “nhan” kiểm tra và nhận dữ liệu từ chương trình Arduino, để điều khiển ĐC xoay khi ở chế độ điều khiển tay.
doc_ap Set_adc_channel(9); Adc=0; i=0; i < 10 i ++; adc = adc + read_adc(); Delay_ms(1); adc = adc/10; adc = adc/2.048; ap=adc*15*10/500;
ap<10 ap<100 ap<1000
printf("u00%ld .",ap); printf("u0%ld." ,ap); printf("u%ld.", ap); end Đúng Sai
Sai Sai Sai
Đúng Đúng
Đúng
71
- Chương trình con “nhan” đầu tiên cho phép đọc dữ liệu từ ESP8266 gửi qua và kiểm tra biến “data” nhận được kí tự nào:
• Nếu là kí tự ‘5’thì: cho “tt=1” (cho phép chạy tự động).
• Nếu là kí tự ‘7’thì: cho “tt=0” (cho phép điều chỉnh tay).
• Nếu là kí tự ‘1’thì: tiếp tục kiểm tra “tt=1” hay khơng? Nếu bằng 1 thì điều khiển động cơ (output_high(int1)). Nếu khơng thì kết thúc chương trình.
• Nếu là kí tự ‘2’thì: tiếp tục kiểm tra “tt=1” hay khơng? Nếu bằng 1 thì điều khiển động cơ (output_high(int2)). Nếu khơng thì kết thúc chương trình.
• Nếu là kí tự ‘3’thì: tiếp tục kiểm tra “tt=1” hay khơng? Nếu bằng 1 thì điều khiển động cơ (output_high(int3)). Nếu khơng thì kết thúc chương trình.
• Nếu là kí tự ‘4’thì: tiếp tục kiểm tra “tt=1” hay khơng? Nếu bằng 1 thì điều khiển động cơ (output_high(int4)). Nếu khơng thì kết thúc chương trình.
nhan
data = GETCH();
data=='5' data=='7' data=='1' data=='2' data=='3' data=='4' data=='6'
tt=1; tt=0; tt==1 tt==1 tt==1 tt==1 tt==1 output_low(in3); output_low(in4); output_high(in1); output_low(in2); output_low(in3); output_low(in4); output_high(in2); output_low(in1); output_high(in3); output_low(in4); output_low(in1); output_low(in2); output_low(in1); output_low(in2); output_high(in4); output_low(in3); Tắt hết động cơ end Sai Đúng Đúng Sai Sai Sai Sai Sai Sai Đúng Đúng Đúng Đúng
72
• Nếu là kí tự ‘6’thì: tiếp tục kiểm tra “tt=1” hay khơng? Nếu bằng 1 thì tắt hết động cơ. Nếu khơng thì kết thúc chương trình.
4.4.12 Các bước mơ phỏng trên RobotStudio
• Bước 1: Xuất File lắp ghép mơ hình hồn thiện từ Solidworks sang phần mềm RobotStudio.
• Bước 2: Dùng chế độ Edit Component, chế độ này giúp viết các chuyển động của mơ hình thơng qua các khối có trong mục Design của chế độ.
• Bước 3: Dùng khối jointMover và tiến hành kiểm tra các góc quay của động cơ khi di chuyển.
• Bước 4: Sau khi tính tốn và xác định góc quay như mong muốn ta sẽ tiến hành cài đặt góc quay cho 2 trục theo từng khối chuyển động.
Trong đó:
• Mechasism: chọn đối tượng mơ phỏng.
• J1: động cơ MG995 quay trục 1.
• J2: động cơ SPT 5525 LV -320 quay trục 2.
• Durtion: là thời gian thực hiện chuyển động xoay (s).
73
• Bước 5: Kết nối với với các khối với nhau qua địa chỉ: SimulationStarted – execute.
Trong đó
- Khối SimulationeEvents có vai trị bắt đầu.
- Các khối JoinMover có vai trị điều khiển vị trí, góc xoay của trục đã cài đặt.
• Bước 6: sau khi liên kết các khối chuyển động ta tiến hành mô phỏng bằng cách chạy chế độ Simulation.
74
CHƯƠNG 5: MƠ PHỎNG MƠ HÌNH
5.1 Giao điện điều khiển trên điện thoại (App blynk)
- Nội dung hiển thị: đo dòng, đo áp, chế độ của mơ hình và 4 nút điều hướng của mơ hình.
75
5.2 Phần khung bằng phần mềm Solidworks
5.3 Tiến hành mơ phỏng
5.3.1 Mơ phỏng chu trình quay tự động bằng phần mềm RobotStudio Hình 5. 2 Hồn thiện mơ hình trên Solidworks.
76
5.3.2 Cách thức hoạt động của chế độ tự động
- Sau khi cấp nguồn 5 V cho hệ thống và tắt V0 trên app Blynk. Lúc này mơ hình được cấp điện và mạch quang trở sẽ nhận tín hiệu ánh sáng từ 4 quang trở (Đông, Tây, Nam, Bắc). Module ACS712 đọc giá trị rồi chuyển đổi tín hiệu dịng và áp. Biến trở sẽ thực hiện nhiệm vụ nhận biết hướng xoay của tấm Pin NLMT. Sau đó tất cả các tín hiệu của cảm biến thu được sẽ truyền tín hiệu về cho khối xử lí thơng tin (Pic16F887) để điều khiển module L298N điều khiển động cơ MG995 và SPT 5525 LV -320 quay 2 trục theo hướng có ánh sáng mặt trời và hiện thị trên LCD và app Blynk thông qua Wifi của module ESP8266.
- Sau khi thu được năng lượng mặt trời sẽ chuyển về bộ sạc NLMT, hoàn tất quy trình hoặc trời về đêm hệ thống sẽ tự động so sánh 4 hướng khi khơng cịn ánh sáng tấm Pin sẽ quay về vị trí ban đầu.
77
5.3.3 Mô phỏng giả lập 2 chế độ điều khiển động cơ trên phần mềm Protus
5.3.4 Các thức hoạt động theo hai chế độ 5.3.4.1 Chế độ tự động 5.3.4.1 Chế độ tự động
- Sau khi ấn khởi động chọn Mode tự động, lúc này 4 cảm biến quang trở được thay bằng 4 nút nhấn (CB PHIA DONG, CB PHIA TAY, CB PHIA NAM, CB PHIA BAC) để cho VĐK 16F887A kích xung cho chạy hai động cơ DC.
• Ấn CB PHIA DONG động cơ sẽ quay về phía đơng.