QUY TRÌNH THIẾT KẾ

Một phần của tài liệu Mô hình điều khiển góc nghiêng pin mặt trời (Trang 65)

4.1 Thiết kế khung trên phẩn mềm Solidworks

- Sử dụng các cơng cụ đo, vẽ bo góc để thiết kế sản phẩm 3D theo từng “Part”, sau đó chuyển sang Assembly để tiến hành lắp ghép sản phẩm hồn chỉnh.

4.1.1 Phần đế mơ hình (Part 1)

Hình 4. 1 Các chế độ của Solidworks.

49

4.1.2 Phần thân mơ hình (Part 2)

4.1.3 Phần đầu (Part 3) mơ hình

4.1.4 Phần lắp ghép

Sau khi vẽ xong các phẩn ta tiến hành lắp ghép:

Hình 4. 3 Phần thân mơ hình.

50

4.2 Thiết kế mạch của mơ hình

4.2.1 Sơ đồ khối tổng quát của hệ thống

4.2.2 Chức năng của từng khối

Hình 4. 5 Mơ hình hồn chỉnh.

51

Khối nguồn: Cung cấp điện áp thích hợp cho từng khối để đảm bảo các khối

hoạt động ổn định (5VDC).

Khối XLTT (Pic 16F887): nhận dữ liệu từ khối CB hướng sáng, khối CB

dòng và áp, khối CB hướng quay, Esp8266 và xử lý những tín hiệu đó bằng cách:

▪ Truyền tín hiệu cho khối công suất để điều khiển ĐC.

▪ Truyền tín hiệu cho khối ESP8266 để hiển thị giá trị dịng điện, điện áp lên App Blynk.

Khối hiển thị (LCD 16x2): nhận tín hiệu từ khối XLTT và hiển thị giá trị

dịng điện và điện áp.

Khối cảm biến dòng và áp (ACS712): Đọc giá trị dòng điện đưa về khối

XLTT.

Khối cơng suất (L298N): nhận tín hiệu từ khối XLTT và điều khiển 2 ĐC

Servo.

Khối cảm biến hướng quay (biến trở): nhận biết hướng quay của tấm Pin

NLMT và đưa về khối XLTT.

Khối cảm biến hướng sáng (quang trở): nhận biết ánh sáng mặt trời theo 4

hướng: Đông, Tây, Nam, Bắc và đưa về khối XLTT.

ĐC Servo: dùng 2 động cơ servo MG 995 và SPT5525LV-320 để điều khiển

2 trục.

Bộ sạc: bộ sạc NLMT Dual USB Solar Charge Controller LCD 10A.

Pin NLMT: sử dụng pin NLMT loại 20W.

4.3 Mạch điều khiển của từng khối mô phỏng trên phần mềm Protus 4.3.1 Khối xử lí trung tâm 4.3.1 Khối xử lí trung tâm

52

- Khối xử lý trung tâm (PIC16F887) nhận dữ liệu từ khối CB hướng sáng, khối CB dòng và áp, khối CB hướng quay, ESP8266 và xử lý những tín hiệu đó bằng cách:

• Truyền tín hiệu cho khối cơng suất để điều khiển ĐC.

• Truyền tín hiệu cho khối ESP8266 để hiển thị giá trị dòng điện, điện áp lên App Blynk và ngược lại.

53

4.3.2 Khối cảm biến ánh sáng:

- Khối Cảm biến ánh sáng dùng quang trở để nhận biết cường độ ánh sáng chiếu vào tấm pin. Khối CB này dùng bốn quang trở (đông, tây, nam, bắc) để so sánh các quang trở với nhau để trả giá trị về khối XLTT.

4.3.3 Khối CB dòng và áp:

- Khối Cảm biến dòng và áp, đối với dịng sẽ dùng module ASC712 và áp thì sẽ chiết áp từ điện trở.

Hình 4. 8 Khối cảm biến ánh sáng.

54

- Về phần app do dòng từ tấm pin năng lượng trời 15V, vì thế sẽ làm cháy hoặc hỏng VĐK chính vì thể sử dụng phương pháp cầu phần áp để làm cho nguồn giảm còn 5V: Vo = 𝑉𝑐𝑐 . 𝑅2 𝑅1+𝑅2  5 = 15 . 𝑅2 𝑅1+𝑅2  R1= 2R2 Từ đó chọn R1 = 30 Ω, R2 = 15 Ω 4.3.4 Khối ESP8266

- Khối ESP8266 dùng giám sát hoạt động của mơ hình qua một App điện thoại và hiển thị LCD dòng và áp.

- Kết nối với Pic 16F887 bằng 2 cổng truyển thông (tx, rx) tương ứng với chân 25 và chân 26 của VĐK.

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

Một phần của tài liệu Mô hình điều khiển góc nghiêng pin mặt trời (Trang 65)

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

(119 trang)