automatic pet feederneis) ระบบ... · 2018-07-06 ·...

100
ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ตโฟน Automatic Pet Feeder วิสัชชนา สุทาธรรม สารนิพนธ์นี้เป็นส่วนหนึ่งของการศึกษา หลักสูตรวิทยาศาสตรมหาบัณฑิต สาขาวิชาวิศวกรรมเครือข่าย และความมั่นคงปลอดภัยสารสนเทศ คณะวิทยาการและเทคโนโลยีสารสนเทศ มหาวิทยาลัยเทคโนโลยีมหานคร ปีการศึกษา 2560

Upload: others

Post on 31-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ระบบใหอาหารสตวเลยงอตโนมตผานแอปพลเคชนบนสมารตโฟน Automatic Pet Feeder

วสชชนา สทาธรรม

สารนพนธนเปนสวนหนงของการศกษา หลกสตรวทยาศาสตรมหาบณฑต สาขาวชาวศวกรรมเครอขาย

และความมนคงปลอดภยสารสนเทศ คณะวทยาการและเทคโนโลยสารสนเทศ

มหาวทยาลยเทคโนโลยมหานคร ปการศกษา 2560

Page 2: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

I

หวขอ ระบบใหอาหารสตวเลยงอตโนมตผานแอปพลเคชนบนสมารตโฟน Automatic Pet Feeder ชอนกศกษา วสชชนา สทาธรรม รหสนกศกษา 5917660012 หลกสตร วทยาศาสตรมหาบณฑต สาขาวศวกรรมเครอขาย ปการศกษา 2560 อาจารยทปรกษา ผศ.ดร.วรพล ลลาเกยรตสกล

บทคดยอ

สารนพนธนจดท าขนเพอแกไขปญหาสตวเลยงกนอาหารไมตรงเวลาอาจท าใหสตวเลยงปวยเปนโรคขาดสารอาหารได โดย Automatic Pet Feeder เปนการน าบอรดคอมพวเตอรขนาดเลกอยางราสเบอรรพาย Raspberry Pi ซงเปนทนยมและตนทนต า มาใชในการสงการควบคมระบบการใหอาหารสตวเลยง โดยผใชสามารถใหอาหารสตวเลยงเมออยนอกบานไดทกเวลาผานแอปพลเคชนบนสมารตโฟน ตงเวลาการใหอาหาร และสองดสตวเลยงไดตลอดเวลาผานกลองเวบแคม (Webcam) ไดอกดวย

Page 3: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

II

กตตกรรมประกาศ

สารนพนธฉบบนส าเรจลงไดดวยด ดวยการใหค าปรกษา และค าแนะน าทดจาก ผศ.ดร.วรพล ลลาเกยรตสกล อาจารยทปรกษาไดใหค าแนะน าและความร จนสารนพนธฉบบนส าเรจไดดวยด

สดทายขาพเจาขอขอบพระคณอาจารยทกๆทานทชวยสอนและใหความรตงแตทขาพเจาไดเขามาเรยนทมหาวทยาลยเทคโนโลยมหานคร และขาพเจาหวงวาสารนพนธฉบบนจะเปนประโยชนแกผทตองการศกษาตอในภายภาคหนาไมมากกนอย

วสชชนา สทาธรรม ธนวาคม 2560

Page 4: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

III

สารบญ หนา

บทคดยอ ............................................................................................................................................. I

กตตกรรมประกาศ.............................................................................................................................. II

สารบญ .............................................................................................................................................. III

สารบญรป ......................................................................................................................................... V

สารบญตาราง ……………………………………………………………..……………………………….……………….….. VII

บทท 1 บทน า ................................................................................................................................... 1

1.1 ปญหาและแรงจงใจ .................................................................................................................... 1

1.2 แนวทางการแกปญหา ................................................................................................................. 1

1.3 วตถประสงค ............................................................................................................................... 1

1.4 ภาพรวมของระบบทจดท า /ภาพรวมของการศกษาคนควา ........................................................ 1

1.5 ขอบเขตของการท างานระบบ / ขอบเขตของการศกษาคนควา ................................................... 1

1.6 โครงสรางของสารนพนธ ............................................................................................................. 2

บทท 2 พนฐานและทฤษฎทเกยวของ ............................................................................................... 3

2.1 บอรดราสเบอรรพาย (Raspberry Pi 3 Model B)………………………………………………………………3

2.2 DC 12V High Torque Electric Gear Reduction Motor 200RPM……………………………….....6

2.3 โหลดเซลลเซนเซอรเครองชงน าหนก Load Cell Weight Sensor 5 Kg……………….…………..…..8

2.4 ภาษาไพทอน (Python) ............................................................................................................ 11

2.5 ภาษาจาวา (Java) .................................................................................................................... 13

2.6 ภาษาพเอชพ (PHP) .................................................................................................................. 14

2.7 MySQL .................................................................................................................................... 15

2.8 Power Supply 12V 150W (12.5A)....................................................................................... 16

2.9 Virtual Private Server ........................................................................................................... 18

2.10 L298N Development Board ............................................................................................. 19

2.11 Breadboard .......................................................................................................................... 20

Page 5: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

IV

สารบญ(ตอ)

หนา

บทท 3 ระบบทน าเสนอ / การด าเนนงาน ....................................................................................... 21

3.1 โครงสรางและการออกแบบระบบ ............................................................................................. 21

3.2 รายละเอยดโครงสรางขององคประกอบ .................................................................................... 22

3.3 การออกแบบโปรโตคอลทใชเชอมตอกนระหวางอปกรณของผใช (User) กบ Raspberry Pi .... 23

3.4 การออกแบบแอปพลเคชนส าหรบสงการ Automatic Box Feeder ........................................ 24

บทท 4 ผลการทดลอง / ผลการด าเนนงาน ..................................................................................... 30

4.1 วธการทดลองและผลการทดลอง .............................................................................................. 30

บทท 5 สรปผลการด าเนนงาน ........................................................................................................ 32

5.1 สรปผลการด าเนนงาน .............................................................................................................. 32

5.2 ปญหาและอปสรรคของการด าเนนการ ..................................................................................... 32

5.3 แนวทางในการแกปญหา ........................................................................................................... 32

5.4 ขอเสนอแนะในการพฒนาโครงงานตอไปในอนาคต .................................................................. 32

เอกสารอางอง ................................................................................................................................. 33

ภาคผนวก ก...………………………………………………………………………………………………………………….ก - 1

การตดตงระบบปฏบตการและการตงคาเรมตน…………..……..……………………..……………...............ก - 2

การตดตง FTP Server...……..………………………………….............................................................. .ก - 13

ภาคผนวก ข..………………………………………..…………………..………………………………………….………...ข - 1

Code Program PHP Script บน VPS..……………………………………………………….………….………...ข - 2

Code Program Python บน Raspberry Pi..………………………………………..….…………….………...ข - 7

Code Program Java ส าหรบ Application………………………….……..…………………….…………...ข - 18

Page 6: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

V

สารบญรป

หนา

รปท 2.1 สวนประกอบตางๆของบอรด Raspberry Pi 3B …………………………………………………….. 4 รปท 2.2 การจดเรยงขาของ GPIO Raspberry Pi 3B …………………………………………………………… 4 รปท 2.3 การเขยนอมเมจไฟลลงใน Micro SD Card ……………………………………………………………. 6 รปท 2.4 เมอเขยนอมเมจไฟลลงใน Micro SD Card เรยบรอยแลว ……………………………………….. 7 รปท 2.5 ขอมล DC 12V High Torque Electric Gear Reduction Motor 200RPM ……………. 7 รปท 2.6 ขอมลภายใน DC 12V High Torque Electric Gear Reduction Motor 200RPM ….. 7 รปท 2.7 DC 12V High Torque Electric Gear Reduction Motor 200RPM ……………………… 7 รปท 2.8 ตวอยางการท างานของโหลดเซลล ……………………………………………………………………….... 8 รปท 2.9 Load Cell Weight Sensor 5 Kg ………………………………………………………………………… 9 รปท 2.10 การตดตง Load Cell Weight Sensor 5 Kg ……………………………………………………….. 9 รปท 2.11 Module HX711 ……………………………………………………………………………………………… 10 รปท 2.12 การใชงาน Module HX711 กบ Microcontroller …………………………………………….. 10 รปท 2.13 สายตอวงจรตางๆของ HX711 ……………………………………….………………………………….. 11 รปท 2.14 แผนผง Switching Power Supply …………………………………………………………………… 17 รปท 2.15 ภาพวงจร Switching Power Supply ……………………………………………………………..… 17 รปท 2.16 VPS Server …………………………………………………………………………………………………….. 18 รปท 2.17 ดานใน Breadboard ………………………………………………………………………………………… 20 รปท 2.18 ดานนอก Breadboard ……………………………………………………………………………………… 20 รปท 3.1 องคประกอบของระบบทงหมดโดยรวม …………………………………………………………………. 21 รปท 3.2 สวนประกอบของ Automatic Box Feeder …………………………………………………………. 22 รปท 3.3 โครงสรางการตดตอสอสารระหวางอปกรณของผใชกบ Raspberry Pi ……………………... 23 รปท 3.4 ไอคอน (Icon) แอปพลเคชน Pet Feeder …………………………………………………………….. 24 รปท 3.5 หนาหลกของแอปพลเคชน ……………..……………………………………………………………………. 25 รปท 3.6 การแจงเตอนเมออาหารใกลจะหมด ………………………………………………………………………. 26 รปท 3.7 การมอนเตอรการท างานของระบบ ……………………………………………………………………….. 27 รปท 3.8 การตอวงจรโดยรวม ……………………………………………………………………………………………. 28 รปท 3.9 Flowchart การท างานของระบบโดยรวม ……………………………………………………………… 29 รปท 4.1 การแกไขคาในโหมด manual ……………………………………………………………………………… 30 รปท 4.2 การแกไขคาในโหมด auto …………………………………………………………………………………… 31

Page 7: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

VI

สารบญรป(ตอ) หนา

รปท ก.1 Win32 Disk Imager.……………………………………………………………………….. ก - 3 รปท ก.2 เปดโหมด SSH 1 ..………………………………..…………………………………………. ก - 4 รปท ก.3 เปดโหมด SSH 2 .……………………………………..…………………………………….. ก - 4 รปท ก.4 Wireless Network Watcher..…………………………………………………………. ก - 5 รปท ก.5 SSH by Putty.…………………………………………………………………….………….. ก - 6 รปท ก.6 Configuration 1 ……………………………………………..………………….…………. ก - 6 รปท ก.7 Configuration 2 ……………………………………………………………….…………… ก - 7 รปท ก.8 Configuration 3 ……………………………………………………………….…………… ก - 7 รปท ก.9 Configuration 4 ……………………………………………………………….…………… ก - 8 รปท ก.10 Configuration 5 …………………………………………………………….……………. ก - 9 รปท ก.11 Configuration 6 …………………………………………………………….……………. ก - 9 รปท ก.12 Configuration 7 ………………………………………………………………..………. ก - 10 รปท ก.13 Configuration 8 ……………………………………………………………………..…. ก - 10 รปท ก.14 Configuration 9 ……………………………………………………………………..…. ก - 12 รปท ก.15 Configuration 10..………………………………………………………………..……. ก - 13 รปท ก.16 การแก Configuration ในไฟล vsftpd.conf..……….………………………… ก - 14 รปท ก.17 การใชงาน FileZilla 1 ……………………………………………………………….… ก - 15 รปท ก.18 การใชงาน FileZilla 2 ……………………………………………………………….... ก - 15

Page 8: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

VII

สารบญตาราง หนา

ตารางท 3.1 ตารางแสดงฟงกชน (Functions) ของระบบ ……………………………………………………. 24

Page 9: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

1

บทท 1 บทน า

1.1 ปญหาและแรงจงใจ ในปจจบนการเลยงสตวเลยงเปนทนยมอยางแพรหลาย โดยสตวเลยงทไดรบความนยมมากทสดคอสนขและแมว ซงปญหาสวนใหญทพบของคนเลยงคอไมมเวลาหรอลมใหอาหารสตวเลยง ท าใหสตวเลยงอาจลมปวยเปนโรคขาดสารอาหารและตายได ซงในปจจบนนนเทคโนโลยและโทรคมนาคมไดพฒนามากขน จงเปนเรองงายในการใหอาหารสตวเลยงระยะไกลผานแอปพลเคชน Pet Feeder บนสมารตโฟน 1.2 แนวทางการแกปญหา

สารนพนธนไดใหความส าคญกบปญหาดงกลาวทเกดขน จงไดคดพฒนาเครองใหอาหารสตวอตโนมตผานแอปพลเคชนบนสมารทโฟน โดยการน าบอรดอเลคโทรนคราสเบอรรพาย (Raspberry Pi) ซงมความสามารถหลากหลายน ามาใชในการควบคมการหมนของมอเตอร เชอมตออนเทอรเนต ใชเซนเซอรโหลดเซลล (Load Cell) ส าหรบวดปรมาณอาหารในถาด มาออกแบบระบบและพฒนาแอปพลเคชนส าหรบสงการระยะไกลขนเพอสตวเลยงจะไดกนอาหารตรงตามเวลา 1.3 วตถประสงค

พฒนาเครองใหอาหารสตวอตโนมตโดยสงการจากแอปพลเคชนบนสมารทโฟนโดยใชราสเบอรรพาย (Raspberry Pi) 1.4 ภาพรวมของระบบทจดท า /ภาพรวมของการศกษาคนควา

1) ไดศกษาคนควาการน าราสเบอรรพาย (Raspberry Pi) และเซนเซอรโหลดเซลล (Load Cell) มาออกแบบระบบใหอาหารสตว

2) ชวยใหสตวเลยงกนอาหารตรงตามเวลา 1.5 ขอบเขตของการท างานระบบ / ขอบเขตของการศกษาคนควา

