Hiện thực hệ thống

Một phần của tài liệu Nghiên cứu phát triển công cụ phân tích dữ liệu nông nghiệp dùng cho làng thông minh (Trang 82)

5 Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp

5.3Hiện thực hệ thống

5.3.1 Cảm biến

Cảm biến ánh sáng

Hệ thống sử dụng cảm biến quang trở để đo đạc cường độ ánh sáng

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 68 Dữ liệu nhiệt độ đo đạc được ở khu vực Thủ Đức, TP.HCM. Dữ liệu điện áp cảm biến ánh sáng trong khoảng từ 0-1024, tương ứng với mức sáng giảm dần

HÌNH5.3: Dữ liệu cảm biến quang trở

Dữ liệu đầu ra để phục vụ cho giải thuật Fuzzy Logic được tính toán dựa trên công thức tham khảo sau: (Touati et al.,2013)

light=108.46−2∗log

104∗Vout

5−Vout

Trong đó Vout là điện áp đo đạt được của cảm biến

Cảm biến nhiệt độ

Hệ thống sử dụng cảm biến nhiệt độ dht11

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 69 Dữ liệu nhiệt độ đo đạc được ở khu vực Thủ Đức, TP.HCM

HÌNH5.5: Dữ liệu cảm biến nhiệt độ

Cảm biến độ ẩm đất

Cảm biến độ ẩm đất được xem là đầu vào và cả đầu ra cho giải thuật tưới nước. Đầu vào nhận vào giá trị độ ẩm để tính toán Fuzzy Logic, đầu ra tính được thời gian tưới nước và đo đạc lại giá trị cảm biến để kiểm tra độ ẩm đạt yêu cầu hay không. Dữ liệu độ ẩm đất được sinh tự động ngẫu nhiên theo kịch bản bằng Script Python ở server ThingsBoard.

GLOBAL_VARIABLE:

DEFAULT_SOIL = 20 s o i l = DEFALT_SOIL TIME_IRRIGATION

// thread 1 using for l i s t e n i n g UP_SIGNAL

START_THREAD_1 ;

TIME_IRRIGATION , UP_SIGNAL = Socket . r ec ei ve ( )

// thread 2 using for s o i l moisture decreases over time

START_THREAD_2 ; function DECREASING ( ) : while ( s o i l >=0): i f (UP_SIGNAL ) : INCREASING ( ) : else: s o i l = s o i l − random_epsilon

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 70

function INCREASING ( ) :

while ( s o i l <= TIME_IRRIGATION * alpha ) s o i l = s o i l + random_epsilon

Script Python gồm 2 thread chạy song song:

• THREAD_1: tạo kết nối Socket và lắng nghe để nhận dữ liệu thời gian tưới

nước được gửi về từ server Spark.

• THREAD_2: Mặc định khởi chạy hàm DECREASING để giảm độ ẩm đất theo (adsbygoogle = window.adsbygoogle || []).push({});

thời gian. Khi có tín hiệu tưới nước sẽ gọi hàm INCREASING để tăng độ ẩm trong một khoảng thời gian nhất định phụ thuộc vào biến TIME_IRRIGATION

HÌNH5.6: Dữ liệu cảm biến độ ẩm đất

5.3.2 Cài đặt Server Spark và Hadoop

Spark là một framework tính toán phân tán, chính vì thế sức mạnh tính toán của Spark nằm ở các máy cụm worker. Kiến trúc cụm máy tính được sử dụng bao gồm: 1 máy chủ master, 7 máy worker

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 71

HÌNH5.7: Kiến trúc minh họa Spark và Hadoop

Hệ thống lưu trữ được sử dụng cho Spark là Hadoop. Ngay từ đầu, Spark được thiết kế ra để tính toán dữ liệu trên hệ thống lưu trữ Hadoop. Chính vì thể, Hadoop được xem là giải pháp đọc ghi dữ liệu tốt và thân thiện nhất đối với Spark. Hadoop master và các slave cũng được thiết kế tương tự với Spark để quá trình truy xuất dữ liệu được nhanh hơn.

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 72

HÌNH5.9: Giao diện thư mục Hadoop

