Mục lục:

MÁY ĐO NĂNG LƯỢNG ARDUINO: 10 bước (có hình ảnh)
MÁY ĐO NĂNG LƯỢNG ARDUINO: 10 bước (có hình ảnh)

Video: MÁY ĐO NĂNG LƯỢNG ARDUINO: 10 bước (có hình ảnh)

Video: MÁY ĐO NĂNG LƯỢNG ARDUINO: 10 bước (có hình ảnh)
Video: Học lập trình Arduino KHÔNG HỀ KHÓ - Bộ KIT học tập Arduino Uno R3 BLK 2024, Tháng mười một
Anonim
Image
Image
MÁY ĐO NĂNG LƯỢNG ARDUINO
MÁY ĐO NĂNG LƯỢNG ARDUINO
MÁY ĐO NĂNG LƯỢNG ARDUINO
MÁY ĐO NĂNG LƯỢNG ARDUINO

[Phát video]

Tôi thuộc một ngôi làng của Odisha, Ấn Độ, nơi thường xuyên bị cắt điện. Nó cản trở cuộc sống của mỗi người. Trong những ngày thơ ấu của tôi, việc tiếp tục học sau khi hoàng hôn là một thử thách thực sự. Do vấn đề này, tôi đã thiết kế một hệ thống năng lượng mặt trời cho ngôi nhà của mình trên cơ sở thử nghiệm. Tôi đã sử dụng một bảng điều khiển năng lượng mặt trời 10 Watt, 6V để chiếu sáng một vài đèn LED sáng. Sau nhiều khó khăn, dự án đã thành công. Sau đó, tôi quyết định theo dõi điện áp, dòng điện, công suất và năng lượng liên quan đến hệ thống. Điều này đã mang lại ý tưởng thiết kế một MÁY ĐO NĂNG LƯỢNG. Tôi đã sử dụng ARDUINO làm trọng tâm của dự án này vì nó rất dễ viết mã trong IDE của nó và có rất nhiều thư viện mã nguồn mở có sẵn trên internet có thể được sử dụng theo Tôi đã thử nghiệm dự án cho hệ thống năng lượng mặt trời có định mức rất nhỏ (10Watt) nhưng điều này có thể dễ dàng sửa đổi để sử dụng cho hệ thống đánh giá cao hơn.

Bạn có thể tìm thấy tất cả các dự án của tôi trên:

Tính năng: Giám sát năng lượng bằng màn hình 1. LCD 2. qua internet (Tải lên Xively) 3. Đăng nhập dữ liệu trong thẻ SD

Bạn có thể xem BỘ ĐIỀU KHIỂN SẠC MẶT TRỜI ARDUINO MPPT có hướng dẫn mới của tôi (Phiên bản-3.0)

Bạn cũng có thể xem các tài liệu hướng dẫn khác của tôi trên

BỘ ĐIỀU KHIỂN SẠC MẶT TRỜI ARDUINO (Phiên bản 2.0)

BỘ ĐIỀU KHIỂN SẠC MẶT TRỜI ARDUINO (Phiên bản-1)

Bước 1: Các bộ phận bắt buộc:

Các bộ phận yêu cầu
Các bộ phận yêu cầu

1. ARDUINO UNO (Amazon) 2. ARDUINO ETHERNET SHIELD (Amazon)

3. LCD 16x2 CHARACTER (Amazon)

4. CẢM BIẾN HIỆN TẠI ACS 712 (Amazon) 4. ĐIỆN TRỞ (10k, 330ohm) (Amazon) 5. KHÁCH HÀNG 10K (Amazon) 6. DÂY JUMPER (Amazon) 7. CÁP ETHERNET (Amazon) 8. BREAD BOARD (Amazon)

Bước 2: Năng lượng và Năng lượng

Công suất: Công suất là tích số của điện áp (vôn) và dòng điện (Amp) P = VxI Đơn vị công suất là Watt hoặc KW Năng lượng: Năng lượng là tích của công suất (watt) và thời gian (Giờ) E = Pxt Đơn vị năng lượng là Watt Giờ hoặc Kilowatt Giờ (kWh) Từ công thức trên rõ ràng để đo Năng lượng chúng ta cần ba thông số 1. Điện áp 2. Dòng điện 3. Thời gian