1) สามารถตงเวลาในการใหอาหารสตวเลยงแบบอตโนมต หรอตงแบบสงการเองได 2) มแอปพลเคชนบนสมารตโฟนถอส าหรบตงคาและสงการออนไลน และมกลองส าหรบ

สองดสตวเลยงไดตลอดเวลา 3) เมออาหารในถาดใกลจะหมดจะมการแจงเตอนผานแอปพลเคชนโดยจะวดจากน าหนก

ของอาหารในถาดอาหาร

Page 10: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

2

4) มการเกบขอมลปรมาณอาหารสตวเลยงทหมดไปในแตละมอเพอน ามาวเคราะหวาควรเทอาหารปรมาณเทาใด

5) สามารถก าหนดปรมาณอาหารทเทลงถาดในแตละมอได 1.6 โครงสรางของสารนพนธ

สารนพนธนแบงเนอหาเปน 5 บท ดงน บทท 1 : กลาวถงบทน า ปญหาและแรงจงใจ วตถประสงค ขอบเขตและประโยชนของสาร

นพนธเปนตน บทท 2 : กลาวถงพนฐานหรอทฤษฎความรเบองตนของเทคโนโลย ภาษาคอมพวเตอรทตอง

ใชในการออกแบบระบบ บทท 3 : กลาวถงการออกแบบระบบ ขนตอนการท างานของระบบ บทท 4 : กลาวถงวธการทดลอง ผลการทดลองซงน าวเคราะหประสทธภาพการท างานของ

ระบบ บทท 5 : กลาวถงการสรปผลการด าเนนงาน ปญหาทเกดขน ขอเสนอแนะในการปรบปรง

พฒนาระบบงานใหดขนตอไป

Page 11: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

3

บทท 2 พนฐานและทฤษฎทเกยวของ

2.1 บอรดราสเบอรรพาย (Raspberry Pi 3 Model B) เปนบอรดคอมพวเตอรขนาดเลกทมความสามารถหลากหลาย เชน ใชเพอท างานเอกสาร ดหนง ฟงเพลง ใชเพอการค านวณตางๆ หรอจะท าเปน Web Server และยงมความสามารถในการสอสาร ควบคมอปกรณอเลกทรอนกส เชน สามารถรบรสถานะของเครองใชไฟฟาไดวาก าลงท างานอยหรอไม สามารถสงงานใหเครองใชไฟฟาท างานหรอหยดท างานไดอกดวย จงเหมาะแกการน ามาพฒนาโปรเจคดาน Internet of things

โดยระบบปฏบตการทนยมใชกน คอ ระบบปฏบตการ Raspbian เพราะเปนระบบปฏบตการทถกสนบสนนโดยตรงจากทาง Raspberry Pi Foundation

2.1.1 คณสมบตเบองตนของบอรดราสเบอรรพาย 3 แบบ B - Broadcom BCM2837 chipset running at 1.2 GHz - 64-bit quad-core ARM Cortex-A53 - 802.11 b/g/n Wireless LAN - Bluetooth 4.1 (Classic & Low Energy) - Dual core Videocore IV® Multimedia co-processor - 1 GB LPDDR2 memory - MicroUSB connector for 2.5 A power supply - 1 x 10/100 Ethernet port - 1 x HDMI video/audio connector - 1 x RCA video/audio connector - 4 x USB 2.0 ports - 40 GPIO pins - Chip antenna - DSI display connector - microSD card slot - Dimensions: 85 x 56 x 17 mm

Page 12: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

4

2.1.2 สวนประกอบของบอรดราสเบอรรพาย 3 แบบ B

รปท 2.1 สวนประกอบตางๆของบอรด Raspberry Pi 3B 2.1.3 GPIO (General-purpose Input/Output) Raspberry Pi 3B

รปท 2.2 การจดเรยงขาของ GPIO Raspberry Pi 3B

Page 13: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

5

General Purpose Input/Output คอ พอรต เอนกประสงคค อ เราสามารถควบคม คอนโทรลใหเปน "1" หรอ "0" ได ตามใจชอบ โดยทจะสามารถควบคมไดแตละ pin (พน) เหมอนไมโครคอนโทรลเลอร สามารถน าไปตอยอดไดหลายอยาง เชน น า Raspberry Pi ไปตอกบจอ LCD หรอน าไปใชเปนตวเปด/ปด สญญาณตางๆ มทงหมด 40 ขา โดยจดเรยงตามรปท 2.2 โดยรปแบบหนงของสญญาณทใชรบสงจะอยรปแบบของแรงดนไฟฟา 0V กบ 3.3V เชน เมอ GPIO ขา X ไดรบไฟ 0V (หรอไมถกจายไฟ) โปรแกรมจะไดรบสญญาณเปน 0 หรอ False เมอ GPIO ขา X ไดรบไฟ 3.3V โปรแกรมจะไดรบสญญาณเปน 1 หรอ True เมอโปรแกรมสงสญญาณออกไปเปน 0 หรอ False GPIO ขา X จะจายไฟ 0V (หรอไมจายไฟ) เมอโปรแกรมสงสญญาณออกไปเปน 1 หรอ True GPIO ขา X จะจายไฟ 3.3V 2.1.4 ขนตอนการตดตงระบบปฏบตการของบอรด Raspberry Pi 3B การตดตงระบบปฏบตการของ Raspberry Pi 3B ลงใน Micro SD Card มขนตอนดงน

1) ไปท https://www.raspberrypi.org/downloads/raspbian/ การดาวนโหลดไฟลอมเมจทเราสนใจ ในสารนพนธนใช RASPBIAN STRETCH WITH DESKTOP สามารถดาวนโหลดไฟลไดทงแบบ Torrent และ Zip

2) ท าการแยกไฟลจะไดไฟลนามสกล .img 3) ด า ว น โ ห ล ด โ ป ร แ ก ร ม SD Formatter จ า ก

https://www.sdcard.org/downloads/formatter_4/index.html มาตดตง แลวท าการ Format SD Card โดยใชโปรแกรม SD Formatter

4) ด า ว น โ ห ล ด โ ป ร แ ก ร ม WinDiskImager จ า ก https://sourceforge.net/projects/win32diskimager มาตดตง เพอใชในการเขยนไฟลอมเมจ ลง Micro SD Card (Micro SD Card ควรมขนาด 8GB ขนไป)

5) เปดโปรแกรม Win32DiskImager ขนมากดปมรปโฟลเดอร จะขนหนาตางใหเราไปเลอกไฟล .img ท าการเลอกแลวกด Open แลวเลอก Device ซงกคอ Drive ของ Micro SD Card ทเราฟอรแมตเตรยมไว แลวกดปม Write แลวมนจะมหนาตางขนมาใหเรายนยนวาจะเขยนไหมกกด Yes ดงรปท 2.3

Page 14: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

6

รปท 2.3 การเขยนอมเมจไฟลลงใน Micro SD Card

6) รอไปเรอยๆ จนเขยนเสรจจะขน “Write Successful.” กด OK แลว Exit

รปท 2.4 เมอเขยนอมเมจไฟลลงใน Micro SD Card เรยบรอยแลว

7) น า Micro SD Card ท เข ยน อม เมจแล วไป ใส ช อง Micro SD Card ของ Raspberry Pi 3B ตอพอรตตางๆ คอ Ethernet , Mouse ,Keyboard, HDMI ตอกบจอ monitor จากนนจงตอกบ Power Supply Raspberry Pi 3B กจะท างาน เปนอนเสรจเรยบรอย

2.2 DC 12V High Torque Electric Gear Reduction Motor 200RPM ดซเกยรมอเตอร คอมอเตอรทมเกยรอยภายใน มแรงบดสง ท างานดวยไฟฟากระแสตรง

2.2 .1 คณ สมบ ต ข อ ง DC 12V High Torque Electric Gear Reduction Motor 200RPM

Voltage: DC 12V Speed: 200RPM Outer Diameter: 20mm / 0.78"

Page 15: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

7

รปท 2.5 ขอมล DC 12V High Torque Electric Gear Reduction Motor 200RPM

รปท 2.6 ขอมลภายใน DC 12V High Torque Electric Gear Reduction Motor 200RPM

รปท 2.7 DC 12V High Torque Electric Gear Reduction Motor 200RPM

Page 16: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

8

2.3 โหลดเซลลเซนเซอรเครองชงน าหนก Load Cell Weight Sensor 5 Kg ส าหรบตรวจวดน าหนก แรงกระท าทางกล หรอปรมาณของ Load ทตองการทราบคา โดยใช Strain Gauge มาตดตงในบรเวณทมการเปลยนแปลงรปทรงของ Load Cell เมอมแรงมากระท ากบตว Load Cell จะท าให Strain Gauge ทตดอยในบรเวณทมการเปลยนรปทรง ยด หรอ หด ตว ท าใหคาความตานทานทตว Strain Gauge เปลยนไป ตามรปท 2.8 ในจดท Strain Gauge ไดรบแรงกด (Compression) จะท าให Strain Gauge หดตวเขาหากน และในจดทไดรบแรงดง (tension) จะท าให strain gauge ถกยดออก จงท าใหคาความตานทานของ Strain Gauge เปลยนแปลงไป Strain Gauge ทง 4 ตวทอยบน Load Cell แบบ Straight Bar จะถกตออยดวยกนในลกษณะของวงจร Wheatstone Bridge

รปท 2.8 ตวอยางการท างานของโหลดเซลล 2.3.1 คณสมบตของ Load Cell Weight Sensor

- Rated Load: 5Kg - Rated Output: 1.0 ±0.15mV/V

- Zero Output: ±0.1mV/V - Cree: 0.03%F.S./30min - Input End: Red+, Black- - Output End: Green+, White- - Input Impedance: 1115±10% O

- Output Impedance: 1000±10% O - Maximum working voltage: 15V DC - Operating temperature range: -20~60°C - Total Size: 80 x 13 x 13mm/3.14 x 0.51 x 0.51"(L X W X H) - Material: Aluminum Alloy - Weight: 30g

Page 17: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

9

รปท 2.9 Load Cell Weight Sensor 5 Kg

รปท 2.10 การตดตง Load Cell Weight Sensor 5 Kg

2.3.2 HX711 โมดล HX711 เปนโมดลส าหรบขยายสญญาณจาก Load Cell เซนเซอรวดน าหนก ซงปกตมาคานอยมากๆ ตวโมดลนจะขยายสญญาณออกเปนสญญาณดจตอล 24bit I2C ท าใหสามารถน า Arduino NodeMCU Raspberry Pi หรอ MCU อนๆมาอานคาน าหนกไดงายๆ สายเชอมตอเขา MCU ม 2 เสนและไฟเลยง 2 เสน สามารถใชไฟเลยงไดตงแต 2.6 - 5.5v และอกดานของโมดลสามารถตอกบ Load Cell ไดเลย

Page 18: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

10

รปท 2.11 Module HX711

รปท 2.12 การใชงาน Module HX711 กบ Microcontroller

Page 19: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

11

รปท 2.13 สายตอวงจรตางๆของ HX711

2.4 ภาษาไพทอน (Python) Python คอชอภาษาทใชในการเขยนโปรแกรมภาษาหนง ซงถกพฒนาขนมาโดยไมยดตดกบ

แพลตฟอรม กลาวคอสามารถรนภาษา Python ไดทงบนระบบ Unix, Linux , Windows NT, Windows 2000, Windows XP หรอแมแตระบบ FreeBSD อกอยางหนงภาษาตว นเปน Open Source เหมอนอยาง PHP ท าใหทกคนสามารถทจะน า Python มาพฒนาโปรแกรมของเราไดฟรๆโดยไมตองเสยคาใชจาย และความเปน Open Source ท าใหมคนเขามาชวยกนพฒนาให Python มความสามารถสงขนและใชงานไดกบทกลกษณะงาน

2.4.1 คณลกษณะเดนของภาษา Python 1) สามารถใชไดทกแพลตฟอรม กลาวคอ สามารถท างานไดทก ๆ CPU

หลายๆ ระบบปฏบตการ เพยงแตผเขยนโปรแกรมเขยนจากแพลตฟอรมใด ๆ แลวน าโปรแกรมทไดไปใหท างานตางแพลตฟอรมกนได

2) ไมตองเสยคาใชจายในการจดซอโปรแกรมตนฉบบ โดยปกตแลวโปรแกรมภาษาทว ๆ ไปจะตองจดซอโปรแกรมตนฉบบเพอน ามาตดตงในราคาทแพงมาก แตโปแกรมภาษาไพธอนสามารถดาวนโหลดจาก www.python.org ไดโดยตรง แลวน ามาตดตงและศกษาการใชดวยตนเอง เพราะเปนโปรแกรมประเภท Open Source

3) ภาษาไพธอนไดน าเอาขอดของโปรแกรมในอดตเขามาไวดวยกน เชน ภาษาC, C++, Java และ Perl เปนตน

4) มความปลอดภยสง เนองจากภาษาไพธอนท างานอยดาน Server เปนหลก เมอมการรองขอจากเครอง Client จะประมวลผลทเครอง Server ท าใหผใชทวไปไมสามารถเขาถงเครอง Server ไดโดยตรงจงมความปลอดภยสง

5) ใชในการพฒนา Web Service ซงในปจจบนการพฒนาซอฟตแวรไดเนนทมการแลกเปลยนขอมลซงกนและกนทงในองคกรเดยวกนหรอแมแตตางองคกรกน ท าใหเกดความ สะดวกสบาย ไมตองใชซอฟตแวรอน ๆ มาแปลงขอมลเพอใหเขากนไดอกตอไปเรยนรไดเรวกวาโปรแกรมภาษาอน ๆ

Page 20: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

12

เพราะมโครงสรางภาษาทไมซบซอน ซงโครงสรางภาษาคลายคลงกบภาษา C ถาโปรแกรมเมอรทเคยใชภาษา C มากอนจะท าใหเรยนรไดเรวยงขน นอกจากนการเขยนโปรแกรมดวยภาษาไพธอนจะมความกระชบและสนกวาภาษาซ

2.4.2 โครงสรางของภาษา Python 1) Module จะประกอบไปดวยคลาส ฟงกชน และตวแปรตางๆ และ

นอกจากนเรายงสามารถ import โมดลอนเขามาในโปรแกรมได ซงโมดลอาจจะอยภายใน package ซงเปนเหมอน directory ของ Module

2) Comment คอมเมนตในภาษา Python นนเรมตนดวยเครองหมาย # คอมเมนตสามารถเรมตนทต าแหนงแรกของบรรทดและหลงจากนนจะประกอบไปดวย Whilespace หรอโคดของโปรแกรม หรอค าอธบาย ซงโดยทวไปแลวคอมเมนตมกจะใชส าหรบอธบายซอสโคดทเราเขยนขนและมนไมมผลตอการท างานของโปรแกรม

3) Statement คอค าส งการท างานของโปรแกรม แตละค าส งในภาษา Python นนจะแบงแยกดวยการขนบรรทดใหม ซงจะแตกตางจากภาษา C และ Java ซงใชเครองหมายเซมโคลอนส าหรบการจบค าสงการท างาน แตอยางไรกตาม ในภาษาPython นนคณสามารถมหลายค าสงในบรรทดเดยวกนไดโดยการใชเครองหมายเซมโคลอน ( ; )

4) Indentation and while space ในภาษา Python นนใช Whilespace และ Tab ส าหรบก าหนดบลอคของโปรแกรม เชน ค าสง If Else For หรอการประกาศฟงกชน ซงค าสงเหลานนนเปนค าสงแบบบลอค โดยจ านวนชองวางทใชนนตองเทากน

5) Literals ในการเขยนโปรแกรม Literal คอเครองหมายทใชแสดงคาของคาคงทในโปรแกรม ในภาษา Python นนม Literal ของขอมลประเภทตางๆ เชน Integer Floating-point number และ String หรอแมกระทงตวอกษรและ boolean น เปนตวอยางของการก าหนด Literal ใหกบตวแปรในภาษา Python

6) Expressions คอการท างานรวมกนระหวางคาตงแตหนงไปจนถงหลายคา โดยคาเหลานจะมตวด าเนนการส าหรบควบคมการท างาน ในภาษาPython นน Expression จะมสองแบบคอ Boolean expression เปนการกระท ากนของตวแปรและตวด าเนนการและจะไดผลลพธเปนคาBoolean โดยทวไปแลวมกจะเปนตวด าเนนการเปรยบเทยบคาและตว

Page 21: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

13

ด าเนนการตรรกศาสตร และ Expression ทางคณตศาสตร คอการกระท ากนกบตวด าเนนการและไดคาใหมทไมใช Boolean

7) Keywords เปนค าทถกสงวนไวในการเขยนโปรแกรมภาษา Python เราไมสามารถใชค าส งเหลาน ในการต งชอตวแปร ชอฟงกชน คลาส หรอ identifier ใดๆ ทก าหนดขนโดยโปรแกรมเมอร ซงรายการของ Keyword ในภาษา Python มดงน False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, From, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield

2.5 ภาษาจาวา (Java) Java หรอ Java programming language คอภาษาโปรแกรมเชงวตถ พฒนาโดย เจมส กอสลง และวศวกรคนอนๆ ทบรษท ซน ไมโครซสเตมส ภาษานมจดประสงคเพอใชแทนภาษาซพลสพลส C++ โดยรปแบบทเพมเตมขนคลายกบภาษาออบเจกตทฟซ (Objective-C) แตเดมภาษานเรยกวา ภาษาโอก (Oak) ซงตงชอตามตนโอกใกลทท างานของ เจมส กอสลง แลวภายหลงจงเปลยนไปใชชอ "จาวา" ซงเปนชอกาแฟแทน จดเดนของภาษา Java อยทผเขยนโปรแกรมสามารถใชหลกการของ Object-Oriented Programming มาพฒนาโปรแกรมของตนดวย Java ได 2.5.1 จดเดนของภาษาจาวา

1) ฟร 2) งายตอการเรยนและท าความเขาใจ กลไกการท างานไมซบซอน 3) มความปลอดภยในระดบหนง 4) ท างานไดกบทกระบบ (มคณลกษณะเปนแพลตฟอรม (Platform

Independent) 5) มความรดกม คงทนมกลไกตรวจจบขอผดพลาด และมกลไกการคนพนทใน

หนวยความจ าอตโนมต 6) มคราสและอนเตรเฟสใหใชเปนจ านวนมาก

2.5.2 หลกการท างานพนฐานของภาษาจาวา 1) Encapsulation (การหมหอ) เปนการซอนรายละเอยดการท างานและ

ขอมลไว ภายในไมใหภายนอกสามารถมองเหนได ( เรยกวา Information hiding ) ในทางเดยวกนเมอภายนอก ไมสามารถมองเหนขอมลภายในได กจะไมสามารถท าการแกไขขอมลทซอนอยได

Page 22: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

14

2) Inheritance (การสบทอดคณสมบต) หากมขอมลหนงมรปแบบคลายกบอกขอมลหนงมาก หรอมความแตกตางกนระหวางทงสองขอมลเพยงเลกนอย เรากไมจ าเปนทจะตองสรางขอมลทมความคลายกนขนมาใหมทงหมด การสบทอดคณสมบต กคอการน าคณสมบตบางอยางจากสงเดมทมอยแลว น ามาเพมเตมคณสมบตใหมเขาไปเพอใหกลายเปนสงใหม

3) Polymorphism (การพองรป) หลกการของ Polymorphism การท าใหสงหนง หรอคาตวแปรทรบเขามา สามารถน ามาใชงานไดหลายรปแบบตามความตองการของเรา

2.6 ภาษาพเอชพ (PHP) PHP ยอมาจากค าวา "Personal Home Page Tool" เปน Server Side Script ทมการท างานทฝงของเครองคอมพวเตอร Server ซงรปแบบในการเขยนค าสงการท างานนนจะมลกษณะคลายกบภาษา Perl หรอภาษา C และสามารถทจะใชรวมกบภาษา HTML ไดอยางมประสทธภาพ ซงจะท าใหรปแบบเวบเพจมความสามารถเพมขนในดานของการเขยนโปรแกรม ในการสรางเวบจะใช Script อย 2 แบบดวยกนคอ Server-Side Script เปนลกษณะของภาษาทท างานบนเครอง Server เชน CGI, ASP และ Client-Side Script เป นลกษณะของภาษาท ท างานบนเครองผ ใช เช นJavaScript, VBScript แตทเปนคณสมบตเดนของ PHP กนาจะเปนการตดตอกบโปรแกรมจดการระบบฐานขอมลทมอยมากมาย เชน MySQL, Microsoft Access, Oracle เปนตน

2.6.1 จดเดนของภาษาพเอชพ 1) เปนภาษาทมลกษณะเปนแบบ Open source ผใชสามารถ Download

และน า Source code ของ PHP ไปใชไดโดยไมเสยคาใชจาย 2) เปนสครปตแบบ Server Side Script ดงนนจงท างานบนเวบเซรฟเวอร ไม

สงผลกบการท างานของเครอง Client โดย PHP จะอานโคด และท างานทเซรฟเวอร จากนนจงสงผลลพธทไดจากการประมวลผลมาทเครองของผใชในรปแบบของ HTML ซงโคดของ PHP นผใชจะไมสามารถมองเหนได

3) PHP สามารถท างานไดในระบบปฎบตการทตางชนดกน เชน Unix, Windows, Mac OS หรอ Risc OS อยางมประสทธภาพ เนองจาก PHP เปนสครปตทตอง ท างานบนเซรฟเวอร ดงนนคอมพวเตอรส าหรบเรยกใชค าสง PHP จงจ าเปนตอง ตดตงโปรแกรมเวบเซรฟเวอรไวดวย เพอใหสามารถประมวลผล PHP ได

Page 23: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

15

4) PHP สามารถท างานไดในเวบเซรฟเวอรหลายชนด เชน Personal Web Server( PWS) , Apache, OmniHttpd แ ล ะ Internet Information Service(IIS)

5) ภาษา PHP สนบสนนการเขยนโปรแกรมเชงวตถ (Object Oriented Programming)

6) PHP มความสามารถในการท างานรวมกบระบบจดการฐานขอมลทหลากหลาย ซงระบบจดการฐานขอมลทสนบสนนการท างานของ PHP เชน Oracle, MySQL,FilePro, Solid, FrontBase และ MS SQL เปนตน

7) PHP อนญาตใหผใชสรางเวบไซตซงท างานผานโปรโตคอลชนดตางๆ ได เชน LDAP, IMAP, SNMP, POP3 และ HTTP

8) โคด PHP สามารถเขยนและอานในรปแบบของ XML ได

2.7 MySQL MySQL คอ โปรแกรมระบบจดการฐานขอมล ทพฒนาโดยบรษท MySQL AB มหนาทเกบขอมลอยางเปนระบบ รองรบค าสง SQL เปนเครองมอส าหรบเกบขอมล ทตองใชรวมกบเครองมอหรอโปรแกรมอนอยางบรณาการ เพอใหไดระบบงานทรองรบ ความตองการของผใช เชนท างานรวมกบเครองบรการเวบ (Web Server) เพอใหบรการแกภาษาสครปตทท างานฝงเครองบรการ (Server-Side Script) เชน ภาษา php ภาษา aps.net หรอภาษาเจเอสพ เปนตน หรอท างานรวมกบโปรแกรมประยกต (Application Program) เชน ภาษาวชวลเบสกดอทเนต ภาษาจาวา หรอภาษาซชารป เปนตน โปรแกรมถกออกแบบใหสามารถท างานไดบนระบบปฏบตการทหลากหลาย และเปนระบบฐานขอมลโอเพนซอรท (Open Source)ทถกน าไปใชงานมากทสด

2.7.1 ความสามารถและการท างานของโปรแกรม MySQL มดงตอไปน

1) MySQL ถอเปนระบบจดการฐานขอมล (DataBase Management System (DBMS) ฐานขอมลมลกษณะเปนโครงสรางของการเกบรวบรวมขอมล การทจะเพมเตม เขาถงหรอประมวลผลขอมลทเกบในฐานขอมลจ าเปนจะตองอาศยระบบจดการ ฐานขอมล ซงจะท าหนาทเปนตวกลางในการจดการกบขอมลในฐานขอมลทงส าหรบการ ใชงานเฉพาะ และรองรบการท างานของแอพลเคชนอนๆ ทตองการใชงานขอมลในฐานขอมล เพอใหไดรบความสะดวกในการจดการกบขอมลจ านวนมาก MySQL ท าหนาทเปนทงตวฐานขอมลและระบบจดการฐานขอมล

2) MySQL เปนระบบจดการฐานขอมลแบบ relational ฐานขอมลแบบ relational จะท าการเกบขอมลทงหมดในรปแบบของตารางแทนการเกบขอมลทงหมดลงใน

Page 24: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

16

ไฟล เพยงไฟลเดยว ท าใหท างานไดรวดเรวและมความยดหยน นอกจากนน แตละตารางทเกบขอมลสามารถเชอมโยงเขาหากนท าใหสามารถรวมหรอจด กลมขอมลไดตามตองการ โดยอาศยภาษา SQL ทเปนสวนหนงของโปรแกรม MySQL ซงเปนภาษามาตรฐานในการเขาถงฐานขอมล

3) MySQL แจกจายใหใชงานแบบ Open Source นนคอ ผใชงาน MySQL ทกคนสามารถใชงานและปรบแตงการท างานไดตามตองการ สามารถดาวนโหลดโปรแกรม MySQL ไดจากอนเทอรเนตและน ามาใชงานโดยไมมคาใชจายใดๆ

ในระบบปฏบตการ Red Hat Linux นน มโปรแกรมทสามารถใชงานเปนฐานขอมลใหผดแลระบบสามารถเลอกใชงานได หลายโปรแกรม เชน MySQL และ PostgreSQL ผดแลระบบสามารถเลอกตดตงไดทงในขณะทตดตงระบบปฏบตการ Red Hat Linux หรอจะตดตงภายหลงจากทตดตงระบบปฏบตการกได อยางไรกตาม สาเหตทผใชงานจ านวนมากนยมใชงานโปรแกรม MySQL คอ MySQL สามารถท างานไดอยางรวดเรว นาเชอถอและใชงานไดงาย เมอเปรยบเทยบประสทธภาพในการท างานระหวางโปรแกรม MySQL และ PostgreSQL โดยพจารณาจากการประมวลผลแตละค าสง นอกจากนน MySQL ถกออกแบบและพฒนาขนมาเพอท าหนาเปนเครองใหบรการรองรบการจดการกบฐานขอมลขนาดใหญ ซงการพฒนายงคงด าเนนอยอยางตอเนอง สงผลใหมฟงกชนการท างานใหมๆ ทอ านวยความสะดวกแกผใชงานเพมขนอยตลอดเวลา รวมไปถงการปรบปรงดานความตอเนอง ความเรวในการท างาน และความปลอดภย ท าให MySQL เหมาะสมตอการน าไปใชงานเพอเขาถงฐานขอมลบนเครอขายอนเทอรเนต

2.8 Power Supply 12V 150W (12.5A) Switching Power Supply นนถกสรางขนมาเพอใชในงานอเลกทรอนกส เปนแหลงจายไฟใหกบอปกรณตางๆ และสามารถเปลยนแรงดนไฟจากไฟสลบโวลตสงใหเปนแรงดนไฟตรงโวลตต าได ซงองคประกอบพนฐานนนโดยทวไปจะคลายกนและสงทส าคญทสดขององคประกอบนคอ คอนเวอรเตอร Switching Power Supply จะประกอบดวย 3 สวนใหญๆ คอ วงจรฟลเตอรและเรกตไฟเออร ท าหนาทแปลงแรงดนไฟสลบเปนไฟตรง คอนเวอรเตอร ท าหนาทแปลงไฟตรงเปนไฟสลบความถสง และแปลงกลบเปนไฟตรงโวลตต า และวงจรควบคมท าหนาทควบคมการท างานของคอนเวอรเตอร เพอใหไดแรงดนเอาตพตตามตองการ