5.3.3 Thu thập và lưu trữ dữ liệu

Dữ liệu cảm biến được thu thập và gửi về Server ThingsBoard. Tại đây, Server Spark đóng vai trò làm Server xử lý trung tâm, chịu trách nhiệm lưu trữ dữ liệu cho ứng dụng, và sử dụng dữ liệu cho các bài toán cụ thể. Spark nhận các gói tin dữ liệu bằng cách đăng kí topic của kafka, sử dụng thư viện Spark Streaming

HÌNH5.10: Thu thập và lưu trữ dữ liệu

Ở Server Spark, khởi chạy một ứng dụng có tên SparkStream. Khai báo một dataframe có nhiệm vụ nhận dữ liệu gửi về từ Kafka. Ứng dụng đăng ký topic tên "gateway7" ở server ThingsBoard có địa chỉ "10.1.8.80:9092"

o b j e c t SparkStream {

def main ( args : Array [ String ] ) : Unit = { val conf = new SparkConf ;

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 73 val sc = new SparkContext ( conf )

val spark = SparkSession . builder ( ) . appName( " SparkStream " ) . getOrCreate ( )

val df = spark

. readStream

. format ( " kafka " )

. option ( " kafka . bootstrap . servers " , " 1 0 . 1 . 8 . 8 0 : 9 0 9 2 " )

. option ( " subscribe " , " gateway7 " ) . load ( )

Khai báo schema cho dataframe gồm các trường sau:

• Gateway: Tên gateway

• temperature: Giá trị cảm biến nhiệt độ

• solar: Giá trị cảm biên ánh sáng

• soil: Giá trị cảm biến độ ẩm đất

• latitude: Giá trị vĩ độ

• longitude: Giá trị kinh độ

• deviceName: Tên thiết bị (adsbygoogle = window.adsbygoogle || []).push({});

• deviceType: Loại thiết bị

• ts: Giá trị timestamp

val schema = new StructType ( ) . add ( " Gateway " , StringType ) . add ( " temperature " , DoubleType ) . add ( " s o l a r " , DoubleType )

. add ( " s o i l " , DoubleType ) . add ( " l a t i t u d e " , DoubleType ) . add ( " longitude " , DoubleType ) . add ( " deviceName " , StringType ) . add ( " deviceType " , StringType )

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 74 . add ( " t s " , StringType )

val valueDF = df

. selectExpr ( "CAST( value AS STRING) " )

. s e l e c t( from_json ( col ( " value " ) , schema ) . as ( " data " ) ) . s e l e c t( " data .* " )

Sử dụng module writeStream của Spark Streaming để nhận dữ liệu từ kafka. Với mỗi gói tin nhận được sẽ được gán tự động vào biến batchDF. Trong hàm foreachBatch, có thể tùy chỉnh hoặc tiền xử lý dữ liệu trước khi lưu HDFS.

valueDF . writeStream . foreachBatch {

( batchDF : DataFrame , batchId : Long)= >{

val format ="E dd−MMMM−yyyy HH:mm: ss . SSSS " val name_ts = " time "

val partition_format = "HH−dd−MMMM−yyyy " val p a r t i t i o n = " p a r t i t i o n "

// modify batchDF val df= batchDF

. withColumn ( name_ts , to_timestamp ( col ( " t s " )/1000)) . withColumn ( p a r t i t i o n ,

date_format ( col ( name_ts ) , partition_format ) )

. withColumn ( name_ts ,

date_format ( col ( name_ts ) , format ) )

// re−define the name of column

. s e l e c t ( col ( " temperature " ) . as ( " temp " ) , col ( " s o l a r " ) , col ( " s o i l " ) , col ( name_ts ) , col ( " t s " ) , col ( p a r t i t i o n ) ) // save hdfs df . coalesce ( 1 ) . write

. mode( SaveMode . Append) . partitionBy ( p a r t i t i o n )

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 75 . csv ( "/user/spark/ i r r i g a t i o n _ c s v " ) } } . s t a r t ( ) . awaitTermination ( )

Ứng dụng có tính chất đọc dữ liệu theo giờ. Quá trình ghi dữ liệu được thiết kế theo kiểu partition. Sau khi nhận được batchDF sẽ tiến hành biến đổi và thêm 1 cột partition. Cột partition có định dạng giờ-ngày-tháng-năm tương ứng "HH-dd- MMMM-yyyy". Vì thế khi write HDFS sẽ tự động partition thành các Folder theo định dạng đó.

HÌNH5.11: Lưu dữ liệu theo partition

5.3.4 Phân tích dữ liệu và ra quyết định

Quá trình phân tích dữ liệu gồm 3 bước:

• Đọc dữ liệu từ HDFS

• Áp dụng giải thuật Fuzzy Logic

• Gửi kết quả về phía server ThingsBoard

Về việc định nghĩa bài toán Fuzzy Logic, ứng dụng sẽ tham khảo bài nghiên cứu ở Qatar (Touati et al.,2013) (adsbygoogle = window.adsbygoogle || []).push({});

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 76

HÌNH5.12: Phân tích dữ liệu và ra quyết định

HÌNH5.13: Sơ đồ hoạt động của giải thuật

Hình ảnh trên trình bày về luồng hoạt động của hệ thống. Tại thời điểm bắt đầu, hệ thống đọc dữ liệu từ Hadoop. Để tránh việc đọc tất cả các bản ghi, hadoop được lưu theo cơ chế partition theo giờ. Spark chỉ cần đọc Folder mới nhất theo thời gian

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 77 thực. Từ đó, thời gian đọc dữ liệu hiệu quả hơn. Nếu điều kiện độ ẩm đất bé hơn 17% xảy ra, hệ thống sẽ thực hiện tính toán Fuzzy Logic để cho ra kết quả thời gian tưới nước cần thiết. Sau đó gửi thời gian tưới nước về server ThingsBoard. Quá trình tưới nước bắt đầu diễn ra. Chờ thời gian tưới và thấm nước. Sau đó lặp lại quy trình trên.

Ngoài ra, điều kiện bơm nước có thể chỉnh sửa cho phù hợp với từng khung giờ khác nhau để phù hợp với môi trường đất thực tế.

5.3.5 Thiết kế giải thuật Fuzzy Logic

(Touati et al.,2013)

HÌNH5.14: Thiết kế giải thuật Fuzzy

Input

Input của giải thuật gồm:

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 78

HÌNH5.15: Temperature membership function

• Dữ liệu ánh sáng:

HÌNH5.16: Solar radiation membership function

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 79

HÌNH5.17: Soil moisture membership function

Output

Output của giải thuật: Thời gian tưới nước:

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 80 Luật HÌNH5.19: Rule table 1 HÌNH5.20: Rule table 2 HÌNH5.21: Rule table 3 5.3.6 Hiện thực chương trình

Cài đặt ban đầu cho hệ thống Fuzzy và các biến liên quan o b j e c t i r r i g a t i o n {

def main ( args : Array [ String ] ) : Unit = {

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 81 val dout = new DataOutputStream ( socket . getOutputStream ( ) ) ; val spark = SparkSession . builder ( )

. appName( " S p a r k I r r i g a t i o n " ) . getOrCreate ( ) val sc = spark . sparkContext

var temp = v a r i a b l e ( " temp " , ( 1 5 , 6 0 ) ) var lux = v a r i a b l e ( " lux " , ( 0 , 1 2 0 0 0 ) ) var s o i l = v a r i a b l e ( " s o i l " , ( 0 , 8 0 ) )

var output = v a r i a b l e ( " out " , ( 0 , 3 2 ) , sc=sc ) var cold = trapmf ( " cold " , 1 5 , 1 5 , 2 5 , 3 0 )

var medium_t = trimf ( "medium" , 25 ,30 ,35) var hot = trapmf ( " hot " , 30 ,35 ,60 ,60) var dark = trapmf ( " dark " , 0 , 0 , 0 . 2 5 , 0 . 5 )

var medium_l = trapmf ( "medium" , 0 . 2 5 , 0 . 5 , 7 5 0 0 , 1 0 0 0 0 ) var l i g h t = trapmf ( " l i g h t " , 7500 , 10000 ,12000 ,12000) var dry = trapmf ( " dry " , 0 , 0 , 1 7 , 3 3 )

var medium_s = trimf ( "medium" , 17 ,33 ,50) var wet = trapmf ( " wet " , 33 ,50 ,80 ,80) var zero = trimf ( " zero " , 0 , 0 , 8 )

var veryshort = trimf ( " veryshort " , 0 , 8 , 1 6 ) var short = trimf ( " short " , 8 , 16 ,24 ) (adsbygoogle = window.adsbygoogle || []).push({});

var long = trimf ( " long " , 16 ,24 ,32)

var verylong = trimf ( " verylong " , 24 ,32 ,32) val f i s = FIS_Mamdani (name = " tipdemo " ,

input = L i s t ( temp , lux , s o i l ) , output = L i s t ( output ) ,

andMethod = AndMethod . Min , orMethod = OrMethod . Max,

aggregation = Aggregation . Max,

d e f u z z i f i c a t i o n = Defuzzificaton . centroid , step = 10000)

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 82 Cài đặt các kịch bản tưới nước theo khung giờ trong ngày theo cấu trúc (a, b). Trong đó a là thời điểm giờ trong ngày, b là độ ẩm cần đạt được tại khung giờ đó

val i r r i g a t i o n _ s c r i p t = L i s t ( ( 0 , 2 0 ) , ( 1 , 2 0 ) , ( 2 , 2 0 ) , ( 3 , 2 0 ) , ( 4 , 2 0 ) , ( 5 , 2 0 ) , ( 6 , 2 0 ) , ( 7 , 2 0 ) , ( 8 , 4 0 ) , ( 9 , 4 0 ) , ( 1 0 , 4 0 ) , ( 1 1 , 4 0 ) , ( 1 2 , 4 0 ) , ( 1 3 , 4 0 ) , ( 1 4 , 4 0 ) , ( 1 5 , 4 0 ) , ( 1 6 , 6 0 ) , ( 1 7 , 6 0 ) , ( 1 8 , 6 0 ) , ( 1 9 , 6 0 ) , ( 2 0 , 6 0 ) , ( 2 1 , 6 0 ) , ( 2 2 , 6 0 ) , ( 2 3 , 6 0 ) ) Đọc dữ liệu HDFS partition theo giờ

while (true) {

for ( ( h , s)<− i r r i g a t i o n _ s c r i p t ) {

i f ( h==LocalDateTime . now ( ) . getHour ( ) ) { r e f _ s o i l = s } }

val df = spark .read

. csv ( " . . / i r r i g a t i o n _ c s v / p a r t i t i o n ="+LocalDateTime . now ( ) ) val row = df . orderBy ( col ( " _c4 " ) . desc ) . c o l l e c t . head

val temp_data = row ( 0 ) . asInstanceOf [ String ] . toDouble val lux_data = row ( 1 ) . asInstanceOf [ String ] . toDouble val s o i l _ d a t a = row ( 2 ) . asInstanceOf [ String ] . toDouble f i s . setInput ( L i s t ( temp_data , lux_data , s o i l _ d a t a ) ) Cài đặt luật fuzzy logic

f i s . I f ( s o i l i s wet ) Then ( output will_be zero ) f i s . I f ( ( temp i s cold )

and ( lux i s l i g h t )

and ( s o i l i s medium_s ) ) Then ( output will_be short ) f i s . I f ( ( temp i s cold )

and ( lux i s medium_l ) and ( s o i l i s medium_s ) ) Then ( output will_be short ) f i s . I f ( ( temp i s cold )

and ( lux i s dark )

and ( s o i l i s medium_s ) ) Then ( output will_be short )

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 83

f i s . I f ( ( temp i s medium_t ) and ( lux i s l i g h t )

and ( s o i l i s medium_s ) ) Then ( output will_be veryshort ) f i s . I f ( ( temp i s medium_t )

and ( lux i s medium_l ) and ( s o i l i s medium_s ) ) Then ( output will_be short ) f i s . I f ( ( temp i s medium_t )

and ( lux i s dark )

and ( s o i l i s medium_s ) ) Then ( output will_be short ) f i s . I f ( ( temp i s hot )

and ( lux i s l i g h t )

and ( s o i l i s medium_s ) ) Then ( output will_be zero ) f i s . I f ( ( temp i s hot )

and ( lux i s medium_l ) and ( s o i l i s medium_s ) ) Then ( output will_be veryshort ) f i s . I f ( ( temp i s hot )

and ( lux i s dark ) (adsbygoogle = window.adsbygoogle || []).push({});

and ( s o i l i s medium_s ) ) Then ( output will_be long ) f i s . I f ( ( temp i s cold )

and ( lux i s l i g h t ) and ( s o i l i s dry ) )

Then ( output will_be verylong ) f i s . I f ( ( temp i s cold )

and ( lux i s medium_l ) and ( s o i l i s dry ) )

Then ( output will_be verylong ) f i s . I f ( ( temp i s cold )

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 84 and ( lux i s dark )

and ( s o i l i s dry ) )

Then ( output will_be verylong ) f i s . I f ( ( temp i s medium_t )

and ( lux i s l i g h t ) and ( s o i l i s dry ) )

Then ( output will_be verylong ) f i s . I f ( ( temp i s medium_t )

and ( lux i s medium_l ) and ( s o i l i s dry ) )

Then ( output will_be verylong ) f i s . I f ( ( temp i s medium_t )

and ( lux i s dark ) and ( s o i l i s dry ) )

Then ( output will_be verylong ) f i s . I f ( ( temp i s hot )

and ( lux i s l i g h t ) and ( s o i l i s dry ) ) Then ( output will_be zero ) f i s . I f ( ( temp i s hot )

and ( lux i s medium_l ) and ( s o i l i s dry ) )

Then ( output will_be veryshort ) f i s . I f ( ( temp i s hot )

and ( lux i s dark ) and ( s o i l i s dry ) )

Then ( output will_be verylong ) Tính kết quả Fuzzy Logic và gửi socket

val i r r i g a t i o n _ t i m e = f i s . defuzz ( output ) dout . writeUTF ( i r r i g a t i o n _ t i m e . t o S t r i n g ) ; dout . flush ( ) ;

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 85

5.4 Đánh giá kết quả

Hình ảnh dưới đây thể hiện độ ẩm đất đo đạc được trong ngày 17/7/2021 và ngày 18/7/2021. Tưới nước theo kịch bản sau:

• Từ 0h đến 7h: Mức độ ẩm cần đạt được là 20%

• Từ 8h đến 15h: Mức độ ẩm cần đạt được là 40%

• Từ 16h đến 23h: Mức độ ẩm cần đạt được là 60%

HÌNH5.22: Dữ liệu độ ẩm đất trong ứng dụng

Kết quả đo đạc cho thấy, ứng dụng đáp ứng được yêu cầu kịch bản độ ẩm đã được đề xuất.

Để đánh giá sự hiệu quả của ứng dụng tưới nước trên, tôi sẽ so sánh ứng dụng với trường hợp ứng dụng không sử dụng giải thuật Fuzzy Logic, chỉ dựa vào cảnh báo cảm biến và kinh nghiệm của người tưới nước. Giả sử kinh nghiệm tương ứng với dữ liệu cảm biến và thời gian tưới nước như sau:

BẢNG 5.1: Các trạng thái cảm biến nhiệt độ (adsbygoogle = window.adsbygoogle || []).push({});

Trạng thái Khoảng

Cold temp < 25

Medium 25 <= temp <= 35

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 86 BẢNG 5.2: Các trạng thái cảm biến ánh sáng Trạng thái Khoảng Dark solar < 0.25 Medium 0.25 <= solar <= 7500 Light solar > 7500 BẢNG 5.3: Các trạng thái cảm biến độ ẩm đất Trạng thái Khoảng Dry soil < 17 Medium 17 <= solar <= 50 Wet solar > 50

BẢNG5.4: Kinh nghiệm tưới nước

Mức tưới Thời gian tưới (phút)

Zero 0

VeryShort 8

Short 16

Long 24

Chương 5. Áp dụng Fuzzy Logic vào vấn đề tưới tiêu trong nông nghiệp 87 14 15 16 17 18 0 100 200 300 400 500 257.8 251.2 288.2 293.7 285.5 352 344 392 368 376 day minutes Case 1 Case 2

Biểu đồ trên so sánh số phút tưới nước khi áp dụng hai cách tưới nước khác nhau trong các ngày 14/7/2021 đến 18/7/2021

• Case 1: Trường hợp sử dụng giải thuật Fuzzy Logic

• Case 2: Trường hợp chỉ sử dụng kinh nghiệm, không sử dụng Fuzzy Logic

Kết quả cho thấy, khi áp dụng Fuzzy Logic, thời gian tưới nước luôn ít hơn tương ứng với việc sử dụng ít nước hơn nhưng vẫn đảm bảo độ ẩm theo yêu cầu.

88

Chương 6 Kết luận

Nông nghiệp là vấn đề quan trọng của tất cả các quốc gia hiện nay. Việc áp dụng khoa học công nghệ vào nông nghiệp là việc làm cấp thiết, giúp nền nông nghiệp phát triển bền vững và đạt được năng suất cao hơn. Trong luận văn này, tôi đã có các khảo sát tổng hợp để chỉ ra rằng, các vấn đề nông nghiệp trong thực tế là rất đa dạng. Thông qua khảo sát, tôi đã chỉ ra được một số kĩ thuật mạnh mà giới nghiên cứu quan tâm, sử dụng thường xuyên.

Cùng với đó, tôi cũng đã bước đầu xây dựng được một framework chuyên dụng để xử lý các vấn đề trên. Tôi đã chọn Spark để kế thừa và mở rộng thêm giải thuật. Hiện tại, framework đã hỗ trợ tốt giải thuật Fuzzy Logic. Giải thuật phiên bản phân tán được nâng cấp hoàn thiện hơn so với phiên bản 1, giúp quá trình tính toán diễn ra nhanh hơn, tận dụng sức mạnh tính toán phân tán của Spark.

Tôi cũng đã trình bày một ứng dụng tưới nước mô phỏng để chứng minh giải thuật chạy tốt trên môi trường Spark và có thể tương tác với nhiều công cụ dữ liệu lớn khác. Ứng dụng chạy ổn định và kết quả đạt yêu cầu độ ẩm dề ra. Tôi cũng đã so sánh ứng dụng tưới nước khi sử dụng giải thuật Fuzzy Logic và không sử dụng giải thuật Fuzzy Logic, kết quả cho thấy số thời gian tưới nước của Fuzzy Logic là ít hơn từ đó giúp tiết kệm được nước nhưng vẫn đảm bảo độ ẩm theo yêu cầu.

Tuy nhiên ứng dụng tưới nước vẫn còn hạn chế vì chưa thể mô phỏng giống hoàn toàn so với môi trường thật. Vì thế, khi áp dụng thực tế sẽ cần nhiều chỉnh sửa để phù hợp với môi trường ở địa phương.

Tôi hi vọng rằng, những nghiên cứu khởi đầu của tôi sẽ giúp ích được cho các nhóm phát triển sau này, giúp họ dễ dàng mở rộng framework và giải quyết được nhiều bài toán khác trong tương lai.

89

References

Aggarwal, Charu C (2015). ?Data classification?In:Data Mining. Springer, pp. 285– 344.

Anand, J and J Raja Paul Perinbam (2014). Automatic Irrigation System using Fuzzy

Logic. CG College of Technology, Chennai, Tamil Nadu, India.

Aydin, Galip, Ibrahim Riza Hallac, and Betul Karakus (2015). ?Architecture and

implementation of a scalable sensor data storage and analysis system using cloud computing and big data technologies?In:Journal of Sensors2015.

Bennett, John McLean (2015). ?Agricultural Big Data: utilisation to discover the (adsbygoogle = window.adsbygoogle || []).push({});

unknown and instigate practice change?In:Farm Policy Journal12.1, pp. 43–50. Devlin, Barry (2012). ?The Big Data zoo–taming the beasts: the need for an integrated

platform for enterprise information?In:Cape Town: 9sight Consulting.

Một phần của tài liệu Nghiên cứu phát triển công cụ phân tích dữ liệu nông nghiệp dùng cho làng thông minh (Trang 82)