Bước 3: Đo điện áp

Đo điện thế
Đo điện thế
Đo điện thế
Đo điện thế
Đo điện thế
Đo điện thế

Điện áp được đo bằng sự trợ giúp của mạch phân áp. Vì điện áp đầu vào của chân tương tự ARDUINO bị giới hạn ở 5V, tôi đã thiết kế bộ chia điện áp theo cách sao cho điện áp đầu ra từ nó phải nhỏ hơn 5V. Pin của tôi được sử dụng để lưu trữ Nguồn điện từ bảng điều khiển năng lượng mặt trời được đánh giá là 6v, 5,5Ah. Vì vậy, tôi phải giảm 6,5v này xuống điện áp thấp hơn 5V. Tôi đã sử dụng R1 = 10k và R2 = 10K. Giá trị của R1 và R2 có thể thấp hơn một giá trị nhưng vấn đề là khi điện trở thấp hơn thì dòng điện chạy qua nó sẽ cao hơn dẫn đến một lượng lớn công suất (P = I ^ 2R) bị tiêu tán dưới dạng nhiệt. Vì vậy có thể chọn giá trị điện trở khác nhau nhưng cần chú ý để giảm thiểu tổn thất công suất trên điện trở. Vout = R2 / (R1 + R2) * Vbat Vbat = 6,5 khi sạc đầy R1 = 10k và R2 = 10k Vout = 10 / (10 + 10) * 6,5 = 3,25v thấp hơn 5v và phù hợp với chân tương tự ARDUINO LƯU Ý I đã hiển thị pin 9 Volt trong bảng mạch có thanh chỉ là ví dụ để kết nối các dây điện. Nhưng loại pin thực tế mà tôi sử dụng là pin axit chì 6 Volt, 5,5Ah. a Vout = 3,25v và giá trị thấp hơn cho điện áp pin thấp hơn khác. AEDUINO ADC chuyển đổi tín hiệu Analog sang xấp xỉ kỹ thuật số tương ứng. Khi điện áp pin là 6,5v, tôi đã nhận 3,25v từ bộ chia điện áp và sample1 = 696 trong màn hình nối tiếp, trong đó sample1 là giá trị ADC tương ứng với 3,25v 3.25v tương đương 696 1 tương đương với 3.25 / 696 = 4.669mv Vout = (4.669 * sample1) / 1000 volt Điện áp thực tế của pin = (2 * Vout) voltARDUINO CODE: // lấy 150 mẫu từ bộ chia điện áp với khoảng thời gian 2 giây và sau đó tính trung bình dữ liệu mẫu được thu thập cho (int i = 0; i <150; i ++) {sample1 = sample1 + analogRead (A2); // đọc điện áp từ trễ mạch chia (2); } sample1 = sample1 / 150; điện áp = 4,669 * 2 * mẫu1 / 1000;

Bước 4: Đo lường hiện tại

Đo lường hiện tại
Đo lường hiện tại
Đo lường hiện tại
Đo lường hiện tại

Để đo dòng điện, tôi sử dụng cảm biến dòng điện hiệu ứng Hall ACS 712 (20 A). Có nhiều loại cảm biến ACS712 khác nhau trên thị trường, vì vậy hãy chọn tùy theo yêu cầu của bạn. Trong sơ đồ bảng mạch bánh mì, tôi đã hiển thị đèn LED dưới dạng tải nhưng tải thực tế khác nhau. một từ trường vuông góc với dòng điện. Để biết thêm về cảm biến Hall Effect bấm vào đây Bảng dữ liệu của cảm biến ACS 712 được tìm thấy tại đây Từ Bảng dữ liệu 1. ACS 712 đo 20Amps dương và âm, tương ứng với đầu ra tương tự 100mV / A 2. Không có dòng điện thử nghiệm qua điện áp đầu ra là VCC / 2 = 5v / 2 = 2,5 Hiệu chuẩn: Giá trị đọc tương tự tạo ra giá trị 0-1023, tương đương với 0v đến 5v Vì vậy, đọc tương tự 1 = (5/1024) V = 4,89mv Giá trị = (4,89 * Giá trị đọc tương tự) / 1000 V Nhưng theo bảng dữ liệu, độ lệch là 2,5V (Khi dòng điện bằng 0, bạn sẽ nhận được 2,5V từ đầu ra của cảm biến) Giá trị thực tế = (giá trị-2,5) V Dòng điện trong amp = giá trị thực * MÃ SỐ 10ARDUINO: // lấy 150 mẫu từ cảm biến với khoảng thời gian 2 giây và sau đó lấy trung bình dữ liệu mẫu được thu thập cho (int i = 0; i <150; i ++) {sample2 + = analogRead (A3); // đọc dòng điện từ cảm biến trễ (2); } sample2 = sample2 / 150; val = (5.0 * mẫu2) /1024.0; thực tế = val-2,5; // điện áp bù là 2,5v amps = realval * 10;