Page 25: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

17

รปท 2.14 แผนผง Switching Power Supply

การคงคาแรงดนจะท าโดยการปอนคาแรงดนท Output กลบมายงวงจรควบคม เพอควบคมใหการน ากระแสมากขนหรอนอยลงตามการเปลยนแปลงของแรงดนท Output ซงจะมผลท าใหแรงดน Output คงทได

รปท 2.15 ภาพวงจร Switching Power Supply

Page 26: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

18

2.9 Virtual Private Server Virtual Private Server หรอ เรยกส นๆ วา VPS เป นการจ าลองแบ งเครอง Server ประสทธภาพสงออกเปน Server เสมอนจ านวนหนงโดย Server เสมอนแตละตวนจะถกเรยกวา Virtual Machine และท างานไดเสมอนกบ Dedicate Server และ VPS แตละเครองนจะแยกการท างานออกจากกนโดยสนเชงสามารถลง OS หรอโปรแกรมตางๆไดอยางอสระ นอกจากนหาก VPS ตวใดตวหนงเสยหายจะไมมผลกบการท างานของ VPS ตวอนๆ ในระบบ 2.9.1 ขอดของ VPS

1) ประสทธภาพสงและเสถยรกวา Shared Hosting เพราะไมตองแบงการใชงานกบใครเหมอนการใชบรการ Shared Hosting

2) ใหความเปนสวนตวกวา Shared Hosting และมความยดยนมากกวาเพราะสามารถ ปรบเปลยน Configurations ของซอฟทแวรตางๆไดตามใจชอบ เชน Apache, PHP, MySQL และ อนๆ

3) ป ระห ย ด ม าก เม อ เท ย บ ก บ ร าค าข อ ง Dedicated Server แ ต ไดประสทธภาพใกลเคยงกน

4) ม IP Address แยกอสระเปนของตนเอง 5) VPS นนเหมาะส าหรบธรกจขนาดกลางทตองการความเสถยรและความ

ปลอดภยสง หรอเวบไซตทใชทรพยากรสง

รปท 2.16 VPS Server

Page 27: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

19

2.10 L298N Development Board L298P เปนโมดลส าหรบขบ DC Motor ไดถง 2 ตว โดยใช L298 H-bridge สามารถขบได

2 แอมปตอ 1 ชองสญญาณ ทงนยงใชในการขบ Step Motor ไดอกดวย รายละเอยดของโมดล

L298N Development Board มดงน

- Out 1: Motor A lead out

- Out 2: Motor A lead out

- Out 3: Motor B lead out

- Out 4: Motor B lead out

- GND: Ground

- 5v: 5v input (unnecessary if your power source is 7v-35v, if the

power source is 7v-35v then it can act as a 5v out)

- EnA: Enables PWM signal for Motor A

- In1: Enable Motor A

- In2: Enable Motor A

- In3: Enable Motor B

- In4: Enable Motor B

- EnB: Enables PWM signal for Motor B (Please see the "Arduino

Sketch Considerations" section)

Specifications:

- Double H bridge Drive Chip: L298N

- Logical voltage: 5V Drive voltage: 5V-35V

- Logical current: 0-36mA Drive current: 2A (MAX single bridge)Max

power: 25W

- Dimensions: 43 x 43 x 26mm

- Weight: 26g

*Built-in 5v power supply, when the driving voltage is 7v-35v

Page 28: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

20

2.11 Breadboard Breadboard ถอเปนอปกรณส าคญทจะชวยใหเราออกแบบวงจรอเลคทรอนกสไดงายขน

เพราะการใชงาน Breadboard ไมตองใชการบดกวงจร เพยงแคใชสายไฟเสยบลงไปทรบนบอรดก

สามารถเชอมตอจดในวงจรไดตามทเราตองการ การเชอมตอภายในของ Breadboard นนจะแบง

ออกเปนสองบรเวณ

1) บรเวณทอยดานในของ Breadboard จาก รปท 2.17 ในบรเวณภายในกรอบสเหลยมส

แดง รทง 5 รทอยในแนวตามแถมสเขยว จะเชอมตอกน และถอวาเปนจดเดยวกน

รปท 2.17 ดานใน Breadboard

2) บรเวณทอยดานนอกของ Breadboard จากรปท 2.18 บรเวณภายในกรอบสเหลยมส

แดง รทงหมดในแนวยาวทตามแถบสเขยว จะเชอมตอกน และถอวาเปนจดเดยวกน

รปท 2.18 ดานนอก Breadboard

Page 29: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

21

บทท 3 ระบบทน าเสนอ / การด าเนนงาน

3.1 โครงสรางและการออกแบบระบบ

แบงเปน 2 สวน ไดดงน 1) ฮารดแวร (Hardware) คอ อปกรณตางๆทจบตองไดน ามาออกแบบและประกอบกน

เปนชนงาน 2) ซอฟตแวร (Software) คอ แอปพลเคชนทออกแบบไวส าหรบควบคมสงการอปกรณ

ตางๆ

รปท 3.1 องคประกอบของระบบทงหมดโดยรวม

จากรปท 3.1 แสดงใหเหนวาผใชสามารถควมคมการท างานของเครองใหอาหารสตวเลยงไดโดยตดตอผานทางแอปพลเคชนบนสมารทโฟน โดยมฐานขอมลอยบน VPS ม PHP Script ท าหนาทเปนตวกลางในการตดตอสอสาร และฝงRaspberry Pi จะม Python Script ท าหนาทควบคมการท างานของอปกรณตางๆ ไดแก DC Gear Motor,Load Cell และม NginX และ RTMP Module ท าหนาทสตรมมงกลองเวบแคมขนไปท VPS Server โดยท VPS Server จะสตรมมงโดยใชพอต 1935 (Standard Port For RTMP) เพอใหผใชเรยกดผานทาง Application

Page 30: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

22

รปท 3.2 สวนประกอบของ Automatic Box Feeder

จากรปท 3.2 แสดงใหเหนถงสวนประกอบของ Automatic Box Feeder โดยในสวนของ Software จะแบงเปน 2 สวน คอ 1) Main Program โปรแกรมหลกเปนสวนของแอปพลเคชนบนสมารทโฟนโดยมฟงกชน (Functions) หลกๆไดแก มอนเตอรการท างานของระบบ (Log), กดดกลองเวบแคม (Webcam),ระบบการใหอาหาร (Feed), ระบบการแจงเตอนเมออาหารหมด และ 2) Sub Program โปรแกรมยอยคอค าสงการท างานของสวนตางๆเปนภาษาไพทอน ม 2 ฟงกชน(Functions) หลกๆไดแก 1) Webcam ส าหรบเรยกดสตรมมงผานทาง VPS Server 2) Feed ควบคมระบบการใหอาหารโดยสามารถเลอกไดวาจะตงแบบอตโนมตหรอแบบแมนนวล (Manual)

3.2 รายละเอยดโครงสรางขององคประกอบ

รายละเอยดโครงสรางขององคประกอบแตละสวน ไดมการอธบายรายละเอยดโดยอางองจากรปท 3.1 ดงน

1) สวนเชอมตอระหวางผใชงาน (User) กบ สมารทโฟน (Smart Phone)สวนนเปนการควบคมการท างานของเครองใหอาหารสตวผานแอปพลเคชนบนสมารทโฟนโดยผใชท าการเปดแอปพลเคชนขนมากจะเขาสหนาหลกของแอปพลเคชนและสงการระบบ เชน การเรยกดกลองเวบแคม, ตงคาการสงการระบบใหอาหาร เปนตน

Page 31: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

23

2) สวนควบคมวงจรระบบและสวนประมวลผลของเครอง (Programming) สวนนเปนสวนทรบค าสงการท างานจากผใชงาน (User) โดยสงการจากแอปพลเคชนบนสมารทโฟน สงตอไปยง VPS Server โดยม PHP Script เปนตวกลางในการตดตอกบฐานขอมลบน VPS Server และม Python Script ใน Raspberry Pi คอยควบคมการท างานของอปกรณตางๆเชน สงการใหมอเตอรท าการหมนเพอเทอาหาร

3.3 การออกแบบโปรโตคอลทใชเชอมตอกนระหวางอปกรณของผใช (User) กบ Raspberry Pi

รปท 3.3 โครงสรางการตดตอสอสารระหวางอปกรณของผใชกบ Raspberry Pi

จากรปท 3.3 แสดงใหเหนถงโครงสรางการตดตอสอสารระหวางอปกรณของผใชกบ Raspberry Pi โดยผใชท าการเปดแอปพลเคชนและสงการหรอตงคาตางๆผานแอปพลเคชน โดยจะม VPS Server เปนตวกลางในการประสานงานระหวางผใชกบ Raspberry Pi

Page 32: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

24

ตารางท 3.1 ตารางแสดงฟงกชน (Functions) ของระบบ

3.4 การออกแบบแอปพลเคชนส าหรบสงการ Automatic Box Feeder ผใชสามารถควบคมเครองใหอาหารสตวไดโดยใชแอปพลเคชน Pet Feeder ซงรองรบ

อปกรณทมระบบปฏบตการเอนดรอย (Android) และมแพลตฟอรม (Platform) 4.4.2 ขนไป โดยแอปพลเคชนถกพฒนาโดยใช Android Studio ซงเปนโปรแกรมส าหรบพฒนาแอปพลเคชนระบบปฏบตการเอนดรอยโดยเฉพาะดวยภาษาจาวา

รปท 3.4 ไอคอน (Icon) แอปพลเคชน Pet Feeder

Page 33: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

25

รปท 3.5 หนาหลกของแอปพลเคชน

จากรปท 3.5 เมอผใชท าการเรยกใชงานแอปพลเคชน จะเขาสหนาหลกผใชสามารถควบคมเครองใหอาหารสตวไดโดยใชฟงกชนตางๆในการควบคม ซงมฟงกชนดงน

1) Auto คอ การตงคาใหเครองใหอาหารสตวท างานอตโนมต โดยทไมตองรอค าสงจากผใช 2) Manual คอ การใหอาหารดวยมอ สามารถตงคาปรมาณการใหอาหารในแตละครงได

เมอใชโหมด Manual แลว โหมด Auto จะไมท างาน 3) Log คอ Monitor การท างานของเครองใหอาหารสตว 4) ICON Webcam ส าหรบเรยกดสตรมมงโดยจะเรยกผานแอปพลเคชนทสามารถเลนไฟล

FLV ได เชน VLC

Page 34: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

26

รปท 3.6 การแจงเตอนเมออาหารใกลจะหมด

จากรปท 3.6 เมออาหารในถาดใกลจะหมดจะมการแจงเตอนผานแอปพลเคชนทกๆ 5 วนาท

Page 35: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

27

รปท 3.7 การมอนเตอรการท างานของระบบ

จากรปท 3.7 เปนการมอนเตอรเพอดการท างานของระบบโดยจะแสดง ล าดบ ปรมาณอาหารในถาด วนท ระยะเวลาของเหตการณ

Page 36: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

28

3.5 การออกแบบวงจรของอปกรณโดยรวม

รปท 3.8 การตอวงจรโดยรวม

จากรปท 3.8 เปนการตอวงจรโดยรวมของอปกรณ มรายละเอยดดงน - สเทา GROUND รวมตอกบพาวเวอซพพลาย - ส าด า ขาควบคมมอเตอร ขาท 1 ตงเปน - = 0 - สขาว ขาควบคมมอเตอร ขาท 2 (HIGH = ปด , LOW = เปด) - สสม ตอกบ RaspberryPi ส าหรบควบคมมอเตอร (ขา 17) - แดง,เหลอง ขา enable ของมอเตอร ใหท างานปกคกนตอระหวาง L298N Development

Board กบบอรดทดลอง - HX711 ตอกบขา RaspberryPi ขาท 27 เปน DT ขาท 22 เปน Clock

Page 37: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

29

3.6 Flowchart การท างานของระบบโดยรวม

รปท 3.9 Flowchart การท างานของระบบโดยรวม

Page 38: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

30

บทท 4 ผลการทดลอง / ผลการด าเนนงาน

4.1 วธการทดลองและผลการทดลอง

การทดลองแบงออกเปน 4 ตอน ดงน 1) การทดลองสงการ DC Gear Motor ใหหมนเพอเทอาหารผานแอปพลเคชน 2) การทดลองสงการสตรมมงเพอดกลองเวปแคมผาน VPS โดยเปดจากโปรแกรม VLC 3) การทดลองการตงคา DC Gear Motor ใหหมนอตโนมตเมอปรมาณอาหารในถาดต า

กวาทก าหนด 4) การทดลองฟงกชนแจงเตอนเมออาหารในถาดใกลจะหมด

4.1.1 การทดลองสงการ DC Gear Motor ใหหมนเพอเทอาหารผานแอปพลเคชน ทดสอบการท างานของฟงกชนโดยการเลอกฟงกชน Manual ในหนาหลกของแอปพลเคชน โดยก าหนดปรมาณอาหารทจะให โดยแอปพลเคชนจะสงคาปรมาณอาหารทก าหนดไปท าการแกไขคา feed_val ในฐานขอมลท VPS Server และบน Raspberry Pi จะม Python Script รนอยเพออานคา feed_val จากฐานขอมลบน vps และสง DC Gear Motor หมนเพอเทอาหาร

รปท 4.1 การแกไขคาในโหมด manual ผลการทดลองท 4.1.1 จากการทดลองท 4.1.1 การทดลองสงการ DC Gear Motor ใหหมนเพอเทอาหารผานแอปพลเคชน พบวาเมอสมผสหนาจอทปม Manual ในหนาหลกของแอปพลเคชนสามารถสงการให DC Gear Motor หมนเพอเทอาหารและหยดเทไดจรงตามทตงไว 4.1.2 การทดลองสงการสตรมมง Webcam ทแอปพลเคชน ทดสอบการท างานของฟงกชน Streaming Webcam โดยการสมผส

