Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 123 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
123
Dung lượng
5,74 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 CNKT ĐIỆN – ĐIỆN TỬ HỆ THỐNG TƯỚI THÔNG MINH SỬ DỤNG NĂNG LƯỢNG MẶT TRỜI GVHD:TRẦN QUANG THỌ SVTH: PHÙNG THANH HẢI MSSV: 15142027 SVTH: PHẠM THẾ SƠN MSSV: 15142102 SKL 0 Tp Hồ Chí Minh, tháng 7/2019 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP HỆ THỐNG TƯỚI THÔNG MINH SỬ DỤNG NĂNG LƯỢNG MẶT TRỜI SVTH : PHÙNG THANH HẢI – PHẠM THẾ SƠN MSSV : 15142027 - 15142102 Khoá : 2015 Ngành : CNKT ĐIỆN – ĐIỆN TỬ GVHD: TS TRẦN QUANG THỌ Tp Hồ Chí Minh, tháng năm 2019 Khoa ĐT CLC – ĐH SPKT TP.HCM i NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Khoa ĐT CLC – ĐH SPKT TP.HCM ii PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Khoa ĐT CLC – ĐH SPKT TP.HCM iii CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc _*** _ PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên sinh viên: Phùng Thanh Hải Phạm Thế Sơn MSSV: 15142027 MSSV: 15142102 Ngành: CNKT Điện – Điện tử Lớp: 15142CL1 Tên đề tài: Hệ thống tưới thông minh sử dụng lượng mặt trời Giáo viên phản biện: Thầy Lê Thanh Lâm NHẬN XÉT: Về nội dụng đề tài khối lượng thực hiện: Nội dung Đồ án đầy đủ, mức Khá Ưu điểm: – Giải pháp đưa có tính – Tính ứng dụng cao – Phương pháp nghiên cứu phù hợp Khuyết điểm: Cần chỉnh sửa Đề nghị cho bảo vệ hay không ? Được bảo vệ Đánh giá loại: Khá Điểm: (Bằng chữ: ) Tp Hồ Chí Minh, ngày 12 tháng năm 2019 Giáo viên phản biện ( Ký & ghi rõ họ tên ) Khoa ĐT CLC – ĐH SPKT TP.HCM iv LỜI CẢM ƠN Trong suốt thời gian học tập rèn luyện trường Đại học Sư Phạm Kỹ Thuật, em dạy bảo tận tình tập thể Thầy Cơ trường Những kiến thức mà em có hơm nhờ dạy bảo Thầy Cô Em xin gởi lời cảm ơn sâu sắc đến quý Thầy Cô, người tận tâm truyền đạt tri thức khoa học kiến thức chuyên ngành cho em Đặc biệt em xin cảm ơn quý Thầy Cô khoa Điện - Điện Tử khoa Đào Tạo Chất Lượng Cao, người bỏ bao tâm huyết để truyền đạt tri thức, kỹ năng, kinh nghiệm quý báu chuyên môn để chúng em vững tin bước vào sống Đây kết tổng kết trình năm học tập em kinh nghiệm thực tế thân cịn chưa nhiều nên khó tránh khỏi nhiều thiếu sót, cần phải có hướng dẫn, giúp đỡ giảng viên Qua em xin gửi lời cảm ơn chân thành đến thầy Trần Quang Thọ tận tình bảo, hướng dẫn giúp đỡ em suốt trình làm đồ án tốt nghiệp, tạo điều kiện cho em hoàn thành tốt đồ án tốt nghiệp Chúng em xin gửi đến Thầy lời chúc sức khỏe ngày thành công bục giảng Cuối cùng, xin cảm ơn tất bạn bè thân mến động viên, góp ý để hồn thành tốt đồ án Khoa ĐT CLC – ĐH SPKT TP.HCM v MỞ ĐẦU TÍNH CẤP THIẾT CỦA ĐỀ TÀI Nền nơng nghiệp nước ta nơng nghiệp cịn lạc hậu chưa có nhiều ứng dụng khoa học kĩ thuật áp dụng vào thực tế Có thể nói nơng học ngồi kĩ thuật trồng trọt, chăm sóc tưới nước khâu quan trọng trồng trọt, để đảm bảo sinh trưởng phát triển tốt, tưới tưới đủ theo yêu cầu nông học trồng không sinh sâu bệnh, hạn chế thuốc trừ sâu cho sản phẩm an toàn, đạt suất, hiệu cao Bên cạnh vấn đề nhiễm mơi trường cấp bách đòi hỏi việc sử dụng nguồn lượng cần ưu tiên Hệ thống tưới tự động (tưới nhỏ giọt, phun sương …) hệ thống thiết bị tưới tốt đáp ứng theo yêu cầu sinh trưởng trồng ứng dụng rộng nước phát triển Hệ thống tưới nước tự động hình thức tưới nước hợp lý, tiết kiệm sức lao động chi phí nhân cơng Vốn phổ biến từ nhiều nước giới Tuy nhiên Việt Nam vài ba năm trở lại việc vận dụng hệ thống thông qua điện thoại di động trở thành xu hướng Hệ thống tưới nước tự động trở nên phổ biến với người nông dân nông thôn với q trình đại hóa nơng nghiệp nơng thôn Tuy nhiên, người dân mạnh dạn đưa vào sử dụng chi phí đầu tư cao Do đó, nhu cầu sử dụng hệ thống điều khiển tự động hóa ứng dụng IoT với giá thành thấp trở nên cấp thiết Xuất phát từ vấn đề thực tiễn trên, tác giả nghiên cứu thiết kế: “Hệ Thống Tưới Thông Minh Sử Dụng Năng Lượng Mặt Trời” MỤC TIÊU Nghiên cứu thiết kế mơ hình vật lý hệ thống tưới thơng minh sử dụng lượng mặt trời có tính điều khiển từ xa thơng qua giao tiếp với điện thoại di động PHẠM VI NGHIÊN CỨU Đề tài tập trung nghiên cứu thiết kế hệ thống điều khiển dựa vi điều khiển sử dụng điện thoại thông minh Các tác giả thi cơng mơ hình hệ thống động lực sử dụng pin mặt trời Khoa ĐT CLC – ĐH SPKT TP.HCM vi PHƯƠNG PHÁP NGHIÊN CỨU Để thực nội dung đề tài nghiên cứu, nhóm thực tiến hành phương pháp nghiên cứu sau: - Phương pháp phân tích: phân tích cơng trình nghiên cứu đề tài có lý thuyết phương pháp tổng hợp ưu nhược điểm - Phương pháp mô phần mềm để tăng tính trực quan tiết kiệm thời gian công suất - Phương pháp thực nghiệm để tăng khả ứng dụng thực tiễn chuyển giao công nghệ CẤU TRÚC NỘI DUNG ĐỀ TÀI Chương 1: Tổng quan đề tài Nội dung chương đưa khái niệm hệ thống tự động, hệ thống tưới, ưu nhược điểm giải pháp có, từ đưa giải pháp hợp lý cho đề tài Chương : Cơ sở lý thuyết Nội dung chương giới hệ thống điện mặt trời độc lập, cấu trúc, nguyên lý hoạt động PIC 18F4550, Modue sim900, số tập lệnh Chương 3: Xây dựng hệ thống Chương 4: Thiết kế thi cơng mơ hình hệ thống Chương 5: Kết luận hướng phát triển đề tài Ý NGHĨA Ý nghĩa khoa học: Đề tài thiết kế hệ thống chế độ tự động chế độ tay linh động Kết hợp sử dụng nguồn điện từ pin mặt trời cho mạch điều khiển mạch động lực Ý nghĩa thực tiễn: Kết nghiên cứu giúp tác giả làm chủ công nghệ chế tạo thiết bị điều khiển đại với giá thành rẻ góp phần phát triển lĩnh vực nông nghiệp đại Hệ thống sử dụng nguồn lượng tái tạo góp phần bảo vệ môi trường Khoa ĐT CLC – ĐH SPKT TP.HCM vii MỤC LỤC ĐỒ ÁN TỐT NGHIỆP I NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP II PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN III PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN IV LỜI CẢM ƠN V MỞ ĐẦU VI MỤC LỤC VIII DANH MỤC CÁC TỪ VIẾT TẮT X DANH MỤC BẢNG BIỂU XI DANH MỤC HÌNH ẢNH XII CHƯƠNG : TỔNG QUAN VỀ ĐỀ TÀI 1.1 Khái niệm hệ thống tự động 1.2 Vai trò tự động hóa q trình sản xuất 1.3 Ứng dụng tự động hóa tưới tiêu cho trồng 1.4 Các nghiên cứu nước 1.5 Các nghiên cứu nước 1.6 Các vấn đề cần nghiên cứu bổ sung 1.7 Phương án thiết kế CHƯƠNG : CƠ SỞ LÝ THUYẾT 2.1 Vi điều khiển PIC 18F4550 2.1.1 Sơ đồ chân, chức chân 2.1.2 Cấu trúc bên PIC18F4550 13 2.1.3 Các cổng xuất nhập 15 2.1.4 Khối chức ngoại vi 17 2.1.5 Tổ chức nhớ 17 2.1.6 Chế độ Reset, Sleep 19 2.1.7 Ngắt (interput) 20 2.1.8 Bộ chuyển đổi ADC PIC18F4550 21 2.2 Giới thiệu Module SIM900 22 2.2.1 Tổng quan Module SIM900 22 2.2.2 Đặc điểm module SIM900 23 2.2.3 Khảo sát sơ đồ chân chức chân Breakout SIM 900 24 2.3 Khảo sát tập lệnh AT Command Module SIM 900 26 Khoa ĐT CLC – ĐH SPKT TP.HCM viii 2.3.1 Khởi tạo cấu hình mặc định cho modem 27 2.3.2 Delete tin nhắn SIM 28 2.3.3 Thực gọi 29 2.3.4 Nhận gọi đến 30 2.3.5 Đọc tin nhắn 31 2.3.6 Gửi tin nhắn 32 2.3.7 Các lệnh khác 34 2.4 Giao tiếp PIC18F4550 module SIM900 34 2.5 Real Time Clock ( RTC ) – DS1307 35 Giao tiếp PIC18F4550 Module RTC 36 2.7 Hệ thống điện mặt trời độc lập 38 2.7.1 Cấu hình hệ thống điện mặt trời độc lập 38 2.7.2 Các thành phần cấu tạo hệ thống pin lượng mặt trời độc lập 41 CHƯƠNG : XÂY DỰNG HỆ THỐNG 51 3.1 Các yêu cầu tưới thiết yếu 51 3.1.1 Xác định nhu cầu tưới 51 3.1.2 Điều kiện tưới 52 3.1.3 Phân chia khu tưới, vị trí vịi phun 53 3.2 Đề xuất giải pháp cho hệ thống tưới thông minh sử dụng NLMT 54 3.2.1 Phần cứng 55 3.2.2 Phần mềm 58 CHƯƠNG : THIẾT KẾ VÀ THI CƠNG MƠ HÌNH HỆ THỐNG 64 4.1 Mạch điều khiển 64 4.2 Phần mềm 69 4.2.1 Phần mềm PIC 69 4.2.2 APP điều khiển 75 4.3 Kết đạt 79 CHƯƠNG : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 80 5.1 Kết luận 80 5.2 Hướng phát triển đề tài 80 TÀI LIỆU THAM KHẢO 82 PHỤ LỤC PHẦN MỀM 82 Khoa ĐT CLC – ĐH SPKT TP.HCM ix year = i2c_read(0); i2c_stop(); ds1307_display(); // Read year from register // Stop I2C // Diaplay results } // - Define for Module Sim -void USART_Init(long baud_rate); void USART_TxChar(char); unsigned int cnt = 0; const unsigned char numberDontCare = 8; // number character of buffer don't care const unsigned char numberOfMess = 5; // number character of message volatile unsigned char mess[5] = {0,0,0,0,0};// message to processing unsigned char send_msg[30]; // message to send SMS volatile unsigned char buffer[120], xbuffer=0, sdt_admin[]="+84923818275"; volatile unsigned char rev, rev1, rev2, rev3, rev4, dau_nhay; volatile int new_sms = 0,new_call = 0, isSend = 0, sent = 0, called = 0; void send_AT_OK (char *lk); void SIM900L_sendSMS(unsigned char* tel_number, unsigned char* msg); void SIM900L_readSMS(); void SIM900L_delSMS(); void clear_buffer(void); void reset_var(); char *at="AT"; char *atcm="AT+CMGF=1"; char *test = ""; // ADC char str1[20], str2[20], str3[20]; int st1=0,st2=0,st3=0; char *sv1 = ""; char *sv2 = ""; char *sv3 = ""; int adc_value1, adc_value2, adc_value3; void readADC(); void show(); void lcd(char *str); char *str_out = ""; Khoa ĐT CLC – ĐH SPKT TP.HCM ANDROID APP Main activity package com.example.wateringsystem; import import import import import import import import import import import import import android.Manifest; android.app.NotificationManager; android.app.PendingIntent; android.content.Context; android.content.Intent; android.content.pm.PackageManager; android.support.v4.app.ActivityCompat; android.support.v4.app.NotificationCompat; android.support.v4.content.ContextCompat; android.support.v7.app.AppCompatActivity; android.os.Bundle; android.view.View; android.widget.Button; public class MainActivity extends AppCompatActivity { public static Context appContext; RSSPullService service; Button controlBtn, settingBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = getIntent(); controlBtn = (Button)findViewById(R.id.controlBtn); controlBtn.setOnClickListener(controlBtnOnClickListener); settingBtn = (Button) findViewById(R.id.settingBtn); settingBtn.setOnClickListener(settingBtnOnClickListener); appContext = this; Khoa ĐT CLC – ĐH SPKT TP.HCM if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_SMS}, 1); } } View.OnClickListener settingBtnOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { OpenSettingIntent(); } }; View.OnClickListener controlBtnOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { OpenControlIntent(); } }; private void OpenServiceIntent(){ Intent intent = new Intent(this, RSSPullService.class); startService(intent); } private void OpenControlIntent(){ Intent intent = new Intent(this, ControlActivity.class); startActivity(intent); } private void OpenSettingIntent(){ Intent intent = new Intent(this, SettingActivity.class); startActivity(intent); } Khoa ĐT CLC – ĐH SPKT TP.HCM private void AddNotification() { NotificationCompat.Builder builder = new NotificationCompat.Builder(this) setSmallIcon(R.drawable.bell) setContentTitle("Notifications Example") setContentText("This is a test notification"); Intent notificationIntent = new Intent(this, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(contentIntent); NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(0, builder.build()); } } Global class ackage com.example.wateringsystem; import android.content.Context; import android.content.SharedPreferences; public class GlobalClass { private static volatile GlobalClass _globalClass; public static String phoneNo; public static String messageSMS; public static final int MY_PERMISSIONS_REQUEST_SEND_SMS = 0; public static GlobalClass getInstance(){ if (_globalClass == null){ synchronized (_globalClass.getClass()){ if (_globalClass == null){ _globalClass = new GlobalClass(); } } Khoa ĐT CLC – ĐH SPKT TP.HCM } return _globalClass; } } RSSPullService package com.example.wateringsystem; import import import import import import import import import import import android.app.IntentService; android.app.Notification; android.app.NotificationManager; android.app.PendingIntent; android.content.Context; android.content.Intent; android.os.Handler; android.os.Looper; android.support.v4.app.NotificationCompat; android.support.v4.app.NotificationManagerCompat; android.util.Log; public class RSSPullService extends IntentService { /** * Creates an IntentService Invoked by your subclass's constructor * * @param name Used to name the worker thread, important only for debugging */ Handler handler = new Handler(Looper.getMainLooper()); public RSSPullService(){ super("RSSPULLSERVICE"); } public RSSPullService(String name) { super(name); } @Override protected void onHandleIntent(Intent intent) { if (intent != null) { Khoa ĐT CLC – ĐH SPKT TP.HCM Thread currThread = Thread.currentThread(); Log.d("aaaa", "MyIntentService child thread info."); handler.postDelayed(new Runnable() { @Override public void run() { handler.postDelayed(this, 10000 ); } },10000); Log.d("aaa", "DONE"); } } @Override public void onCreate() { super.onCreate(); Log.d("aaa", "MyIntentService onCreate() method is invoked."); } @Override public void onDestroy() { super.onDestroy(); Log.d("aaa", "MyIntentService onDestroy() method is invoked."); } private void addNotification() { NotificationCompat.Builder builder = new NotificationCompat.Builder(this) setSmallIcon(R.drawable.bell) setContentTitle("Notifications Example") setContentText("This is a test notification") setDefaults(Notification.DEFAULT_ALL); Intent notificationIntent = new Intent(this, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(contentIntent); Khoa ĐT CLC – ĐH SPKT TP.HCM NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(0, builder.build()); } } SettingActivity package com.example.wateringsystem; import import import import import import import import android.content.Context; android.content.SharedPreferences; android.support.v7.app.AppCompatActivity; android.os.Bundle; android.view.View; android.widget.Button; android.widget.EditText; android.widget.Toast; public class SettingActivity extends AppCompatActivity { EditText phoneNo; Button savePhoneNoBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); phoneNo = (EditText) findViewById(R.id.phoneNo); savePhoneNoBtn = (Button) findViewById(R.id.savePhoneNoBtn); savePhoneNoBtn.setOnClickListener(savePhoneNoBtnOnClickListener); SharedPreferences pre = getSharedPreferences("Saved_Setting", Context.MODE_PRIVATE); phoneNo.setText(pre.getString("phoneNumber", "0")); } Khoa ĐT CLC – ĐH SPKT TP.HCM View.OnClickListener savePhoneNoBtnOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences pre = getSharedPreferences("Saved_Setting", Context.MODE_PRIVATE); SharedPreferences.Editor editor = pre.edit(); if (!String.valueOf(phoneNo.getText()).isEmpty()){ editor.putString("phoneNumber", String.valueOf(phoneNo.getText())); editor.apply(); Toast.makeText(SettingActivity.this, "Saved", Toast.LENGTH_SHORT).show(); } GlobalClass.phoneNo = String.valueOf(phoneNo.getText()); } }; } ControlActivity package com.example.wateringsystem; import import import import import import import import import import import import import import android.Manifest; android.content.Context; android.content.SharedPreferences; android.content.pm.PackageManager; android.support.v4.app.ActivityCompat; android.support.v4.content.ContextCompat; android.support.v7.app.AppCompatActivity; android.os.Bundle; android.telephony.SmsManager; android.view.View; android.widget.Button; android.widget.CompoundButton; android.widget.Switch; android.widget.Toast; Khoa ĐT CLC – ĐH SPKT TP.HCM public class ControlActivity extends AppCompatActivity { Switch modeSwitch, valveSwitch1, valveSwitch2, valveSwitch3, pumpSwitch; Button sendSMSBtn; String modeStt = "0", valve1Stt = "0", valve2Stt = "0", valve3Stt = "0", pumpStt = "0"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_control); sendSMSBtn = (Button) findViewById(R.id.sendSMSBtn); sendSMSBtn.setOnClickListener(sendSMSBtnOnClickListener); modeSwitch = valveSwitch1 valveSwitch2 valveSwitch3 pumpSwitch = (Switch) findViewById(R.id.modeSwitch); = (Switch) findViewById(R.id.valveSwitch1); = (Switch) findViewById(R.id.valveSwitch2); = (Switch) findViewById(R.id.valveSwitch3); (Switch) findViewById(R.id.pumpSwitch); modeSwitch.setOnCheckedChangeListener(modeSwitchOnCheckedChangeListen er); valveSwitch1.setOnCheckedChangeListener(valveSwitch1OnCheckedChangeLi stener); valveSwitch2.setOnCheckedChangeListener(valveSwitch2OnCheckedChangeLi stener); valveSwitch3.setOnCheckedChangeListener(valveSwitch3OnCheckedChangeLi stener); pumpSwitch.setOnCheckedChangeListener(pumpSwitchOnCheckedChangeListen er); Khoa ĐT CLC – ĐH SPKT TP.HCM SharedPreferences pre = getSharedPreferences("Saved_Setting", Context.MODE_PRIVATE); GlobalClass.phoneNo = pre.getString("phoneNumber", "0"); AllowSMS(); } CompoundButton.OnCheckedChangeListener modeSwitchOnCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (modeSwitch.isChecked()){ modeStt = "1"; } else{ modeStt = "0"; } } }; CompoundButton.OnCheckedChangeListener valveSwitch1OnCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (valveSwitch1.isChecked()){ valve1Stt = "1"; } else{ valve1Stt = "0"; } } }; Khoa ĐT CLC – ĐH SPKT TP.HCM CompoundButton.OnCheckedChangeListener valveSwitch2OnCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (valveSwitch2.isChecked()){ valve2Stt = "1"; } else{ valve2Stt = "0"; } } }; CompoundButton.OnCheckedChangeListener valveSwitch3OnCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (valveSwitch3.isChecked()){ valve3Stt = "1"; } else{ valve3Stt = "0"; } } }; CompoundButton.OnCheckedChangeListener pumpSwitchOnCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (pumpSwitch.isChecked()){ pumpStt = "1"; } else{ Khoa ĐT CLC – ĐH SPKT TP.HCM pumpStt = "0"; } } }; View.OnClickListener sendSMSBtnOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { String msgToSend = modeStt + valve1Stt + valve2Stt + valve3Stt + pumpStt; GlobalClass.messageSMS = msgToSend; sendSMSMessage(msgToSend); } }; protected void AllowSMS() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.SEND_SMS)) { } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, GlobalClass.MY_PERMISSIONS_REQUEST_SEND_SMS); } } } protected void sendSMSMessage(String msg){ try{ SmsManager smgr = SmsManager.getDefault(); smgr.sendTextMessage(GlobalClass.phoneNo,null,msg,null,null); Toast.makeText(ControlActivity.this, "SMS Sent Successfully", Toast.LENGTH_SHORT).show(); } catch (Exception e) { Khoa ĐT CLC – ĐH SPKT TP.HCM Toast.makeText(ControlActivity.this, "SMS Failed to Send, Please try again", Toast.LENGTH_SHORT).show(); } } } SMSReceiver package com.example.wateringsystem; import import import import import import import import import android.content.BroadcastReceiver; android.content.Context; android.content.Intent; android.os.Bundle; android.preference.PreferenceManager; android.telephony.SmsManager; android.telephony.SmsMessage; android.util.Log; android.widget.Toast; import java.util.HashSet; import java.util.Set; import java.util.StringTokenizer; public class SMSReceiver extends BroadcastReceiver { public static final String SMS_BUNDLE = "pdus"; @Override public void onReceive(Context context, Intent intent) { Log.d("GOTCHA", "RECEIVED"); Bundle intentExtras = intent.getExtras(); if (intentExtras != null) { Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE); String smsMessageStr = ""; for (int i = 0; i < sms.length; ++i) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]); Khoa ĐT CLC – ĐH SPKT TP.HCM String smsBody = smsMessage.getMessageBody().toString(); String address = smsMessage.getOriginatingAddress(); smsMessageStr += "SMS From: " + address + "\n"; smsMessageStr += smsBody + "\n"; Log.d("GOTCHA", smsMessageStr); } Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show(); } } } Khoa ĐT CLC – ĐH SPKT TP.HCM ... Đồng thời kết hợp sử dụng nguồn lượng mặt trời làm nguồn lượng cho hệ thống [2] Hệ thống thiết kế: - Hệ thống an toàn, thân thiện với môi trường sử dụng nguồn cung cấp từ lượng mặt trời - Cấu trúc... 2.7 Hệ thống điện mặt trời độc lập 38 2.7.1 Cấu hình hệ thống điện mặt trời độc lập 38 2.7.2 Các thành phần cấu tạo hệ thống pin lượng mặt trời độc lập 41 CHƯƠNG : XÂY DỰNG HỆ... việc sử dụng nguồn lượng cần ưu tiên Hệ thống tưới tự động (tưới nhỏ giọt, phun sương …) hệ thống thiết bị tưới tốt đáp ứng theo yêu cầu sinh trưởng trồng ứng dụng rộng nước phát triển Hệ thống tưới