Bước 5: Đo lường thời gian

Để đo thời gian, không cần bất kỳ phần cứng bên ngoài nào, vì bản thân ARDUINO đã có sẵn bộ đếm thời gian. Hàm millis () trả về số mili giây kể từ khi bảng Arduino bắt đầu chạy chương trình hiện tại. // tính thời gian theo mili giây dài = milisec / 1000; // chuyển đổi mili giây thành giây

Bước 6: Cách ARDUINO Tính Công suất và Năng lượng

totamps = totamps + amps; // tính tổng amps avgamps = totamps / time; // amps trung bình amphr = (avgamps * time) / 3600; // amp-giờ watt = áp * amps; // power = điện áp * năng lượng hiện tại = (watt * time) / 3600; Watt-giây lại được chuyển đổi thành Watt-Hr bằng cách chia 1hr (3600 giây) // energy = (watt * time) / (1000 * 3600); để đọc bằng kWh

Bước 7: Đầu ra trực quan

Đầu ra trực quan
Đầu ra trực quan

Tất cả các kết quả có thể được hiển thị trong màn hình nối tiếp hoặc bằng cách sử dụng màn hình LCD. Tôi đã sử dụng màn hình LCD 16x2 ký tự để hiển thị tất cả kết quả thu được ở các bước trước. > Arduino + 5v 3. VO -> Chân Arduino GND + Điện trở hoặc Chiết áp 4. RS -> Chân Arduino 8 5. RW -> Chân Arduino 7 6. E -> Chân Arduino 6 7. D0 -> Arduino - Chưa kết nối 8. D1 -> Arduino - Chưa kết nối 9. D2 -> Arduino - Chưa kết nối 10. D3 -> Arduino - Chưa kết nối 11. D4 -> chân Arduino 5 12. D5 -> chân Arduino 4 13. D6 -> chân 3 của Arduino 14. D7 -> Chân Arduino 2 15. A -> Chân Arduino 13 + Điện trở (Nguồn đèn nền) 16. K -> Arduino GND (Đèn nền) MÃ ARDUINO: Đối với Màn hình nối tiếp:

Serial.print ("VOLTAGE:"); Serial.print (điện áp); Serial.println ("Volt"); Serial.print ("HIỆN TẠI:"); Serial.print (amps); Serial.println ("Amps"); Serial.print ("POWER:"); Serial.print (watt); Serial.println ("Watt"); Serial.print ("NĂNG LƯỢNG TIÊU THỤ:"); Serial.print (năng lượng); Serial.println ("Watt-Giờ"); Serial.println (""); // in các bộ tham số tiếp theo sau độ trễ dòng trống (2000); Đối với màn hình LCD: Đối với màn hình LCD, trước tiên bạn phải nhập thư viện "LiquidCrystal" trong mã. Để biết thêm về thư viện LequidCrystal, hãy nhấp vào đây Để có hướng dẫn về màn hình LCD, hãy nhấp vào đây Đoạn mã sau là định dạng để hiển thị trên màn hình LCD tất cả các phép tính về công suất và năng lượng #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // đặt chân 9 làm ngõ ra analogWrite (backLight, 150); // điều khiển cường độ đèn nền 0-254 lcd.begin (16, 2); // cột, hàng. kích thước của màn hình lcd.clear (); // xóa màn hình} void loop () {lcd.setCursor (16, 1); // đặt con trỏ bên ngoài số đếm hiển thị lcd.print (""); // in ký tự rỗng delay (600); //////////////////////////////////////////////////////// in công suất và năng lượng ra màn hình LCD / //////////////////////////////////////////////////// lcd.setCursor (1, 0); // đặt con trỏ ở cột thứ nhất và hàng thứ nhất lcd.print (watt); lcd.print ("W"); lcd.print (điện áp); lcd.print ("V"); lcd.setCursor (1, 1); // đặt con trỏ ở cột thứ nhất và hàng thứ hai lcd.print (energy); lcd.print ("WH"); lcd.print (amps); lcd.print ("A"); }