หนาจอในสวนของ Webcam

Page 39: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

31

ผลการทดลองท 4.1.2 จากการทดลองท 4.1.2 การทดลองสงการเรยกดสตรมมงกลองเวปแคมทแอปพลเคชน พบวาสามารถเรยกดสตรมมงไดจรงทกครงแตจะมดเลยประมาณ 8 วนาท ซงเปนคาทยอมรบได

4.1.3 การทดลองการตงคาสง DC Gear Motor ใหหมนอตโนมตเมออาหารใน ถาดใกลจะหมดโดยวดจากปรมาณอาหารในถาดผานแอปพลเคชน เปนการทดสอบฟงกชนการท างานของโหมด Auto โดยเปนการตงคาใหเท อาหารอตโนมต โดยก าหนดปรมาณอาหารขนต าในถาด และสมผสปม UPDATE เพอสงการ

ผลการทดลองท 4.1.3 จากการทดลองท 4.1.3 การทดลองการตงคา DC Gear Motor ใหหมนอตโนมตเมออาหารในถาดใกลจะหมดโดยวดจากปรมาณอาหารในถาดผานแอปพลเคชน พบวาสามารถท างานไดจรงโดยแอปพลเคชนจะท าการแกไขคา feed_val และ คา mode เปน auto ในฐานขอมลบน VPS Server และบน Raspberry Pi จะม Python Script รนอยเพอตรวจสอบคาในฐานขอมลบน VPS Server และสงใหมอเตอรท าการหมนเพอเทอาหารอตโนมต

รปท 4.2 การแกไขคาในโหมด auto

4.1.4 การทดลองฟงกชนแจงเตอนเมออาหารในถาดใกลจะหมด เปนการทดสอบระบบแจงเตอนโดยใหน าหนกในถาดอาหารต ากวา 20 กรม เพอใหมการแจงเตอนผานแอปพลเคชน ผลการทดลองท 4.1.4 จากการทดลองท 4.1.4 การทดลองฟงกชนแจงเตอนเมออาหารในถาดใกล จะหมด โดยมการแจงเตอนจรงผานแอปพลเคชนทกๆ 5 วนาท เปนการสราง Service ขนมาเพอตรวจสอบปรมาณอาหารในถาดโดยจะตรวจสอบจากคาจาก ฐานขอมลบน VPS (http://167.114.9.44/api/getlog.php?id=1&limit=1) เมอ ปรมาณอาหารในถาดต ากวา 20 กรม จะแจงเตอน พบวาสามารถใชงานไดจรง

Page 40: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

32

บทท 5 สรปผลการด าเนนงาน

5.1 สรปผลการด าเนนงาน

ผลจากการด าเนนงานต งแตบทท 1 จนถงบทท 4 สรปผลการทดลองไดวาบอรด Raspberrypi สามารถน าไปประยกตใชงานไดหลากหลายและสามารถใชงานไดจรงถงแมวาประสทธภาพจะไมเทยบเทากบการทท าดวยตนเอง แตเปนการเพมความสะดวกสบาย การประหยดเวลาในชวตประจ าวนมากยงขนซงถอวาทดแทนกนได 5.2 ปญหาและอปสรรคของการด าเนนการ

บอรด Raspberrypi มความเรวในการประมวลผลคอนขางต า ท าใหบางครงอาจจะรวนและท างานชาไปบาง การใชงานผาน Internet การใช VPN , Forward Port มความย งยากและประสทธภาพต า 5.3 แนวทางในการแกปญหา

เนองจากบอรด Raspberrypi มความเรวในการประมวลผลคอนขางต า จงตองใชงานในโหมด CLI จะมประสทธภาพดกวาโหมด GUI การสงการและการสตรมมงผาน Internet ควรเลอกใช VPS ทมประสทธภาพเพยงพอแกการใชงาน โดยใชงานงายและประสทธภาพดกวาการท า VPN, Forward Port แตกยงสตรมมงไดชากวาภายในเครอขายเดยวกนอยมาก แตอยในระดบทยอมรบได 5.4 ขอเสนอแนะในการพฒนาโครงงานตอไปในอนาคต

ส าหรบระบบ Automatic Pet Feeder สามารถน าไปประยกตใชงานใหอาหารสตวไดหลายชนด อาจจะน าไปพฒนาตอยอดในการใหอาหารสตวหลายๆตวพรอมกนได เหมาะแกการใชในฟารมเลยงสตวซงท าใหประหยดเวลาในการใหอาหารสตวเปนอยางมาก นอกจากนอาจจะเพมการท างานอนๆลงไปดวยตามความเหมาะสมของผพฒนา

Page 41: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

33

เอกสารอางอง [1] Raspberry Pi ตดตง OS ดวยไฟล Image [Online], Available https://playelek.com/rpi-os-image [2] Servo ข น า ด เล ก Micro Servo Tower Pro SG90 Servo Micro [Online] , Available https://www.arduinoall.com/product/6/servo-ขนาด เล ก -micro-servo-tower-pro-sg90-servo-micro [3] Python คออะไร [Online], Available http://www.mindphp.com/คมอ/73-คออะไร/2417-python-คออะไร.html [4] [ Java] บ ท ท 2 : Java ค อ อ ะ ไ ร ? ค ว า ม ส า ม า ร ถ ข อ ง Java [Online] , Available http://www.thaigraph.com/thread-2846-1-1.html [5] PHP คออะไร ใชท าอะไร [Online], Available https://www.gotoknow.org/posts/428663 [6] โหลดเซลลเซนเซอรเครองชงน าหนกLoad Cell Weight Sensor 5Kg [Online], Available http://www.mechashop.com/store/product/Load_Cell-2135039-th.html [7] ก า ร ต ด ต ง ร า ส เ บ อ ร พ า ย แ บ บ ไ ม ต อ ง ต อ จ อ ภ า พ [ Online] , Available http://www.raspberryhome.net [8] ก า ร ต ด ต ง FTP ส า ห ร บ ถ า ย โ อ น ไ ฟ ล [ Online], Available https://raspberrypith.blogspot.com/2 0 1 4 / 0 1 / vsftpd-ftp-server-file.html

Page 42: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 1

ภาคผนวก ก การตดตงระบบปฏบตการและการตดตง FTP Server

Page 43: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 2

ก.1 การตดตงระบบปฏบตการลงบนบอรดราสเบอรรพายแบบไมตองตอจอภาพ สงทตองมเพอตดตงและตงคาเรมตนใหกบบอรดราสเบอรรพาย

1) คอมพวเตอรทม Windows 7, 8, 8.1, 10 หรอ Mac os x 2) ตดต งโปรแกรมWin32 Disk Imager ส าหรบ เขยน Raspbain ลง Micro SD จาก

https://sourceforge.net/projects/win3 2 diskimager/files/latest/downloadหรอ https://sourceforge.net/projects/win32diskimager/

3) ตดต งโปรแกรมPuttyเพอใช เปน Terminal ในการตดต งโปรแกรมตางๆ จากhttp://www.putty.org/

4) ตดตงโปรแกรมWinSCPเพอใชเปน File Explorer ชวยใหเราไปเปลยนไปท างานในโฟลเดอรตางๆ ไดรวดเรวกวา และยงสามารถใชเปน Text Editor ชวยในการเขยนโปรแกรมตางๆ และสงงาน Raspberry PI ไดอยางสะดวก โดยดาวนโหลดโปรแกรมนไดจาก https://winscp.net/eng/download.php#download2

5) ตดต งโปรแกรมWireless Network Watcher ส าหรบตรวจสอบ IP Address ท Router จ า ย ให ก บ Raspberry PI โ ด ย ด า ว น โ ห ล ด โป ร แ ก ร ม น ไ ด จ า กhttp://www.nirsoft.net/utils/wireless_network_watcher.html

6) Raspberry PI (ในตวอยางน ใช ราสเบอรพาย 3 (Raspberry PI3) 7) Micro SD Card ขนาด 8 GB หรอ 16 GB หรอ 32 GB หรอ 64 GB

เนองจากการตดตงและการตงคาเรมตนใหกบ Raspbian บน Raspberry Pi นนท าได 2 แบบคอ (1) แบบไมตอจอภาพเมาสและคยบอรด (2) แบบตอจอภาพเมาสและคยบอรด แบบแรกนนเราจะตองเสยบสาย LAN จาก Raspberry PI3 เขา Router โดยตรง เพอให Router จาย IP Address ผานสาย LAN เพอใหเราสามารถเชอมตอเขากบ IP Address แลวจงจะสามารถตงคา WiFi เมอ Connect WiFi ไดแลวจงถอดสาย LAN ได สวนแบบท 2 นน เราไมจ าเปนตองตอสาย LAN เขา Router แตจะตองตอจอภาพมอนเตอรหรอจอทวตอเขากบพอรท HDMI และเสยบเมาสและคยบอรดตอ เขากบพอรท USB บน Raspberry PI แลวจงบท(Boot)เครองเขาส โหมดจอภาพ Desktop แลวจ ง Connect WiFi ได โดยตรง งายเหมอนๆ กบการตอ WiFi บนระบบปฏบตการ Windows อยางไรกตาม ในการตงคาเรมตน เราสามารถเลอกทจะตงคาผาน Terminal หรอผาน Desktop ได แตวธทนยมใชงานนนเปนแบบวธแรก ซงเราไมมทงจอภาพเมาสและคยบอรดตอพวงกบ Raspberry PI ในกรณน เราจะเลอกใชวธ

Page 44: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 3

แรก (ไมมจอภาพเมาสและคยบอรด ) โดยมขนตอนการตดตง Raspbian ลงบน Raspberry PI3 ดงตอไปน

1) ดาวนโหลดRaspbian (ราสเบยน) จาก https://www.raspberrypi.org/downloads/ โดยเลอกดาวนโหลดRaspbian Jessie with PIXEL หรอ OS ทตองการ แบบ .zip หรอแบบ .torrent (หากเลอกแบบ.torrent จะตองม Utorrent หรอซอฟทแวร Torrent อนๆ ตดตงในเครอง) ตามสะดวก ซงจะได.zipไฟลเชนเดยวกน

2) เมอแตกไฟล.zipออกมาจะไดไฟล.imgแลวใส Micro SD Card เขาเครองคอมพวเตอร แลวเรยกโปรแกรม Win32 Disk Imager ออกมาใชงาน คลกปม Browse(1)แลวไปยงโฟลเดอรทเกบไฟล.imgและเลอกไฟล.imgแลวเลอกไดรฟ (2) ทบรรจ Micro SD แลวคลก ปม Write(3)เมอปรากฏไดอะลอคเตอน คลกปม Yes แลวรอจนกระทงปรากฏไดอะลอคWrite Successful แลวคลกปม OK แสดงวาระบบปฏบตการ Raspbain ไดถกบรรจลงการด Micro SD เรยบรอยแลว

รปท ก.1 Win32 Disk Imager 3) เปดโหมด SSH (Secure Shell) เพอใหสามารถรโมทควบคมการตงคาเรมตนผาน PC

หรอ Mac ได อนง ทง Raspbian Jessie with PIXEL และ Raspbian Jessie Lite มการปดโหมด SSH ไวเหมอนๆ กน เราสามารถใชวธเดยวกนในการเปดโหมด SSH โดยเราเพยงสรางเทกซ ไฟลชอ ssh เกบไวในรท (Root)ของการด Micro SD เท านน โปรแกรมกจะเปดโหมด SSH ใหโดยอตโนมต โดยเราสามารถเรยกหนาตาง File Explorer ดงรปท ก.2 แลวเลอกไดรฟ SD Card(4) แลวคลกขวาบนพนทวางของหนาตางไฟลดานขวา (5) แลวเลอกค าสง New(6) => Text Document(7) แลวเปลยนชอไฟลเปน ssh (ใชตวพมพเลก) ไมตองใสนามสกลไฟล ไมจ าเปนตองมขอมลใดๆ ในไฟลหรอจะพมพขอความใดๆ กไดภายในไฟล ตววจสอบใหแนใจวาไฟล ssh ไมมนามสกลพวงทาย

Page 45: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 4

รปท ก.2 เปดโหมด SSH 1

รปท ก.3 เปดโหมด SSH 2 การตงคาเรมตนใหกบ Raspbian 1) ถอดการด Micro SD ออกจากเครองคอมพวเตอร โดยกอนจะใส Micro SD เขาไปยง

Raspberry PI3 เราจะตองแนใจวายงไมจายไฟหรอยงไมเสยบสายอะแดปเตอรเขาตวเครอง Raspberry PI3 เพอปองกนการเสยหายทมกจะเกดกบ Micro SD โดยคว าดานทเปนยหอการด Micro SD ลง หงายสวนทเปนลายอนเตอรเฟสทองเหลองของ Micro SD แลวเสยบ Micro SD เขาเครอง Raspberry PI3

2) เม อ ใส Micro SD Card เรยบรอยแล ว เส ยบสาย LAN เข าท พอรท LAN ของ Raspberry PI3 ปลายสายอกดานหนงเสยบเขาทพอรท LAN ทยงวางอยของเราเตอร แลวเรม Boot เครอง โดยจายไฟเขา Raspberry PI หรอเสยบสาย Micro USB เขา

Page 46: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 5

3) ตวเครอง Raspberry PI โปรแกรมจะเรมบทเขาสโหมด Desktop (แตเราจะมองไมเหนเพราะไมมจอภาพ ถามจอภาพ เราสามารถเชอมตอ WiFi ในขนตอนนได)

4) เรยกโปรแกรมWireless Network Watcher ออกมาใชงาน แลวมองหา Raspberry PI Foundation(8) เราจะพบ IP Addresss(9) ของเครองดงรปหากไมปรากฏ IP Address (9) ใหตรวจสอบทพอรท LAN ของ Raspberry PI3 วามไฟสเขยวและเหลองตดหรอไม หากไมตด ใหตรวจสอบปลายสายดานทเสยบกบพอรทของเราเตอร

รปท ก.4 Wireless Network Watcher

5) เรยกโปรแกรม Putty ออกมาใชงาน แลวปอน IP Address ใน Host Name(10) ใหแนใจวาปรากฏหมายเลขพอรท 22(11) ใหแนใจวาปม SSH(12) ถกเลอก เราสามารถบนทกการตงคาไวใชงานในครงตอๆ ไป โดยตงชออะไรกไดใน Saved Sessions(13) เพอสะดวกในการใชงาน แลวคลกปม Save(14) เพอบนทกชอ แลวคลกปม Open(15)เพอเชอมตอไปยง Raspberry PI ดงรปท ก.5

Page 47: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 6

รปท ก.5 SSH by Putty

6) ปอนชอยสเซอร pi (16) และปอนพาสเวรด raspberry (17) (ในขณะทปอนพาสเวรดจะไมปรากฏเครองหมาย **** ) เมอปอนพาสเวรดเรยบรอยแลว จะปรากฏพรอมพ(Prompt)รอรบค าสงpi@raspberrypi:~ $(18) ดงรปท ก.6

รปท ก.6 Configuration 1

Page 48: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 7

7) ก าหนดคาเรมตน โดยพมพค าสง pi@raspberrypi:~ $ sudo raspi-config จะปรากฏ

จอภาพดงรปท ก.7

รปท ก.7 Configuration 2

8) เลอก Expand Filesystem(19)จะปรากฏจอภาพดงรปท ก.8 โปรแกรมจะรายงานวารทพารทตชนไดถกปรบขนาด ระบบไฟลจะถกขยายเมอบท(Boot)เครองในครงตอไป

รปท ก.8 Configuration 3

Page 49: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 8

9) เปลยนยซเซอรพาสเวรด โดยเลอก Change User Password (20)แลวปอนพาสเวรดใหมในบรรทด Enter new UNIX password: ปอนพาสเวรดยนยนในบรรทด Retype new UNIX password:

10) ก าหนดโหมดการบทเครองใหเขาส Desktop โดยไมตอง Log in โดยเลอก Boot Options(21) => B1 Desktop / CLI => B4 Desktop Autologin Desktop GUI, Automatically logged in as ‘pi’ user แลวกดปม Tab เพอเลอกปม OK แลวกดปม Enter อนทจรงในขอน เปนคาทโปรแกรมก าหนดใหมาโดยอตโนมตอยแลว

11) ก าหนดภาษาไทย โดย เล อก Internationalization Options(22)=> I1 Change Locale เมอปรากฏไดอะลอคดงรปท ก.9 คนหาและกดปม Space bar เพอยกเลกเครองหมายดอกจน * ออกจากภาษาองกฤษ en_GB.UTF-8 UTF-8 คนหาและกดปม Space bar ใหปรากฏเครองหมายดอกจน * หนาภาษาองกฤษ en_US.UTF-8 UTF-8 คนหาและกดปม Space bar ใหปรากฏเครองหมายดอกจน * หนาภาษาไทยth_TH.UTF-8 UTF-8 แลวตรวจสอบใหแนใจวาไมปรากฏเครองหมายดอกจน * หนาภาษาอนๆ ใหมเพยง en_US.UTF-8 UTF-8 และ th_TH.UTF-8 UTF-8 เทานน ถามเครองหมายดอกจนหนาตวเลอกภาษาอนๆ ใหปลดออกทงหมด แลวกดปม Tab เพอเลอกปม OK แลวกดปม Enter แลวก าหนดภาษาใชงาน โดยเลอก Default locale for the system environment: เปนภาษาองกฤษ en_US.UTF-8 แลวกดปม Tab เพอเลอกปม OK แลวกดปม Enter

รปท ก.9 Configuration 4

Page 50: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 9

รปท ก.10 Configuration 5

รปท ก.11 Configuration 6

12) ก าหนด Time Zone โดยเลอก Internationalization Options(22)=> I2 Change Timezone เมอปรากฏไดอะลอคใหเลอก Asia => Bangkok แลวกดปม Tab เพอเลอกปม OK แลวกดปม Enter ดงรปท ก.12 และ ก.13

Page 51: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 10

รปท ก.12 Configuration 7

รปท ก.13 Configuration 8 12) ก าหนดการจดวางคยบอรดใหตรงกบคยบอรดทเราใชงานโดยเลอก Internationalization Options(22)=> I3 ChangeKeyboard Layout เมอปรากฏไดอะลอคใหเลอกรปแบบ Keyboard layout ตามตองการแลวกดปม Tab เพอเลอกปม OK แลวกดปม Enter 13) ก าหนดประ เทศของการใช WiFi โดย เล อก Internationalization Options(22)=> I4 ChangeWi-Fi Country เมอปรากฏไดอะลอคใหเลอกรปแบบ TH Thailand ตามตองการแลวกดปม Tab เ พ อ เ ล อ ก ป ม OK แ ล ว ก ด ป ม Enter แ ล ว ก ด ป ม Enter อ ก ค ร ง

Page 52: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 11

14) ขอนเปนตวเลอก เราสามารถขามไปท าตอในขอ 15) ได แตเราควรทราบไวในเบองตนวา ถาเราจะใชงานอปกรณประเภทใด เราจะตองเปดโหมดการใชงานอนเตอรเฟสใน Configuration ตางๆ เสยกอน หากเราไมไดเปด แตน าอปกรณนนมาเชอมตอกบราสเบอรพาย อปกรณเหลานนจะไมท างาน เราสามารถเปดโหมดคอนฟกเกอเรชนตางๆ ไดโดยเลอก Advanced Options (23) => จะปรากฏไดอะลอคดงรปขางลางนหากเรามแผนทจะใชงาน Raspberry PI บนเดสทอปกบโปรแกรมกราฟกหรอโปรแกรมทใชหนวยความจ าของ GPU เราควรเลอก A3 Memory Split แลวก าหนดหนวยความจ าเปน 512 หากตองการเปดหรอปดโหมด SSH ใหเลอก A4 SSH หากตองการใชสมารทโฟนหรอเครองคอมพวเตอรเปนจอภาพแสดงเดสทอปของราสเบอรรพายเพอควบคมหรอเรยกใชงานโปรแกรมตางๆ ใหเลอก A5 VNC จะปรากฏขอความ Would you like the VNC Server to be enabled? ใหกดปม Tab ไปทตวเลอก Yes แลวกดปม Enter หากตองการใชงานอนเตอรเฟส SPI ใหเลอก A6 SPI จะปรากฏขอความ Would you like the SPI interface to be enabled? ใหกดปม Tab ไปทตวเลอก Yes แลวกดปม Enter หากตองการใชงานอปกรณทสนบสนน I2C เราจะตองเปดโหมด I2C เสยกอน โดยเลอก A7I2C จะปรากฏขอความ Would you like the ARM I2C interface to be enabled? ใหกดปม Tab ไปทตวเลอก Yes แลวกดปม Enter หากตองการใชงานเชอมราสเบอรพายตอแบบ Serial เราจะตองเปดโหมด Serial เสยกอน โดยเลอก A8 Serial จะปรากฏขอความ Would you like a login shell to be accessible over serial? ใหกดปม Tab ไปทตวเลอก Yes แลวกดปม Enter หากตองการใหเสยงสงไปทล าโพงทเชอมตอผานแจค(Headphone Jack)หรอตองการใหเสยงไปออกทพอรท HDMI ใหเลอก A9 Audio เราสามารถเลอก 0 Auto หรอเลอก 1Force 3.5mm (‘headphone’) jack หรอเลอก 2 Force HDMI แลวกดปม Tab ไปทตวเลอก Yes แลวกดปม Enter หากตองการใชงานอนเตอรเฟสแบบ One-Wire ใหเล อ ก AA 1-Wire จ ะ ป ร า ก ฏ ข อ ค ว าม Would you like the one-wire interface to be enabled? ใหกดปม Tab ไปทตวเลอก Yes แลวกดปม Enter หากตองการใช GPIO เปน Server เพอควบคมจากระยะไกลผานอนเตอรเนต เราสามารถเลอก AB GPIO Serverจะปรากฏขอความ Would you like the GPIO server to be accessible over the network? ใหกดปม Tab ไปทตวเลอก Yes แลวกดปม Enter หากตองการเปดโหมดไดรฟเวอรกราฟกความเรวสงOpenGL บนจอภาพเดสทอส เราสามารถเลอก AC GL Driver จะปรากฏขอความ Would you like the experimental GL driver for desktop to be enabled? ใหกดปม Tab ไปทตวเลอก Yes แลวกดปม Enter หากตองการอบเดทโปรแกรม Raspberry Pi Software Configuration Tool (raspi-config) ใหเลอก A0 Update

Page 53: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 12

รปท ก.14 Configuration 9 15) เมอกลบไปยงไดอะลอค Raspberry PI Software Configuration Tools (raspi-config) กดปม Tab เพอเลอกปม Finish (24) แลวกดปม Enter 16) เมอปรากฏไดอะลอคถามวา Would you like to reboot now? เราจะตองบทเครองใหม โดยกดปม Tab เพอเลอกปม Yes แลวกดปม Enter โปรแกรมจะบทเครองใหม 17) ใชโปรแกรม PuTTy โดยทดลองใช IP Address เดมเพอลอคอนเขาส Raspberry PI โดยใชชอยสเซอรคอ pi แตเปลยนพาสเวรดตามทก าหนดใหม หากไมสามารถลอคอนโดยใช IP Address เดมได แสดงวาเราเตอรไดจาย IP Address หมายเลขใหมมาใหตอนบทเครองแลว เราจะตองเรยกโปรแกรม Wireless Network Watcher เพอคนหาหมายเลข IP Address ใหมของ Raspberry PI Foundation เมอพบ IP Address ใหม แลวจงแกไขหมายเลข IP Address บนไดอะลอค PuTTy แลวจงเลอกปม Open เพอเชอมตอไปยง Raspberry PI ใหม 18) เมอลอคอน Raspberry PI ไดแลว เรมเชอมตอ WiFi เพอใหเราสามารถถอดสาย LAN ออกได โดยพมพ pi@raspberrypi:~ $sudo nano /etc/wpa_supplicant/wpa_supplicant.conf แลวแกไขเพมเตมขอความในไฟล โดยเปลยน SSID และ Password เปนของคณ ดงรปท ก.15 แลวบนทกไฟล โดยกดปม Crtl+O เมอปรากฏชอไฟล ใหกดปม Enter แลวออกจาก Editor โดยกดปม Ctrl+X

Page 54: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 13

รปท ก.15 Configuration 10 19) พมพ pi@raspberrypi:~ $sudo reboot เพอบท Raspberry PI ใหม แลวถอดสาย LAN ออกจาก Raspberry Pi แลวใช Wireless Network Watcher ในขอ 4 เพอคนหาหมายเลข IP Address ใหม แลวทดลองใช PuTTy ลอคอน โดยใช IP Address ใหม เขาสามารถลอคอนเขา Raspberry PI ได แสดงวาเราไดตงคาเรมตนตางๆ ไดอยางถกตอง เรากสามารถเรมตนตดตงโปรแกรมหรอซอฟทแวรตางๆ ผาน Terminal PuTTY หรอใช WinSCP หรอจะตอจอภาพเมาสและคยบอรด เพอใชโปรแกรมตางๆ ผาน Desktop กได

ก.2 การตดตง vsftpd (FTP server) เพอการโอนถาย file FTP Server กคอ เซอรวส ในการโอนยายถายเทขอมล จากเครองหนงไปสอกเครองหนงซงเราจะตดตงไวทบอรด Raspberrypi แลวใหเครอง PC เปน client remote เขามา วธการตดตง vsftpd ทบอรด Raspberrypi

1) ใชค าสง sudo apt-get install vsftpd เพอตดตง vfstpd 2) เมอตดต งเสรจแลว ให เขาไปแกไข Configure File โดยใชค าสง sudo nano

/etc/vsftpd.conf 3) แกไข anonymous_enable=YES ใหเปน anonymous_enable=No 4) เอาเครองหมาย # ออก local_enable=YES 5) เอาเครองหมาย # ออก write_enable=YES 6) เพม force_dot_file=YES ทบรรทดสดทายของ File

Page 55: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 14

รปท ก.16 การแก Configuration ในไฟล vsftpd.conf

1) ท าการ restart service ใหม เพอใหทเราแกไขไป เรมตนการท างาน โดยใชค าสง sudo service vsftpd restart

2) Download FTP Client จ าก https://filezilla-project.org/download.php แ ล ะตดตงโปรแกรมลงบนเครอง Client

3) เปดโปรแกรม FileZilla.exe เมอเปดขนมาแลวใหไปทเมน แฟม, ตวจดการทตง จะเหนหนาจอตามดานลาง ใหใส IP, ผ ใช, รหสผาน ตามท เราไดตงไวกอนหนาน เลอกโปรโตคอลเปน FTP, ใช SFTP

Page 56: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก – 15

รปท ก.17 การใชงาน FileZilla 1

4) ถาตงคาถกกจะเชอมตอไดทนทตามรปท ก.17

รปท ก.18 การใชงาน FileZilla 2

Page 57: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ก - 16

ก.3 โปรแกรมทจ าเปนของระบบ

1) sudo apt-get update 2) sudo apt-get upgrade 3) sudo apt-get nginx 4) sudo apt-get install nginx-rtmp-module 5) sudo apt-get install apache2 (ลงแคบน VPS Server) 6) sudo apt-get install mysql-server (ลงแคบน VPS Server) 7) sudo apt-get install php 8) sudo apt-get install python 9) sudo apt-get install phpmyadmin (ลงแคบน VPS Server) 10) sudo apt-get install motion (ลงแคใน RaspberryPi)

Page 58: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 1

ภาคผนวก ข Code Program ในสวนตางๆของระบบ

Page 59: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 2

ข.1 Code Program PHP Script บน VPS setfeed.php <?php $servername = "localhost"; $username = "root"; $password = "petfeeder"; $dbname = "petfeeder_db"; $id = $_GET['id']; $feed_val = $_GET['feed_val']; $mode = $_GET['mode']; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $st = "no"; if($mode == "manual"){ $st = "yes"; } $sql = "UPDATE pet_feed_tb set feed_val = '".$feed_val."', mode = '".$mode."',status='".$st."' where id = '".$id."'"; if ($conn->query($sql) === TRUE) { echo "1"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close();

Page 60: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 3

?> Setfeed.php เปน php script เอาไวส าหรบ UPDATE คาใน pet_feed_tb โดยในสครปนจะมเงอนไขของการท างานในโหมด manual อยดวย ซงจะอพเดต status เปน yes

postdata.php

<?php

$servername = "localhost";

$username = "root";

$password = "petfeeder";

$dbname = "petfeeder_db";

$id = $_GET['id'];

$feed_val = $_GET['val'];

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

$sql = "INSERT INTO pet_history_tb (id, feed_val,time_stamp)

VALUES ('".$id."', '".$feed_val."', sysdate())";

if ($conn->query($sql) === TRUE) {

Page 61: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 4

echo "1";

} else {

echo "Error: " . $sql . "<br>" . $conn->error;

}

$conn->close();

?>

Postdata.php สครปนเอาไวส าหรบ INSERT คาใน pet_history_tb

getstatus.php

<?php

$servername = "localhost";

$username = "root";

$password = "petfeeder";

$dbname = "petfeeder_db";

$id = $_GET['id'];

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

Page 62: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 5

}

$sql = "SELECT feed_val, mode, status FROM pet_feed_tb where id = '".$id."'";

$result = $conn->query($sql);

if ($result->num_rows > 0) {

// output data of each row

while($row = $result->fetch_assoc()) {

$sql = "UPDATE pet_feed_tb set status='no' where id = '".$id."'";

if ($conn->query($sql) === TRUE) {

echo $row["mode"]. "," . $row["feed_val"]. "," . $row["status"];

} else {

echo "Error: " . $sql . "<br>" . $conn->error;

}

}

} else {

echo "0 results";

}

$conn->close();

?>

Page 63: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 6

getstatus.php สครปนไวส าหรบให RaspberryPi ดงคาออกมา และมการเคลยคา status เปน no ใน pet_feed_tb เพอไมใหโหมด manual ท างานตอเนอง

getlog.php

<?php

$servername = "localhost";

$username = "root";

$password = "petfeeder";

$dbname = "petfeeder_db";

$id = $_GET['id'];

$limit = $_GET['limit'];

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

$sql = "SELECT feed_val, time_stamp FROM pet_history_tb where id = '".$id."' order by time_stamp desc limit ".$limit;

$result = $conn->query($sql);

Page 64: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 7

if ($result->num_rows > 0) {

// output data of each row

while($row = $result->fetch_assoc()) {

echo $row["feed_val"]. "," . $row["time_stamp"].nl2br ("\n");

}

} else {

echo "0 results";

}

$conn->close();

?>

Getlog.php สครปนไวส าหรบให Application ดงคาจาก pet_history_tb มาโชวในหนาจอในสวนของฟงกชน Log

ข.2 Code Program Python บน Raspberry Pi

Petfeed.py

import RPi.GPIO as GPIO

import time

import sys

from hx711 import HX711

import httplib

def cleanAndExit():

print("Cleaning...")

Page 65: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 8

GPIO.cleanup()

print ("Bye!")

sys.exit()

loadw = 0.235

hx = HX711(27, 22)

hx.set_reading_format("LSB", "MSB")

hx.set_reference_unit(92)

hx.reset()

hx.tare()

motorFeed = 17

GPIO.setmode(GPIO.BCM)

GPIO.setup(motorFeed,GPIO.OUT)

GPIO.output(motorFeed,GPIO.LOW)

#host = '167.114.9.44'

host = raw_input("Host ip :")

url_status = '/api/getstatus.php?id=1'

url_send = '/api/postdata.php?id=1'

Page 66: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 9

sAuto = 'auto'

sManual = 'manual'

def getStatusFromServer():

global status

global limit

global feed

conn = httplib.HTTPConnection(host,timeout=5)

conn.request("GET",url_status)

res = conn.getresponse()

print("getstaus")

print(res.status)

if res.status == 200:

data = res.read()

print(data)

data = data.replace("\n","")

data = data.replace("\r","")

datas = str(data).split(',')

if len(datas) >2:

status = datas[0]

limit = int(datas[1])

Page 67: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 10

feed = datas[2]

return True

#print data

return False

def sendStatusFromServer(val):

global status

global limit

global feed

conn = httplib.HTTPConnection(host,timeout=5)

conn.request("GET",url_send+"&val="+str(val))

res = conn.getresponse()

print("sendstaus")

def feedMotor(): global status global limit global feed val = hx.get_weight(5) d = val * loadw val = int(d) while val < limit: print("feed") GPIO.output(motorFeed, GPIO.HIGH)

Page 68: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 11

#time.sleep(0.3) #GPIO.output(motorFeed, GPIO.LOW) #time.sleep(0.1) val = hx.get_weight(5) d = val * loadw val = int(d) hx.power_down() hx.power_up() GPIO.output(motorFeed, GPIO.LOW) feed = 'no' global status global limit global feed status = '' limit = 0 feed = 'no' startTime = time.time() endtime = time.time() print("start") while True: print("loop") try: val = hx.get_weight(5) if val < 0: val = 0 #print(val) #print(loadw) #print(val) d = val *loadw val = int(d) print(val) getStatusFromServer()

Page 69: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 12

print("get") print(status) if status == sAuto: #auto mode if val < limit: #feed feedMotor() elif status == sManual: #manual mode if feed == 'yes': feedMotor() else: #no action time.sleep(1) continue endtime = time.time() if endtime - startTime >10: sendStatusFromServer(val) startTime = time.time() hx.power_down() hx.power_up() time.sleep(1) except (KeyboardInterrupt, SystemExit): cleanAndExit() except: print("error") hx711.py import RPi.GPIO as GPIO import time import numpy # sudo apt-get python-numpy

Page 70: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 13

class HX711: def __init__(self, dout, pd_sck, gain=128): self.PD_SCK = pd_sck self.DOUT = dout GPIO.setmode(GPIO.BCM) GPIO.setup(self.PD_SCK, GPIO.OUT) GPIO.setup(self.DOUT, GPIO.IN) self.GAIN = 0 self.REFERENCE_UNIT = 1 # The value returned by the hx711 that corresponds to your reference unit AFTER dividing by the SCALE. self.OFFSET = 1 self.lastVal = long(0) self.LSByte = [2, -1, -1] self.MSByte = [0, 3, 1] self.MSBit = [0, 8, 1] self.LSBit = [7, -1, -1] self.byte_format = 'LSB' self.bit_format = 'MSB' self.byte_range_values = self.LSByte self.bit_range_values = self.MSBit self.set_gain(gain) time.sleep(1)

Page 71: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 14

def is_ready(self): return GPIO.input(self.DOUT) == 0 def set_gain(self, gain): if gain is 128: self.GAIN = 1 elif gain is 64: self.GAIN = 3 elif gain is 32: self.GAIN = 2 GPIO.output(self.PD_SCK, False) self.read() def createBoolList(self, size=8): ret = [] for i in range(size): ret.append(False) return ret def read(self): while not self.is_ready(): #print("WAITING") pass dataBits = [self.createBoolList(), self.createBoolList(), self.createBoolList()] dataBytes = [0x0] * 4 for j in range(self.byte_range_values[0], self.byte_range_values[1], self.byte_range_values[2]):

Page 72: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 15

for i in range(self.bit_range_values[0], self.bit_range_values[1], self.bit_range_values[2]): GPIO.output(self.PD_SCK, True) dataBits[j][i] = GPIO.input(self.DOUT) GPIO.output(self.PD_SCK, False) dataBytes[j] = numpy.packbits(numpy.uint8(dataBits[j])) #set channel and gain factor for next reading for i in range(self.GAIN): GPIO.output(self.PD_SCK, True) GPIO.output(self.PD_SCK, False) #check for all 1 #if all(item is True for item in dataBits[0]): # return long(self.lastVal) dataBytes[2] ^= 0x80 return dataBytes def get_binary_string(self): binary_format = "{0:b}" np_arr8 = self.read_np_arr8() binary_string = "" for i in range(4): # binary_segment = binary_format.format(np_arr8[i]) binary_segment = format(np_arr8[i], '#010b') binary_string += binary_segment + " " return binary_string def get_np_arr8_string(self): np_arr8 = self.read_np_arr8()

Page 73: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 16

np_arr8_string = "["; comma = ", " for i in range(4): if i is 3: comma = "" np_arr8_string += str(np_arr8[i]) + comma np_arr8_string += "]"; return np_arr8_string def read_np_arr8(self): dataBytes = self.read() np_arr8 = numpy.uint8(dataBytes) return np_arr8 def read_long(self): np_arr8 = self.read_np_arr8() np_arr32 = np_arr8.view('uint32') self.lastVal = np_arr32 return long(self.lastVal) def read_average(self, times=3): values = long(0) for i in range(times): values += self.read_long() return values / times def get_value(self, times=3):

Page 74: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 17

return self.read_average(times) - self.OFFSET def get_weight(self, times=3): value = self.get_value(times) value = value / self.REFERENCE_UNIT return value def tare(self, times=15): # Backup REFERENCE_UNIT value reference_unit = self.REFERENCE_UNIT self.set_reference_unit(1) value = self.read_average(times) self.set_offset(value) self.set_reference_unit(reference_unit) return value; def set_reading_format(self, byte_format="LSB", bit_format="MSB"): self.byte_format = byte_format self.bit_format = bit_format if byte_format == "LSB": self.byte_range_values = self.LSByte elif byte_format == "MSB": self.byte_range_values = self.MSByte if bit_format == "LSB": self.bit_range_values = self.LSBit elif bit_format == "MSB":

Page 75: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 18

self.bit_range_values = self.MSBit def set_offset(self, offset): self.OFFSET = offset def set_reference_unit(self, reference_unit): self.REFERENCE_UNIT = reference_unit # HX711 datasheet states that setting the PDA_CLOCK pin on high for >60 microseconds would power off the chip. # I used 100 microseconds, just in case. # I've found it is good practice to reset the hx711 if it wasn't used for more than a few seconds. def power_down(self): GPIO.output(self.PD_SCK, False) GPIO.output(self.PD_SCK, True) time.sleep(0.0001) def power_up(self): GPIO.output(self.PD_SCK, False) time.sleep(0.0001) def reset(self): self.power_down() self.power_up() ข.3 Code Program Java ส าหรบ Application

MainActivity.java

package th.co.inex.petfeeder;

import android.app.PendingIntent;

Page 76: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 19

import android.app.ProgressDialog;

import android.content.ContentValues;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.net.Uri;

import android.os.AsyncTask;

import android.os.Handler;

import android.os.Looper;

import android.support.v4.app.NotificationCompat;

import android.support.v4.app.NotificationManagerCompat;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.view.WindowManager;

import android.widget.ArrayAdapter;

import android.widget.CompoundButton;

import android.widget.EditText;

import android.widget.LinearLayout;

Page 77: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 20

import android.widget.ProgressBar;

import android.widget.RadioButton;

import android.widget.TextView;

import android.widget.Toast;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import static android.app.Notification.EXTRA_NOTIFICATION_ID;

public class MainActivity extends AppCompatActivity {

Context ctx;

@Override

Page 78: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 21

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ctx = this;

// Intent intent = new Intent(this,ViewVideo.class);

RadioButton rdAuto =(RadioButton)findViewById(R.id.rdAuto);

RadioButton rdManual =(RadioButton)findViewById(R.id.rdManual);

rdAuto.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

if(b){

LinearLayout llAuto = (LinearLayout)findViewById(R.id.llAuto);

LinearLayout llManual = (LinearLayout)findViewById(R.id.llManual);

llAuto.setVisibility(View.VISIBLE);

llManual.setVisibility(View.GONE);

}

}

});

Page 79: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 22

rdManual.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

if(b){

LinearLayout llAuto = (LinearLayout)findViewById(R.id.llAuto);

LinearLayout llManual = (LinearLayout)findViewById(R.id.llManual);

llAuto.setVisibility(View.GONE);

llManual.setVisibility(View.VISIBLE);

}

}

});

//checkNoti("http://167.114.9.44/api/getlog.php?id=1&limit=1");

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Intent myservice = new Intent(this, MyService.class);

startService(myservice);

}

public void showVideo(View v){

Page 80: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 23

String videoUrl = "rtmp://167.114.9.44:1935/show/cam";

Intent i = new Intent(android.content.Intent.ACTION_VIEW);

i.setData(Uri.parse(videoUrl));

// i.setType("video/flv");

// startActivity(Intent.createChooser(i

// , "Player"));

startActivity(i);

Toast.makeText(this,"Open flv",Toast.LENGTH_LONG).show();

}

public void onclickFeed(View v){

int id = v.getId();

HttpGetRequest getRequest = new HttpGetRequest();

if(id == R.id.btUpdate) {

EditText editAuto = (EditText)findViewById(R.id.editAuto);

String feedVal = editAuto.getText().toString().trim();

getRequest.execute("http://167.114.9.44/api/setfeed.php?id=1&feed_val="+feedVal+"&mode=auto");

}else{

EditText editManual = (EditText)findViewById(R.id.editManual);

String feedVal = editManual.getText().toString().trim();

Page 81: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 24

getRequest.execute("http://167.114.9.44/api/setfeed.php?id=1&feed_val="+feedVal+"&mode=manual");

}

}

public void onclickLog(View v){

Intent intent = new Intent(this,LogActivity.class);

startActivity(intent);

}

