원격 제어 iPhone 애플리케이션에서 Raspberry Pi3에 연결된 서보 모터(SG90R)

예전에는 라즈베리 Pi3를 샀지만 서버만 조금 움직여서 아직 놀지 못했기 때문에 가까스로 Swift, PHP, Python을 이용해 서보 모터를 원격으로 제어했다.
프로그램 이외의 제작물은 싣지 않지만 집 열쇠를 원격으로 열고 닫을 수 있도록 하고 싶습니다.
다른 제작물(부품 등)이 제작 중이기 때문이다내 블로그 진전을 총결하였다.

전제 조건


RaspberryPi의 설치가 완료되고 서보 모터의 배선이 완료됩니다.
아파치가 설정되어 PHP 및 Python을 사용할 수 있습니다.

환경


MacBook Air
└─Swift4
RaspberryPi3
┣━Python3.5.3
└─PHP7.0.19
서보 모터
└─ SG90R

웹 페이지 정보


-Beffer Overruns-Rasbberry Pi로 서보 모터(SG90) 제어
여기에서 배선에서 프로그램으로의 제어를 소개했으니, 우선 이곳을 완성하고 나서 하시기 바랍니다

대략적인 절차

  • RaspBerryPi에서 Python을 사용하여 GPIO를 제어하고 서보 모터 동작 프로그램을 만듭니다
  • RaspBerryPi에서 PHP를 사용하여 POST를 통해 다른 Python 프로그램을 호출합니다
  • Mac의 Xcode에서 Swift를 사용하여 POST를 보내는 응용 프로그램을 만듭니다
  • 파이썬편


    방금 소개한 사이트와 같은 방법으로 통제하다.
    그때 렉 걸린 곳이 몇 군데 있었어요.

    점공비


    아까 사이트에서 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.swift
    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()
        }
    }
    
    이상 완성!

    행위


    여기 프로그램과 동작이 좀 다르지만.
    pic.twitter.com/OkDTS7UNXk — Crouton (@ryosuke_tamura) 2017년 11월 14일

    조금만 쓰면 서보 시작, 꼭
    나중에 주문한 3D 프린팅된 부품만 받으면 키에 장착됩니다.p>
    끝내다

    좋은 웹페이지 즐겨찾기