Bước 8: Tải dữ liệu lên Xively.com

Tải dữ liệu lên Xively.com
Tải dữ liệu lên Xively.com
Tải dữ liệu lên Xively.com
Tải dữ liệu lên Xively.com
Tải dữ liệu lên Xively.com
Tải dữ liệu lên Xively.com

Tham khảo các ảnh chụp màn hình ở trên để tốt hơn khi tải dữ liệu lên xively.com, thư viện sau để tải xuống HttpClient đầu tiên: nhấp vào đâyXếp: nhấp vào đâySPI: Nhập từ arduino IDE (sketch -> Nhập thư viện…..) Ethernet: Nhập từ arduino IDE ((sketch -> Nhập thư viện…..) Mở tài khoản với https://xively.com (trước đây là pachube.com và cosm.com) Đăng ký tài khoản nhà phát triển miễn phí tại

Chọn tên người dùng, mật khẩu, đặt địa chỉ và múi giờ của bạn, v.v. Bạn sẽ nhận được email xác nhận;

sau đó nhấp vào liên kết kích hoạt để kích hoạt tài khoản của bạn. Sau khi mở tài khoản thành công, bạn sẽ được chuyển hướng sang trang Thiết bị phát triển

  • Nhấp vào hộp + Thêm thiết bị
  • Đặt tên cho thiết bị và mô tả của bạn (ví dụ: THEO DÕI MẠNH MẼ) ·
  • Chọn dữ liệu riêng tư hoặc công khai (tôi chọn riêng tư) ·
  • Nhấp vào Thêm thiết bị

Sau khi thêm thiết bị, bạn được chuyển hướng đến một trang mới có nhiều thông tin quan trọng

  • ID sản phẩm, Bí mật sản phẩm, Số sê-ri, Mã kích hoạt ·
  • ID nguồn cấp dữ liệu, FeedURL, Điểm cuối API (ID nguồn cấp dữ liệu được sử dụng trong mã ARDUINO)
  • Thêm kênh (Chọn ENERGY và POWER, nhưng bạn có thể chọn tùy theo sự lựa chọn của mình) Cung cấp đơn vị và ký hiệu cho tham số ·
  • Thêm vị trí của bạn ·
  • Khóa API (được sử dụng trong mã ARDUINO, tránh chia sẻ số này) ·
  • Kích hoạt (ping trang aweb khi một sự kiện xảy ra, như khi mức tiêu thụ năng lượng vượt quá một ngưỡng nhất định)

Bước 9: Mã Xively và ARDUINO

Ở đây tôi đã đính kèm mã hoàn chỉnh (phiên bản beta) cho đồng hồ năng lượng không bao gồm ghi dữ liệu thẻ SD được đính kèm riêng trong bước tiếp theo. / ** Tải dữ liệu theo dõi năng lượng lên xively ** / #include #include #include #include #define API_KEY "xxxxxxxx" // Nhập khóa API Xively của bạn #define FEED_ID xxxxxxxxx // Nhập ID nguồn cấp dữ liệu Xively của bạn // Địa chỉ MAC cho Byte lá chắn Ethernet mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Chân tương tự mà chúng tôi đang theo dõi (0 và 1 được sử dụng bởi lá chắn Ethernet) int sensorPin = 2; unsigned long lastConnectionTime = 0; // lần trước chúng ta đã kết nối với Cosm const unsigned long connectionInterval = 15000; // độ trễ giữa việc kết nối với Cosm tính bằng mili giây // Khởi tạo thư viện Cosm // Xác định chuỗi cho dòng dữ liệu ID char sensorId = "POWER"; char sensorId2 = "NĂNG LƯỢNG"; Dòng dữ liệu XivelyDatastream = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Gói luồng dữ liệu vào nguồn cấp dữ liệu XivelyFeed (FEED_ID, luồng dữ liệu, 2 / * số luồng dữ liệu * /); Máy khách EthernetClient; XivelyClient xivelyclient (khách hàng); void setup () {Serial.begin (9600); Serial.println ("Đang khởi tạo mạng"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Lỗi khi lấy địa chỉ IP qua DHCP, hãy thử lại…"); chậm trễ (15000); } Serial.println ("Mạng được khởi tạo"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectInterval) {sendData (); // gửi dữ liệu đến xively getData (); // đọc lại dòng dữ liệu từ xively lastConnectionTime = millis (); // cập nhật thời gian kết nối nên chúng ta đợi trước khi kết nối lại}} void sendData () {int sensor1 = watt; int sensor2 = năng lượng; dòng dữ liệu [0].setFloat (sensor1); // dòng dữ liệu giá trị nguồn [1].setFloat (sensor2); // giá trị năng lượng Serial.print ("Đọc năng lượng"); Serial.println (datastreams [0].getFloat ()); Serial.print ("Đọc năng lượng"); Serial.println (datastreams [1].getFloat ()); Serial.println ("Đang tải lên Xively"); int ret = xivelyclient.put (nguồn cấp dữ liệu, API_KEY); Serial.print ("Mã trả về PUT:"); Serial.println (ret); Serial.println (); } // lấy giá trị của dòng dữ liệu từ xively, in ra giá trị mà chúng ta nhận được void getData () {Serial.println ("Đọc dữ liệu từ Xively"); int ret = xivelyclient.get (nguồn cấp dữ liệu, API_KEY); Serial.print ("NHẬN mã trả về:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datastream is:"); Serial.println (nguồn cấp dữ liệu [0]); Serial.print ("Giá trị lũy thừa là:"); Serial.println (nguồn cấp dữ liệu [0].getFloat ()); Serial.print ("Datastream la:"); Serial.println (nguồn cấp dữ liệu [1]); Serial.print ("Giá trị năng lượng là:"); Serial.println (nguồn cấp dữ liệu [1].getFloat ()); } Serial.println ();

Bước 10: Đăng nhập dữ liệu trong thẻ SD

Để lưu trữ dữ liệu trong thẻ SD, bạn phải nhập thư viện SD Để xem hướng dẫn, hãy nhấp vào đây Để biết thêm về thư viện SD, hãy nhấp vào đây Mã để lưu trữ dữ liệu vào thẻ SD được viết riêng vì tôi không có đủ bộ nhớ trong ARDUINO UNO của mình sau viết mã cho màn hình LCD và tải dữ liệu lên xively.com. Nhưng tôi đang cố gắng cải thiện mã phiên bản beta để một mã duy nhất có thể chứa tất cả các tính năng (màn hình LCD, tải lên dữ liệu Xively và lưu trữ dữ liệu trong thẻ SD). Mã để ghi dữ liệu được đính kèm dưới đây. mã tốt hơn bằng cách sửa đổi mã của tôi, xin vui lòng chia sẻ với tôi. Đây là hướng dẫn kỹ thuật đầu tiên của tôi, Nếu ai phát hiện ra bất kỳ sai sót nào trong đó, vui lòng góp ý.. để tôi có thể cải thiện bản thân. hoặc nhắn tin cho tôi, Vì vậy, dự án sẽ mạnh mẽ hơn. Tôi nghĩ nó sẽ hữu ích cho những người khác cũng như cho tôi.

Cuộc thi mạch 123D
Cuộc thi mạch 123D
Cuộc thi mạch 123D
Cuộc thi mạch 123D

Giải Ba cuộc thi Mạch 123D

Đề xuất: