1. Trang chủ
  2. » Tất cả

(Đồ án hcmute) giám sát hệ thống pin mặt trời qua ứng dụng điện thoại, vệ sinh pin mặt trời và nâng cao hiệu suất pin mặt trời

147 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 147
Dung lượng 8,95 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH ĐIỆN - ĐIỆN TỬ GIÁM SÁT HỆ THỐNG PIN MẶT TRỜI QUA ỨNG DỤNG ĐIỆN THOẠI, VỆ SINH PIN MẶT TRỜI VÀ NÂNG CAO HIỆU SUẤT PIN MẶT TRỜI GVHD:NGUYỄN NHÂN BỔN SVTH : NGUYỄN ĐĂNG MINH MSSV :15142069 SVTH:NGÔ MINH TUẤN MSSV :15142121 SKL 0 Tp Hồ Chí Minh, tháng 01/2020 an TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP ĐỀ TÀI: GIÁM SÁT HỆ THỐNG PIN MẶT TRỜI QUA ỨNG DỤNG ĐIỆN THOẠI, VỆ SINH PIN MẶT TRỜI VÀ NÂNG CAO HIỆU SUẤT PIN MẶT TRỜI SVTH : NGUYỄN ĐĂNG MINH NGÔ MINH TUẤN MSSV :15142069 MSSV :15142121 Khóa : 2015 - 2019 Ngành : ĐIỆN – ĐIỆN TỬ GVHD :TS NGUYỄN NHÂN BỔN Tp.Hồ Chí Minh, tháng năm 2020 an an an MỤC LỤC CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1.1.Đặt vấn đề 1.2.Mục đích đề tài 10 1.3.Nhiệm vụ phạm vi nghiên cứu 10 1.4.Phương pháp nghiên cứu 11 1.5.Ý nghĩa thực tiễn 12 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 13 2.1.Giới thiệu lượng mặt trời 13 2.2.Giới thiệu pin lượng mặt trời 14 2.2.1.Tổng quan: 14 2.2.2.Cấu tạo .15 2.2.3.Phân loại: 19 2.2.4.Nguyên lý hoạt động 21 2.2.5.Đặc tính làm việc pin mặt trời 22 2.2.6.Các phương pháp ghép pin mặt trời 26 2.2.7.Hiện tượng điểm nóng 29 2.3.Hệ thống điện lượng mặt trời 30 2.4 Bộ lưu điện (Ắc quy) sạc bảo vệ Ắc quy .32 2.4.1 Khái niệm ắc quy .32 2.4.2 Phân loại cấu tạo Ắc quy 33 2.4.3 Bộ sạc bảo vệ Ắc quy 34 2.5.Bộ biển đổi DC/DC 34 2.5.1.Mạch Buck 36 2.5.2.Mạch Boost 38 2.5.3.Mạch Buck-Boost .39 2.6.Bộ biến đổi DC/AC 41 2.7 Bộ dị tìm cơng suất cực đại .42 2.7.1 Giới thiệu MPPT (Maximum Power Point Tracker) 42 2.7.2.Nguyên lý dung hợp tải 45 Trang an 2.7.3.Thuật toán xác định điểm làm việc có cơng suất lớn MPPT 46 2.8.Các phương pháp phổ biến dị tìm điểm công suất cực đại pin mặt trời .48 2.8.1.Phương pháp điện áp số 48 2.8.2.Phương pháp P&O (Perturb and Observe) .49 2.8.3.Phương pháp INC (Incremental Conductance) 50 2.9.Phướng pháp điều hướng xoay pin mặt trời đến hướng ánh sáng cực đại 52 CHƯƠNG 3: THIẾT KẾ PHẦN CỨNG 55 3.1.Hệ thống điều hướng pin mặt trời 55 3.1.1 Yêu cầu hệ thống 55 3.1.2.Bộ khung nâng đỡ panel mặt trời .55 3.1.3.Mạch xoay động theo hướng sáng .57 3.1.4 Động cấu truyền động 58 3.2.Pin Mặt trời 60 3.3.Hệ thống dị tìm điểm cơng suất cực đại 61 3.4.Mạch điều khiển Arduino 65 3.5 Module ESP8266 WIFI 66 3.6 Mạch cấp nguồn cho Arduino 67 3.7 Mạch relay .68 3.8 Cảm biến DHT11 68 3.9 Mạch kích 69 3.10.Cảm biến dòng ACS712 70 Chương 4: Thiết kế phần mềm 72 4.1 Lưu đồ giải thuật 73 4.1.1 Lưu đồ giải thuật P&O .73 4.1.2 Lưu đồ giải thuật Node MCU 75 4.1.3 Lưu đồ giải thuật điều hướng pin mặt trời 76 4.2.Thiết kế App Mobile giám sát số liệu từ pin 78 4.2.1.Giới thiệu Android Studio 78 4.2.2.Giao diện App 79 4.2.3.Giới thiệu database: Firebase 80 Trang an 4.2.4.Thiết lập Firebase .80 4.2.5.Kết nối App với Firebase 82 CHƯƠNG 5: Thiết kế máy vệ sinh pin lượng mặt trời 87 5.1: Lí yêu cầu thiết kế 87 5.1.1 - Lý thiết kế 87 5.1.2 – Yêu cầu thiết kế 87 5.2: Thiết kế máy vệ sinh pin lượng mặt trời 88 5.2.1 Thiết kế phần cứng 88 5.2.2 Thiết kế phần điều khiển 95 Chương 6: Kết luận hướng phát triển 98 6.1.Kết .98 6.2.Hướng phát triển 98 6.3.Kết luận 99 TÀI LIỆU THAM KHẢO 100 PHỤ LỤC 101 Trang an MỤC LỤC HÌNH ẢNH Hình 1.1.Cánh đồng pin mặt trời tỉnh Ninh Thuận Hình 2.1.Cell pin lượng mặt trời 15 Hình 2.2.Cấu tạo bên ngồi pin mặt trời 15 Hình 2.3.Cấu tạo cell pin mặt trời 16 Hình 2.4.Cấu trúc tinh thể dạng pin mặt trời 17 Hình 2.5.Pin mặt trời DSC 19 Hình 2.6.Pin mặt trời dạng keo nước 20 Hình 2.7.Nguyên lý hoạt động pin mặt trời 21 Hình 2.8.Nguyên lý hoạt động pin mặt trời 22 Hình 2.9.Sơ đồ tương đương pin mặt trời 23 Hình 2.10.Đường cong đặc trưng V - I pin mặt trời phụ thuộc vào cường độ xạ Mặt trời 24 Hình 2.11.Đường cong đặc trưng P - V pin mặt trời 25 phụ thuộc vào cường độ xạ Mặt trời 25 Hình 2.12.Đường cong đặc tính V - I pin mặt trời phụ thuộc vào 25 nhiệt độ pin 25 Hình 2.13.Đường đặc tính tải đặc tính pin mặt trời 26 Hình 2.14 Ghép nối tiếp module Pin Mặt Trời (a) đường đặc trưng VA module hệ (b) 27 Hình 2.15.Ghép song song module pin Mặt Trời (a) đường đặc trưng VA module hệ (b) 28 Hình 2.16.Diode nối song song với modun để bảo vệ modun dàn pin mặt trời 29 Hình 2.17.Hệ Pin lượng mặt trời làm việc độc lập 30 Hình 2.18.Hệ Pin lượng mặt trời làm việc nối lưới 31 Hình 2.19.Hệ thống ắc quy dùng lưới điện pin mặt trời 33 Hình 2.20.Sơ đồ biến đổi DC/DC 35 Hình 2.21.Sơ đồ nguyên lý giảm áp Buck 36 Hình 2.22.Dạng sóng điện áp dòng điện mạch Buck 36 Hình 2.23.Sơ đồ nguyên lý mạch Boost 38 Trang an Hình 2.24.Dạng sóng dịng điện mạch Boost 38 Hình 2.25.Sơ đồ nguyên lý mạch Buck-Boost 39 Hình 2.26.Bộ biến đổi DC/AC pha dạng nửa cầu 41 Hình 2.27.Bộ biến đổi DC/AC pha dạng hình cầu 41 Hình 2.28.Sơ đồ cấu trúc nghịch lưu kiểu Half – bridge 42 Hình 2.29.Sơ đồ khối hệ thống MPPT tiêu biểu 43 Hình 2.30.Tấm pin mặt trời mắc trực tiếp với tải trở có giá trị thay đổi 44 Hình 2.31.Đường đặc tính làm việc pin với tải trở 44 Hình 2.32.Tổng trở vào Rin điều chỉnh D 46 Hình 2.33.Đặc tính I-V với xạ thay đổi quỹ đạo điểm 46 công suất cực đại (25oC) 46 Hình 2.34.Đặc tính I-V với xạ thay đổi quỹ đạo điểm 47 công suất cực đại (50oC) 47 Hình 2.35 Đường đặc tính P-V giải thuật P&O 49 Hình 2.36 Lưu đồ giải thuật P&O điều khiển thông qua điện áp tham chiếu Vref 50 Hình 2.37.Độ dốc (dP/dV) PV 51 Hình 2.38.Giải thuật INC 52 Hình 2.39.Hình ảnh thực tế quang trở 53 Hình 2.40.Nguyên lý hoạt động mạch hướng sáng pin mặt trời 54 Hình 2.41.Sơ đồ nguyên lý kết nối quang trở với Adruino 54 Hình 3.1.Mơ hình thực tế khung đỡ pin 57 Hình 3.2.Arduino Uno R3 57 Hình 3.4.Mạch hướng sáng 58 Hình 3.5.Động giảm tốc DC 59 Hình 3.6.Trục bánh để giảm tốc, tăng moment 60 Hình 3.7.Tấm pin mặt trời MONO MSP-50W 60 Bảng 3.1.Thông số kỹ thuật pin mặt trời 61 Hình 3.8.Nguyên lý mạch sạc 62 Trang an Hình 3.9.Mơ hình 3D mạch sạc 62 Hình 3.10.Mạch sạc 63 Hình 3.11.Nguyên lý điều khiển Arduino 65 Hình 3.12.Mạch 3D điều khiển Arduino 65 Hình 3.13.ESP8266 wifi dùng để truyền liệu 66 Hình 3.14.Mạch giảm áp LM2596HV 67 Hình 3.15.Mạch relay cấp nguồn cho ắc quy 68 Hình 3.16.Cảm biến DHT11 68 Hình 3.17.Mạch kích dùng TLP 250 69 Hình 3.18.Ngun lý kích dùng TLP 250 70 Hình 3.19.Cảm biến dòng ACS712 70 Hình 4.1.Lưu đồ giải thuât P&O (MPPT) 73 Hình 4.2 Mơ giải thuật P&O phần mềm PSIM 73 Hình 4.3.Lưu đồ giải thuật Node MCU 75 Hình 4.4.Lưu đồ giải thuật điều hướng pin mặt trời 76 Hình 4.5.Giao diện làm việc 80 Hình 4.6.Giao diện App 78 Hình 5.1 Phần khung máy rửa pin………………………………………….87 Hình 5.2 Các bulley dây đai dùng để di chuyển cho máy vệ sinh….…….87 Hình 5.3 Bulley truyền động để di chuyển có tỉ lệ 1:1 (40 răng)………… 88 Hình 5.4 Bulley truyền động từ động trục để di chuyển có tỉ lệ 3:2 89 Hình 5.5 Trục quay dùng để làm pin…………………………….… 89 Hình 5.6 Van điện từ θ21, điện áp làm việc 12VDC……………………….… 90 Hình 5.7 Gối đỡ vịng bi trục ngang 8mm………………………………….……91 Hình 5.8 Động DC giảm tốc JGB37-555 cho trục quay vệ sinh…….… 92 Hình 5.9 Bộ điều khiển RF 315Mhz 12VDC kênh……………………………93 Hình 5.10 Module Mạch Điều Khiển Tốc Độ Đảo Chiều Động Cơ 12V…94 Hình 5.11 Máy vệ sinh sử dụng acquy 12V…………………………………….95 Hình 5.12 Máy vệ sinh sau hoàn thiện ………………………………… 95 Trang an Code MainActivity.java: package com.example.giamsatpv1; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.CombinedChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.components.AxisBase; import com.github.mikephil.charting.components.XAxis; import com.github.mikephil.charting.components.YAxis; import com.github.mikephil.charting.data.CombinedData; import com.github.mikephil.charting.data.DataSet; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; import com.github.mikephil.charting.formatter.IAxisValueFormatter; import com.github.mikephil.charting.highlight.Highlight; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; import com.github.mikephil.charting.listener.OnChartValueSelectedListener; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; Trang 129 an public class MainActivity extends AppCompatActivity implements OnChartValueSelectedListener, View.OnClickListener { private CombinedChart mChart; private BarChart barChart; private LineChart linechart; private ArrayList list = new ArrayList(); int count = 0; static int countHalfHour = 0; int countChart = 0; float ptong = 0; float pthang = 0; float p2 = 0; float p3 = 0; float p4 = 0; float p5 = 0; float p6 = 0; float p7 = 0; float pcn = 0; int tagweek = 0; int tagmonth = 0; float ptongthang1 = 0; float ptongthang2 = 0; float ptongthang3 = 0; float ptongthang4 = 0; float ptongthang5 = 0; float ptongthang6 = 0; float ptongthang7 = 0; float ptongthang8 = 0; float ptongthang9 = 0; float ptongthang10 = 0; float ptongthang11 = 0; float ptongthang12 = 0; float ptongcanam = 0; private static final String TAG = "MainActivity"; static List dataChart = new ArrayList(); SimpleDateFormat HourFormat = new SimpleDateFormat("HH"); SimpleDateFormat MinuteFormat = new SimpleDateFormat("mm"); SimpleDateFormat SecondFormat = new SimpleDateFormat("ss"); String hour = HourFormat.format(new Date()); String minute = MinuteFormat.format(new Date()); String second = SecondFormat.format(new Date()); Trang 130 an float numberOfHour = Float.parseFloat(hour); int intOfHour = Integer.parseInt(hour); int numberOfHourChangeOutside = Integer.parseInt(hour); int numberOfMinuteChangeOutside = Integer.parseInt(minute); int numberOfSecondChangeOutside = Integer.parseInt(second); float poutValue = 0; int time = 23; int time2 = 24; int time3 = 25; int time4 = 26; int time5 = 27; static int indexOfArray = 0; Calendar cld = Calendar.getInstance(); int sumoutside = numberOfHourChangeOutside + numberOfMinuteChangeOutside + numberOfSecondChangeOutside; Button tanggio; Button tangphut; Button phutkhac0; TextView apvao; TextView apra; TextView dongvao; TextView dongra; TextView Pin; TextView Pout; TextView ngay; TextView tuan; TextView t2; TextView t3; TextView t4; TextView t5; TextView t6; TextView t7; TextView cn; TextView pt2; TextView pt3; TextView pt4; TextView pt5; TextView pt6; TextView pt7; Trang 131 an TextView ptcn; TextView ptongtuan; TextView thang1; TextView thang2; TextView thang3; TextView thang4; TextView thang5; TextView thang6; TextView thang7; TextView thang8; TextView thang9; TextView thang10; TextView thang11; TextView thang12; TextView tongnam; DatabaseReference Thongso; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // thông số apvao = findViewById(R.id.TextView06); apra = findViewById(R.id.TextView07); dongvao = findViewById(R.id.TextView09); dongra = findViewById(R.id.TextView010); Pin = findViewById(R.id.TextView012); Pout = findViewById(R.id.TextView013); = findViewById(R.id.TextViewngay); tuan = findViewById(R.id.TextViewthongke); // bảng thống kê t2 = findViewById(R.id.TextView18); t3 = findViewById(R.id.TextView28); t4 = findViewById(R.id.TextView38); t5 = findViewById(R.id.TextView58); t6 = findViewById(R.id.TextView68); t7 = findViewById(R.id.TextView78); cn = findViewById(R.id.TextView88); pt2 = findViewById(R.id.TextView19); pt3 = findViewById(R.id.TextView29); pt4 = findViewById(R.id.TextView39); pt5 = findViewById(R.id.TextView59); pt6 = findViewById(R.id.TextView69); pt7 = findViewById(R.id.TextView79); Trang 132 an ptcn = findViewById(R.id.TextView89); ptongtuan = findViewById(R.id.TextView99); thang1 = findViewById(R.id.pthang1); thang2 = findViewById(R.id.pthang2); thang3 = findViewById(R.id.pthang3); thang4 = findViewById(R.id.pthang4); thang5 = findViewById(R.id.pthang5); thang6 = findViewById(R.id.pthang6); thang7 = findViewById(R.id.pthang7); thang8 = findViewById(R.id.pthang8); thang9 = findViewById(R.id.pthang9); thang10 = findViewById(R.id.pthang10); thang11 = findViewById(R.id.pthang11); thang12 = findViewById(R.id.pthang12); tongnam = findViewById(R.id.pnam); // khởi tạo mảng for (int index = 0; index < 48; index++) { dataChart.add(Float.parseFloat("0")); } // update thời gian thực cho biểu đồ if (numberOfHourChangeOutside >= && numberOfMinuteChangeOutside > 30) { indexOfArray = (intOfHour - 6) * + 1; countHalfHour = indexOfArray; } else if (numberOfHourChangeOutside >= && numberOfMinuteChangeOutside < 30) { indexOfArray = (intOfHour - 6) * 2; countHalfHour = indexOfArray; } // firebase final FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getReference("message"); Thongso = FirebaseDatabase.getInstance().getReference(); Trang 133 an Thongso.child("data").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { count++; float dataTrungBinhPout = 0; //Ngày tháng năm hệ thống SimpleDateFormat ngaytrongtuan = new SimpleDateFormat("EEEE"); SimpleDateFormat tuantrongthang = new SimpleDateFormat("ww"); SimpleDateFormat ngaythongke = new SimpleDateFormat("dd"); SimpleDateFormat thangthongke = new SimpleDateFormat("MM"); SimpleDateFormat namthongke = new SimpleDateFormat("yyyy"); String curentdweek = tuantrongthang.format(new Date()); String Dow = ngaytrongtuan.format(new Date()); String ngaythongkehientai = ngaythongke.format(new Date()); String thangthongkehientai = thangthongke.format(new Date()); String namthongkehientai = namthongke.format(new Date()); int ngaytk = Integer.parseInt(ngaythongkehientai); int thangtk = Integer.parseInt(thangthongkehientai); int namtk = Integer.parseInt(namthongkehientai); int day = cld.get(Calendar.DAY_OF_WEEK); int month = cld.get(Calendar.MONTH); int tk = ngaytk; //Giờ phút giây hệ thống SimpleDateFormat HourFormat = new SimpleDateFormat("HH"); SimpleDateFormat MinuteFormat = new SimpleDateFormat("mm"); SimpleDateFormat SecondFormat = new SimpleDateFormat("ss"); String hourOfChange = HourFormat.format(new Date()); String minuteOfChange = MinuteFormat.format(new Date()); String secondOfChange = SecondFormat.format(new Date()); int numberOfHourChange = Integer.parseInt(hourOfChange); int numberOfMinuteChange = Integer.parseInt(minuteOfChange); int numberOfSecondChange = Integer.parseInt(secondOfChange); String hourreset = HourFormat.format(new Date()); String minutereset = MinuteFormat.format(new Date()); String secondreset = SecondFormat.format(new Date()); int numberOfhourreset = Integer.parseInt(hourreset); int numberOfminutereset = Integer.parseInt(minutereset); int numberOfsecondCreset = Integer.parseInt(secondreset); int sumreset = numberOfhourreset + numberOfminutereset + numberOfsecondCreset; Trang 134 an if (numberOfhourreset == 00 && numberOfminutereset == 00 && numberOfsecondCreset = && numberOfMinuteChange == 00 && numberOfSecondChange = && numberOfMinuteChange == 30 && numberOfSecondChange = 59) { p2 = 0; p3 = 0; p4 = 0; p5 = 0; p6 = 0; p7 = 0; pcn = 0; } } //kiểm tra tháng if (month == cld.JANUARY) { ptongthang1 = pthang; Trang 136 an tagmonth = 1; } if (month == cld.FEBRUARY) { ptongthang2 = pthang; tagmonth = 2; } if (month == cld.MARCH) { ptongthang3 = pthang; tagmonth = 3; } if (month == cld.APRIL) { ptongthang4 = pthang; tagmonth = 4; } if (month == cld.MAY) { ptongthang5 = pthang; tagmonth = 5; } if (month == cld.JUNE) { ptongthang6 = pthang; tagmonth = 6; } if (month == cld.JULY) { ptongthang7 = pthang; tagmonth = 7; } if (month == cld.AUGUST) { ptongthang8 = pthang; tagmonth = 8; } if (month == cld.SEPTEMBER) { ptongthang9 = pthang; tagmonth = 9; } if (month == cld.OCTOBER) { ptongthang10 = pthang; tagmonth = 10; } if (month == cld.NOVEMBER) { ptongthang11 = pthang; tagmonth = 11; } if (month == cld.DECEMBER) { Trang 137 an ptongthang12 = pthang; tagmonth = 12; } if (tagmonth == 12) { if (ngaytk == 31) { if (numberOfhourreset == 23 && numberOfminutereset == 59 && numberOfsecondCreset >= 58) { ptongthang1 = 0; ptongthang2 = 0; ptongthang3 = 0; ptongthang4 = 0; ptongthang5 = 0; ptongthang6 = 0; ptongthang7 = 0; ptongthang8 = 0; ptongthang9 = 0; ptongthang10 = 0; ptongthang11 = 0; ptongthang12 = 0; ptongcanam = 0; } } } //hiển thị thống kê P pt2.setText(p2 + ""); pt3.setText(p3 + ""); pt4.setText(p4 + ""); pt5.setText(p5 + ""); pt6.setText(p6 + ""); pt7.setText(p7 + ""); ptcn.setText(pcn + ""); ptongtuan.setText(p2 + p3 + p4 + p5 + p6 + p7 + pcn + ""); //hiển thị thống kê tháng thang1.setText(ptongthang1 + ""); thang2.setText(ptongthang2 + ""); thang3.setText(ptongthang3 + ""); thang4.setText(ptongthang4 + ""); thang5.setText(ptongthang5 + ""); thang6.setText(ptongthang6 + ""); thang7.setText(ptongthang7 + ""); thang8.setText(ptongthang8 + ""); thang9.setText(ptongthang9 + ""); thang10.setText(ptongthang10 + ""); thang11.setText(ptongthang11 + ""); thang12.setText(ptongthang12 + ""); tongnam.setText(ptongthang1 + ptongthang2 + ptongthang3 + ptongthang4 + Trang 138 an ptongthang5 + ptongthang6 + ptongthang7 + ptongthang8 + ptongthang9 + ptongthang10 + ptongthang11 + ptongthang12 + ""); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); onRenderChart(); } //biểu đồ ngày public void onRenderChart() { mChart = findViewById(R.id.combinedChart); mChart.getDescription().setEnabled(false); mChart.setBackgroundColor(Color.WHITE); mChart.setDrawGridBackground(false); mChart.setDrawBarShadow(false); mChart.setHighlightFullBarEnabled(false); mChart.setOnChartValueSelectedListener(this); YAxis rightAxis = mChart.getAxisRight(); rightAxis.setDrawGridLines(false); rightAxis.setAxisMinimum(0f); YAxis leftAxis = mChart.getAxisLeft(); leftAxis.setDrawGridLines(false); leftAxis.setAxisMinimum(0f); final List xLabel = new ArrayList(); xLabel.add("6h"); xLabel.add("6h30"); xLabel.add("7h"); xLabel.add("7h30"); xLabel.add("8h"); xLabel.add("8h30"); xLabel.add("9h"); xLabel.add("9h30"); xLabel.add("10h"); xLabel.add("10h30"); xLabel.add("11h"); xLabel.add("11h30"); xLabel.add("12h"); xLabel.add("12h30"); xLabel.add("13h"); xLabel.add("13h30"); Trang 139 an xLabel.add("14h"); xLabel.add("14h30"); xLabel.add("15h"); xLabel.add("15h30"); xLabel.add("16h"); xLabel.add("16h30"); xLabel.add("17h"); xLabel.add("17h30"); xLabel.add("18h"); xLabel.add("18h30"); xLabel.add("19h"); xLabel.add("19h30"); xLabel.add("20h"); xLabel.add("20h30"); xLabel.add("21h"); xLabel.add("21h30"); xLabel.add("22h"); xLabel.add("22h30"); xLabel.add("23h"); xLabel.add("23h30"); XAxis xAxis = mChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setAxisMinimum(0f); xAxis.setGranularity(1f); xAxis.setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { return xLabel.get((int) value % xLabel.size()); } }); CombinedData data = new CombinedData(); LineData lineDatas = new LineData(); lineDatas.addDataSet((ILineDataSet) dataChart()); data.setData(lineDatas); xAxis.setAxisMaximum(data.getXMax() + 0.25f); mChart.setData(data); mChart.invalidate(); } @Override Trang 140 an public void onValueSelected(Entry e, Highlight h) { final List arrayMap = new ArrayList(); arrayMap.add("6h"); arrayMap.add("6h30"); arrayMap.add("7h"); arrayMap.add("7h30"); arrayMap.add("8h"); arrayMap.add("8h30"); arrayMap.add("9h"); arrayMap.add("9h30"); arrayMap.add("10h"); arrayMap.add("10h30"); arrayMap.add("11h"); arrayMap.add("11h30"); arrayMap.add("12h"); arrayMap.add("12h30"); arrayMap.add("13h"); arrayMap.add("13h30"); arrayMap.add("14h"); arrayMap.add("14h30"); arrayMap.add("15h"); arrayMap.add("15h30"); arrayMap.add("16h"); arrayMap.add("16h30"); arrayMap.add("17h"); arrayMap.add("17h30"); arrayMap.add("18h"); arrayMap.add("18h30"); arrayMap.add("19h"); arrayMap.add("19h30"); arrayMap.add("20h"); arrayMap.add("20h30"); arrayMap.add("21h"); arrayMap.add("21h30"); arrayMap.add("22h"); arrayMap.add("22h30"); arrayMap.add("23h"); arrayMap.add("23h30"); } @Override public void onNothingSelected() { } Trang 141 an private static DataSet dataChart() { LineData d = new LineData(); ArrayList entries = new ArrayList(); if (dataChart != null) { for (int index = 0; index

Ngày đăng: 02/02/2023, 09:10

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w