public class HttpGetRequest extends AsyncTask<String, Void, String> {

public static final String REQUEST_METHOD = "GET";

public static final int READ_TIMEOUT = 5000;

public static final int CONNECTION_TIMEOUT = 15000;

ProgressDialog mProgressDialog;

@Override

protected void onPreExecute() {

super.onPreExecute();

mProgressDialog = new ProgressDialog(ctx);

mProgressDialog.setTitle("Send Data");

Page 82: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 25

mProgressDialog.setMessage("กรณารอสกคร...");

mProgressDialog.setCancelable(false);

mProgressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

mProgressDialog.dismiss();

}

});

mProgressDialog.show();

}

@Override

protected String doInBackground(String... params){

String stringUrl = params[0];

String result;

String inputLine;

try {

//Create a URL object holding our url

URL myUrl = new URL(stringUrl);

//Create a connection

Page 83: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 26

HttpURLConnection connection =(HttpURLConnection)

myUrl.openConnection();

//Set methods and timeouts

connection.setRequestMethod(REQUEST_METHOD);

connection.setReadTimeout(READ_TIMEOUT);

connection.setConnectTimeout(CONNECTION_TIMEOUT);

//Connect to our url

connection.connect();

//Create a new InputStreamReader

InputStreamReader streamReader = new

InputStreamReader(connection.getInputStream());

//Create a new buffered reader and String Builder

BufferedReader reader = new BufferedReader(streamReader);

StringBuilder stringBuilder = new StringBuilder();

//Check if the line we are reading is not null

while((inputLine = reader.readLine()) != null){

stringBuilder.append(inputLine);

}

//Close our InputStream and Buffered reader

reader.close();

Page 84: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 27

streamReader.close();

//Set our result equal to our stringBuilder

result = stringBuilder.toString();

}

catch(IOException e){

e.printStackTrace();

result = null;

}

return result;

}

protected void onPostExecute(String result){

super.onPostExecute(result);

mProgressDialog.dismiss();

}}}

ViewVideo.java package th.co.inex.petfeeder; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.webkit.WebView; import android.widget.FrameLayout; import java.lang.reflect.InvocationTargetException;

Page 85: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 28

import java.lang.reflect.Method; public class ViewVideo extends Activity { WebView webView; String htmlPre = "<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"utf-8\"></head><body style='margin:0; pading:0; background-color: black;'>"; String htmlCode = " <embed style='width:100%; height:100%' src='http://www.platipus.nl/flvplayer/download/1.0/FLVPlayer.swf?fullscreen=true&video=@VIDEO@' " + " autoplay='true' " + " quality='high' bgcolor='#000000' " + " name='VideoPlayer' align='middle'" + // width='640' height='480' " allowScriptAccess='*' allowFullScreen='true'" + " type='application/x-shockwave-flash' " + " pluginspage='http://www.macromedia.com/go/getflashplayer' />" + ""; String htmlPost = "</body></html>"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view_video); webView = (WebView)findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setAllowFileAccess(true); // webView.getSettings().setPluginsEnabled(true);

Page 86: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 29

webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); //thanks Patrick! htmlCode = htmlCode.replaceAll("@VIDEO@", "rtmp://167.114.9.44:1935/show/cam"); webView.loadDataWithBaseURL("rtmp://167.114.9.44:1935/show/cam", htmlPre+htmlCode+htmlPost, "text/html", "UTF-8", null); } @Override protected void onPause(){ super.onPause(); callHiddenWebViewMethod("onPause"); webView.pauseTimers(); if(isFinishing()){ webView.loadUrl("about:blank"); setContentView(new FrameLayout(this)); } } @Override protected void onResume(){ super.onResume(); callHiddenWebViewMethod("onResume"); webView.resumeTimers(); } private void callHiddenWebViewMethod(String name){

Page 87: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 30

// credits: http://stackoverflow.com/questions/3431351/how-do-i-pause-flash-content-in-an-android-webview-when-my-activity-isnt-visible if( webView != null ){ try { Method method = WebView.class.getMethod(name); method.invoke(webView); } catch (NoSuchMethodException e) { Log.e("error","No such method: " + name + e); } catch (IllegalAccessException e) { Log.e("error","Illegal Access: " + name + e); } catch (InvocationTargetException e) { Log.e("error","Invocation Target Exception: " + name + e); }}}} LogActivity.java package th.co.inex.petfeeder; import android.app.ProgressDialog; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter;

Page 88: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 31

import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TableLayout; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; public class LogActivity extends AppCompatActivity { Context ctx; ArrayList<modelLog> mItem; LogActivity.iXSactAdapter mDataAdapter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.log_activity); setTitle("Log"); ctx = this; HttpGetRequest getRequest = new HttpGetRequest(); getRequest.execute("http://167.114.9.44/api/getlog.php?id=1&limit=1000"); ListView listView = (ListView)findViewById(R.id.listView); mItem = new ArrayList<>(); mDataAdapter = new LogActivity.iXSactAdapter(this, R.layout.lv_log, mItem);

Page 89: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 32

listView.setAdapter(mDataAdapter); } public class HttpGetRequest extends AsyncTask<String, Void, String> { public static final String REQUEST_METHOD = "GET"; public static final int READ_TIMEOUT = 5000; public static final int CONNECTION_TIMEOUT = 15000; ProgressDialog mProgressDialog; @Override protected void onPreExecute() { super.onPreExecute(); mProgressDialog = new ProgressDialog(ctx); mProgressDialog.setTitle("Send Data"); mProgressDialog.setMessage("กรณารอสกคร..."); mProgressDialog.setCancelable(false); mProgressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mProgressDialog.dismiss(); } }); mProgressDialog.show(); } @Override protected String doInBackground(String... params){ String stringUrl = params[0];

Page 90: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 33

String result; String inputLine; try { //Create a URL object holding our url URL myUrl = new URL(stringUrl); //Create a connection HttpURLConnection connection =(HttpURLConnection) myUrl.openConnection(); //Set methods and timeouts connection.setRequestMethod(REQUEST_METHOD); connection.setReadTimeout(READ_TIMEOUT); connection.setConnectTimeout(CONNECTION_TIMEOUT); //Connect to our url connection.connect(); //Create a new InputStreamReader InputStreamReader streamReader = new InputStreamReader(connection.getInputStream()); //Create a new buffered reader and String Builder BufferedReader reader = new BufferedReader(streamReader); StringBuilder stringBuilder = new StringBuilder(); //Check if the line we are reading is not null while((inputLine = reader.readLine()) != null){ stringBuilder.append(inputLine); } //Close our InputStream and Buffered reader reader.close(); streamReader.close(); //Set our result equal to our stringBuilder result = stringBuilder.toString(); } catch(IOException e){

Page 91: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 34

e.printStackTrace(); result = null; } return result; } protected void onPostExecute(String result){ super.onPostExecute(result); String[] sResult = result.split("<br />"); String sDateold = ""; for(int i=0;i<sResult.length;i++){ String[] svals = sResult[i].split(","); if(svals.length >1){ String sval = svals[0]; String sDate = svals[1]; String sNo = String.valueOf(i+1); String sDiff = ""; if(i+1 < sResult.length){ String[] svalsOld = sResult[i+1].split(","); if(svalsOld.length >1) { sDateold = svalsOld[1]; } } if (sDate != null) { if (sDateold != null) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date dateNow = format.parse(sDate); Date dateOld = format.parse(sDateold); long iDiff = dateNow.getTime() - dateOld.getTime(); sDiff= String.valueOf(iDiff / 1000) ;

Page 92: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 35

} catch (ParseException e) { e.printStackTrace(); } } else { sDiff = "0"; } } modelLog mLog = new modelLog(); mLog.setFeedVal(sval); mLog.setsDateTime(sDate); mLog.setsDiff(sDiff); mLog.setsNo(sNo); mDataAdapter.add(mLog); } mDataAdapter.notifyDataSetChanged(); } mProgressDialog.dismiss(); } } private class iXSactAdapter extends ArrayAdapter<modelLog> { int layoutResourceId; Context ctx; private ArrayList<modelLog> adItem = null; // private internal arraylist can solve problem ... because the class can not see external arraylist directly in getView public iXSactAdapter(Context context, int textViewResourceId, ArrayList<modelLog> incXSactHeadList) { super(context, textViewResourceId, incXSactHeadList); this.ctx = context;

Page 93: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 36

//this.adItem = new ArrayList<>(); //this.adItem.addAll(incXSactHeadList); // add all for first init , if any arraylist found. this.adItem = incXSactHeadList; // add all for first init , if any arraylist found. this.layoutResourceId = textViewResourceId; } private class HeadViewHolder { TextView txtDate; TextView txtVal; TextView txtNo; TextView txtDiff; } public void add(modelLog incXSact){ this.adItem.add(incXSact); // allow external proc to add private arraylist } @Override public View getView(final int position, View convertView, ViewGroup parent) { View HeadRow = convertView; LogActivity.iXSactAdapter.HeadViewHolder holder = null; Log.v("ConvertView", String.valueOf(position)); if (convertView == null) { //LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); LayoutInflater vi = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Page 94: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 37

//convertView = vi.inflate(R.layout.lv_pos_xsact_list, parent,false); HeadRow = vi.inflate(layoutResourceId, parent, false); holder = new LogActivity.iXSactAdapter.HeadViewHolder(); holder.txtDate = (TextView) HeadRow.findViewById(R.id.txtDate); holder.txtVal = (TextView) HeadRow.findViewById(R.id.txtVal); holder.txtDiff = (TextView) HeadRow.findViewById(R.id.txtDiff); holder.txtNo = (TextView) HeadRow.findViewById(R.id.txtNo); HeadRow.setTag(holder); } else { holder = (LogActivity.iXSactAdapter.HeadViewHolder) HeadRow.getTag(); } final modelLog mLog = this.adItem.get(position); String sNo = mLog.getsNo(); String sVal = mLog.getFeedVal(); String sDate = mLog.getsDateTime(); String sDiff = mLog.getsDiff(); holder.txtNo.setText(sNo); holder.txtVal.setText(sVal); holder.txtDate.setText(sDate); holder.txtDiff.setText(sDiff+ " s"); return HeadRow; }}} modelLog.java package th.co.inex.petfeeder; public class modelLog {

Page 95: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 38

String feedVal =""; String sDateTime = ""; String sNo = ""; String sDiff = ""; public String getFeedVal() { return feedVal; } public void setFeedVal(String feedVal) { this.feedVal = feedVal; } public String getsDateTime() { return sDateTime; } public void setsDateTime(String sDateTime) { this.sDateTime = sDateTime; } public String getsNo() { return sNo; } public void setsNo(String sNo) { this.sNo = sNo; } public String getsDiff() {

Page 96: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 39

return sDiff; } public void setsDiff(String sDiff) { this.sDiff = sDiff; } } MyService.java package th.co.inex.petfeeder; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.media.RingtoneManager; import android.net.Uri; import android.os.IBinder; import android.support.annotation.Nullable; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class MyService extends Service { boolean isServiceStart = false;

Page 97: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 40

Context ctx; @Override public void onCreate() { super.onCreate(); ctx = this; } @Override public IBinder onBind(Intent intent) { // Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if(!isServiceStart) { isServiceStart = true; Thread th = new Thread(new myThread(startId)); th.start(); }else{ } return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); isServiceStart = false; Log.e("MyService","myservice onDestroy"); } final class myThread implements Runnable{ public static final String REQUEST_METHOD = "GET"; public static final int READ_TIMEOUT = 5000;

Page 98: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 41

public static final int CONNECTION_TIMEOUT = 15000; public String sDateold = ""; int service_id; @Override public void run() { synchronized (this) { while(isServiceStart) { String stringUrl = "http://167.114.9.44/api/getlog.php?id=1&limit=1"; String result; String inputLine; try { //Create a URL object holding our url URL myUrl = new URL(stringUrl); //Create a connection HttpURLConnection connection = (HttpURLConnection) myUrl.openConnection(); //Set methods and timeouts connection.setRequestMethod(REQUEST_METHOD); connection.setReadTimeout(READ_TIMEOUT); connection.setConnectTimeout(CONNECTION_TIMEOUT); //Connect to our url connection.connect(); //Create a new InputStreamReader InputStreamReader streamReader = new InputStreamReader(connection.getInputStream()); //Create a new buffered reader and String Builder BufferedReader reader = new BufferedReader(streamReader); StringBuilder stringBuilder = new StringBuilder(); //Check if the line we are reading is not null while ((inputLine = reader.readLine()) != null) { stringBuilder.append(inputLine);

Page 99: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 42

} //Close our InputStream and Buffered reader reader.close(); streamReader.close(); //Set our result equal to our stringBuilder result = stringBuilder.toString(); String[] sResult = result.split("<br />"); for (int i = 0; i < sResult.length; i++) { String[] svals = sResult[i].split(","); if (svals.length > 1) { String sval = svals[0]; String sDate = svals[1]; int iVal = Integer.valueOf(sval); if (!sDate.equalsIgnoreCase(sDateold)) { if (iVal < 20) { Intent intent = new Intent(ctx, LogActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, intent, 0); Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ctx, "1") .setSmallIcon(R.drawable.webcam) .setContentTitle("Pet Feeder ") .setContentText("อาหารใกลจะหมด") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setSound(alarmSound) // Set the intent that will fire when the user taps the notification

Page 100: Automatic Pet FeederNEIS) ระบบ... · 2018-07-06 · ระบบให้อาหารสัตว์เลี้ยงอัตโนมัติผ่านแอปพลิเคชันบนสมาร์ต

ข - 43

.setContentIntent(pendingIntent) .setAutoCancel(true); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(ctx); notificationManager.notify(1, mBuilder.build()); } sDateold = sDate; } } } wait(5000); } catch (IOException e) { e.printStackTrace(); result = null; } catch (InterruptedException e) { e.printStackTrace(); } } } } public myThread(int service_id) { this.service_id = service_id; } } }