원격 제어 iPhone 애플리케이션에서 Raspberry Pi3에 연결된 서보 모터(SG90R)
13920 단어 RaspberryPiPHPSwiftPython
프로그램 이외의 제작물은 싣지 않지만 집 열쇠를 원격으로 열고 닫을 수 있도록 하고 싶습니다.
다른 제작물(부품 등)이 제작 중이기 때문이다내 블로그 진전을 총결하였다.
전제 조건
RaspberryPi의 설치가 완료되고 서보 모터의 배선이 완료됩니다.
아파치가 설정되어 PHP 및 Python을 사용할 수 있습니다.
환경
MacBook Air
└─Swift4
RaspberryPi3
┣━Python3.5.3
└─PHP7.0.19
서보 모터
└─ SG90R
웹 페이지 정보
-Beffer Overruns-Rasbberry Pi로 서보 모터(SG90) 제어
여기에서 배선에서 프로그램으로의 제어를 소개했으니, 우선 이곳을 완성하고 나서 하시기 바랍니다
대략적인 절차
MacBook Air
└─Swift4
RaspberryPi3
┣━Python3.5.3
└─PHP7.0.19
서보 모터
└─ SG90R
웹 페이지 정보
-Beffer Overruns-Rasbberry Pi로 서보 모터(SG90) 제어
여기에서 배선에서 프로그램으로의 제어를 소개했으니, 우선 이곳을 완성하고 나서 하시기 바랍니다
대략적인 절차
파이썬편
방금 소개한 사이트와 같은 방법으로 통제하다.
그때 렉 걸린 곳이 몇 군데 있었어요.
점공비
아까 사이트에서 50Hz는 2.5%-12.0%로 제어되었지만 계산적으로도 결국 서보의 개체 차이로 인해 각도에서 벗어날 수 있다.
내 서보에서 계산상 180도여야 한다는 신호를 보내도 가동 구역을 초과할 때 삐걱삐걱 소리가 난다.
그 결과 100Hz가 22.9%가 넘는 곳에서'삐걱삐걱'소리가 나기 시작했다.
각도 정밀도가 필요하다면 이 비율을 스스로 검증하는 것이 가장 좋다.(이번 각도는 그렇게 높은 정밀도가 필요하지 않기 때문에 계산값에 따라 힘껏 눌러라)
프로그램
이번에 만든 것은 서보로 열쇠를 여는 것이기 때문에 오픈.py와close.나는py의 두 가지 행위를 단독 프로그램으로 내보냈다.
open.py#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
gp_out = 4
GPIO.setup(gp_out, GPIO.OUT)
servo = GPIO.PWM(gp_out, 100)
servo.start(0.0)
d = 0
cycle = 19 * (d/180) + 5
servo.ChangeDutyCycle(cycle)
time.sleep(0.5)
d = 90
cycle = 19 * (d/180) + 5
servo.ChangeDutyCycle(cycle)
GPIO.cleanup()
close.py#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
gp_out = 4
GPIO.setup(gp_out, GPIO.OUT)
servo = GPIO.PWM(gp_out, 100)
servo.start(0.0)
d = 180
cycle = 19 * (d/180) + 5
servo.ChangeDutyCycle(cycle)
time.sleep(0.5)
d = 90
cycle = 19 * (d/180) + 5
servo.ChangeDutyCycle(cycle)
time.sleep(0.5)
GPIO.cleanup()
서보가 0도|180도로 회전하면 90도 위치로 돌아갑니다.
PHP 편
PHP에서 사서함을 받고 close를 따릅니다.py,open 실행 여부.py 실행 여부를 제어합니다.
이번에 여기 exec 함수로 5시간 정도 걸렸어요.
실행할 명령은 경로를 작성하고 지정해야 합니다.
controller.php<?php
switch ($_POST['type']) {
case 'open':
exec('/usr/bin/python3 /***省略***/open.py');
echo"open";
break;
case 'close':
exec('/usr/bin/python3 /***省略***/close.py');
echo"close";
break;
default:
echo "デフォルト";
break;
}
?>
이제 type에close나open을 넣어서 스위치를 제어할 수 있습니다.
Swift 편
일단 시도만 하기 때문에 Story Board에 두 개의 단추를 놓고 액션을 각각 View Controller에 연결하십시오.
ViewController.swiftimport UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func OpenButton(_ sender: Any) {
POST_Data(url: "http://***省略***/controller.php", type: "open")
}
@IBAction func CloseButton(_ sender: Any) {
POST_Data(url: "http://***省略***/controller.php", type: "close")
}
func POST_Data(url:String,type:String){
let postString = "type=" + type
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "POST"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request, completionHandler: {
(data, response, error) in
if error != nil {
return
}
})
task.resume()
}
}
이상 완성!
행위
여기 프로그램과 동작이 좀 다르지만.
pic.twitter.com/OkDTS7UNXk — Crouton (@ryosuke_tamura) 2017년 11월 14일
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
gp_out = 4
GPIO.setup(gp_out, GPIO.OUT)
servo = GPIO.PWM(gp_out, 100)
servo.start(0.0)
d = 0
cycle = 19 * (d/180) + 5
servo.ChangeDutyCycle(cycle)
time.sleep(0.5)
d = 90
cycle = 19 * (d/180) + 5
servo.ChangeDutyCycle(cycle)
GPIO.cleanup()
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
gp_out = 4
GPIO.setup(gp_out, GPIO.OUT)
servo = GPIO.PWM(gp_out, 100)
servo.start(0.0)
d = 180
cycle = 19 * (d/180) + 5
servo.ChangeDutyCycle(cycle)
time.sleep(0.5)
d = 90
cycle = 19 * (d/180) + 5
servo.ChangeDutyCycle(cycle)
time.sleep(0.5)
GPIO.cleanup()
<?php
switch ($_POST['type']) {
case 'open':
exec('/usr/bin/python3 /***省略***/open.py');
echo"open";
break;
case 'close':
exec('/usr/bin/python3 /***省略***/close.py');
echo"close";
break;
default:
echo "デフォルト";
break;
}
?>
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func OpenButton(_ sender: Any) {
POST_Data(url: "http://***省略***/controller.php", type: "open")
}
@IBAction func CloseButton(_ sender: Any) {
POST_Data(url: "http://***省略***/controller.php", type: "close")
}
func POST_Data(url:String,type:String){
let postString = "type=" + type
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "POST"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request, completionHandler: {
(data, response, error) in
if error != nil {
return
}
})
task.resume()
}
}
조금만 쓰면 서보 시작, 꼭
나중에 주문한 3D 프린팅된 부품만 받으면 키에 장착됩니다.p>
끝내다
Reference
이 문제에 관하여(원격 제어 iPhone 애플리케이션에서 Raspberry Pi3에 연결된 서보 모터(SG90R)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryosuke_tamura/items/51684388b88952c0eca9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)