- บทนำ
โปรเจคหุ่นยนต์ติดกล้อง Raspberry Pi ควบคุมด้วย เว็บเพจ โดยในโปรเจคนี้เราจะสร้างเว็บเซิร์ฟเวอร์ จาก Raspberry Pi โดยจะติดตั้งกล้อง Camera V2 Module เพื่อถ่ายภาพที่ด้านหน้าของหุ่นยนต์ และ สั่งควบคุมหุ่นยนต์ จาก เว็บบราวเซอร์ ผ่านทาง ระบบอินทราเน็ต ที่ใช้ WiFi หรือ วง แลน หรือใช้ เร้าเตอร์ เดียวกัน เท่านั้น
หุ่นยนต์ติดกล้อง ควบคุมด้วย เว็บเพจที่เราจัดทำขึ้นมา เพื่อพัฒนาศึกษาการทำงานของบอร์ด Raspberry Pi ว่ามีการทำงานอย่างไร เพื่อนำมาทำเป็นหุ่นยนต์ที่ควบคุมผ่านเว็บเพจได้ เราเขียนโค้ดในการทำงานและการบังคับ เราใช้ ภาษา python 3 (IDLE) หุ่นยนต์ติดกล้องของเราสามารถใช้ประโยชน์ได้หลากหลาย เพราะเราสามารถบังคับให้เดินไปทางไหนก็ได้ แล้วยังมีกล้องข้างหน้าสามารถมองผ่านทางจอมือถือเราได้เลย เรานำไปใช้วิ่งไปสำรวจในพื้นที่ ที่เข้าไปได้ยาก และในภายหน้าเราจะพัฒนาให้ หุ่นยนต์ของเรา เคลื่อนที่ผ่านสิ่งกีดขว้างได้ ทำให้เข้ากับสภาพแวดล้อมที่จะนำไปใช้ แล้วก็จะทำให้มีความเสถียรมากขึ้น
กลุ่มเราจัดทำหุ่นยน์นี้ขึ้นมาเพื่อใช้งานจับภาพในที่แคบ ที่เราเข้าไปไม่ถึงแล้วบันทึกสิ่งที่อยู่ภายในออกมา จะได้เห็นว่ามีอะไรภายในบ้างให้สะดวกต่อการเข้าไปจริง กลุ่มเราจะพัฒนาให้ดีต่อไปเพราะตอนนี้ยังไม่เสถียรมาก
2.วัตถุประสงค์
1.เพื่อศึกษาบอร์ด raspberry pi 3 model b
2.ฝึกใช้ภาษา python 3
3.ฝึกการใช้โค้ดในการควบคุมหุ่นยนต์
4.เพื่อพัฒนาความหลากหลายของหุ่นยนต์
เป้าหมาย
เพื่อพัฒนาหุ่นยนต์ทำให้ทำอะไรได้หลายอย่างมากขึ้น และเพื่อศึกษาโปรแกรมต่างๆในการเขียนโค้ดคำสั่งหุ่นยนต์ทำงานอย่างมีประสิทธิภาพมากขึ้น สะดวกต่อการใช้งานแก่ผู้ต้องการ
3.1 โปรเจคหุ่นยนต์ติดกล้อง Raspberry Pi ควบคุมด้วย เว็บเพจ โดยในโปรเจคนี้เราจะสร้างเว็บเซิร์ฟเวอร์ จาก Raspberry Pi โดยจะติดตั้งกล้อง Camera V2 Module เพื่อถ่ายภาพที่ด้านหน้าของหุ่นยนต์ และ สั่งควบคุมหุ่นยนต์ จาก เว็บบราวเซอร์ ผ่านทาง ระบบอินทราเน็ต ที่ใช้ WiFi หรือ วง แลน หรือใช้ เร้าเตอร์ เดียวกัน
ผลงาน
โปรแกรมที่ใช้
โปรแกรมในการเขียนโค้ด
3.2 บอร์ด Raspberry Pi Model B+บอร์ดคอมพิวเตอร์ขนาดเล็ก ที่ถูกพัฒนาขึ้นโดย Raspberry Pi Foundation มีคุณสมบัติเด่น คือ ติดต่อ และ ความคุมอุปกรณ์อิเล็กทรอนิกส์ได้
Raspberry Pi ไม่มีหน่วยความจำแบบแฟลชเมมโมรี ดังนั้นจำเป็นที่จะใช้ SD Card ภายนอก ซึ่งหากเปรียบเทียบกับคอมพิวเตอร์ SD Card นี้ก็จะเปรียบเสมือนฮาร์ดดิสก์นั่นเอง การลงระบบปฏิบัติการ OS รวมถึงการโปรแกรมหรือข้อมูลต่างๆ จะถูกจัดเก็บไว้ใน SD Card นี้ทั้งหมด ดังนั้นความเร็วในการสื่อสารรวมถึงคุณภาพของ SD Card ก็เป็นสิ่งที่ต้องคำนึงถึง ซึ่งโปรเจคนี้เลือกการ์ดที่เป็น Class 10 ที่ความจุ 16GB เพื่อให้การใช้งาน Raspberry Pi มีประสิทธิภาพมากที่สุด
โครงสร้างของบอร์ด raspberry pi คือเปรียบเหมือนคอมพิวเตอร์ แต่ต้องมี sd card เพื่อใช้เป็นความจำให้กับบอร์ด และต้องลงระบบปฎิบัติการ OS ใส่ใน SD card เพื่อนรันโปรแกรม
การจะใช้งาน บอร์ด Raspberry Pi นั้น ขั้นแรกจะต้องลงปฏิบัติการ Linux ให้กับบอร์ด Raspberry Pi เสียก่อน ซึ่งในโปรเจคนี้จะใช้ระบบปฏิบัติการ Raspbian (ราสเบียน) น่าจะมาจากคำว่า Raspberry + Debian เป็นระบบปฏิบัติการที่มีรากฐานมาจากระบบปฏิบัติการ Debian (เดเบียน) ซึ่งแตกตัวออกมาจากระบบปฏิบัติการ Linux โดยได้รับการออกแบบให้รันบนฮาร์ดแวร์ Raspberry PI ดังนั้น คำสั่งต่างๆ ของ Raspbian จึงจะเหมือนกับคำสั่งที่มีใช้งานบนระบบปฏิบัติการ Linux รวมทั้ง Ubuntu เกือบทั้งหมด จะมีแตกต่างกันบ้างเล็กน้อยเท่านั้น
ในใช้งาน บอร์ด Raspberry Pi นั้น Raspbian (ราสเบียน) เป็น OS ที่ได้รับความนิยม เนื่องจากใช้งานง่าย มี x-windows ติดต่อกับผู้ใช้ได้ง่าย, มี Application และ เครื่องมือบางอย่างติดตั้งมาให้แล้ว และยังได้ติดตั้ง Python 3 (IDLE) และ RPi.GPIO (โมดูลสำหรับอินเตอร์เฟสกับพอร์ต GPIO ของ Raspberry Pi) มาไว้เรียบร้อยในตัวแล้ว
3.3 raspberry pi 3 บอร์ดที่ใช้ในการพัฒนาเขียนโค้ดสั่งควบคุมตัวหุ่นยนต์ โดยใช้ภาษา python 3
Motordrive ใช้ในการควบคุมมอเตอร์ทั้ง 4 ล้อ
สายไฟที่ใช้เสียบต่อกันระหว่างบอร์ด
สวิตช์
4WD Smart Robot Car Chassis Kits
Camera V2 Module 8MP
3.4การต่อวงจร
ใช้ จั้มเปอร์ ผู้-เมีย ความยาว 20 เซ็นติเมตร เชื่อมต่อจาก GND ของ Motor Driver (จะเสียบ 2 สายในช่องเดียวกัน) ในตัวอย่างเป็นสายสีน้ำเงิน ไปยัง GND ของ Raspberry Pi
เชื่อมต่อสายควบคุมมอเตอร์ จำนวน 4 เส้น ระหว่าง Raspberry Pi กับ Motor Driver ในตัวอย่าง เป็นสาย สีน้ำตาล-สีม่วง-สีเขียว-สีเหลือง
3.5flowchart
3.5.2 Source Code
โค้ดที่ใช้บังคับล้อทั้ง 4 ขอหุ่นยนต์
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(35,GPIO.OUT)
GPIO.setup(37,GPIO.OUT)
#ForWard
GPIO.output(11,True)
GPIO.output(13,False)
GPIO.output(35,True)
GPIO.output(37,False)
time.sleep(0.4)
#Stop
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
time.sleep(0.6)
#BackWard
GPIO.output(11,False)
GPIO.output(13,True)
GPIO.output(35,False)
GPIO.output(37,True)
time.sleep(0.4)
#TurnLeft
GPIO.output(11,True)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
time.sleep(0.6)
#Stop
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
time.sleep(0.6)
#TurnRight
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,True)
GPIO.output(37,False)
time.sleep(0.6)
GPIO.cleanup()
โค้ด app.py
#######
# Author: RobotSiam.com
# Date: 18 August 2018
#
# app.py
#######
from flask import Flask, render_template, request, redirect, url_for, make_response
import motors
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD) #set up GPIO
app = Flask(__name__) #set up flask server
#when the root IP is selected, return index.html page
@app.route(‘/’)
def index():
return render_template(‘index.html’)
#recieve which pin to change from the button press on index.html
#each button returns a number that triggers a command in this function
#
#Uses methods from motors.py to send commands to the GPIO to operate the motors
@app.route(‘/<changepin>’, methods=[‘POST’])
def reroute(changepin):
changePin = int(changepin) #cast changepin to an int
if changePin == 1:
motors.turnLeft()
elif changePin == 2:
motors.forward()
elif changePin == 3:
motors.turnRight()
elif changePin == 4:
motors.backward()
else:
motors.stop()
response = make_response(redirect(url_for(‘index’)))
return(response)
app.run(debug=True, host=’0.0.0.0′, port=8000) #set up the server in debug mode to the port 800
โค้ด motors.py
#######
# Author: RobotSiam.com
# Date: 15 August 2018
#
# motors.py
#######
import RPi.GPIO as GPIO
import time
#set GPIO numbering mode and define output pins
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(35,GPIO.OUT)
GPIO.setup(37,GPIO.OUT)
def forward():
print(“Going Forwards”)
GPIO.output(11,True)
GPIO.output(13,False)
GPIO.output(35,True)
GPIO.output(37,False)
time.sleep(0.3)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
def backward():
print(“Going Backwards”)
GPIO.output(11,False)
GPIO.output(13,True)
GPIO.output(35,False)
GPIO.output(37,True)
time.sleep(0.3)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
def turnRight():
print(“Going Right”)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,True)
GPIO.output(37,False)
time.sleep(0.3)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
def turnLeft():
print(“Going Left”)
GPIO.output(11,True)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
time.sleep(0.3)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
def stop():
print(“Stopping”)
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
โค้ด index.html
<!DOCTYPE html>
codec ทำให้ Raspberry Pi to decode MPEG-2/VC-1 video in hardware น่าจะลื่นกว่า software
run แล้วได้เป็น web server เลย เรียกใช้งานผ่าน browser สำหรับเปิดปิดได้เลย
เพราะการสั่ง GPIO ในโหมด output ให้ทำงานง่ายมาก
เราสั่งผ่าน shell ได้ง่ายๆเลย
ตัวอย่างเรียกใช้ GPIO4
สั่ง logic 1
#echo “1″ > /sys/class/gpio/gpio4/value
และ logic 0 ได้ด้วยคำสั่ง
#echo “0″ > /sys/class/gpio/gpio4/value