6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

電子工作でiPadを操作してみる3 - スワイプをやってみる

Posted at

はじめに

本記事は、iPadを操作するの3つ目になります。
今回は、ラズベリーパイを使いスワイプ動作を実行します。

output3.gif

電子工作でiPadを操作してみる関連の記事

スワイプ操作

スワイプは画面の左右(または上下)を指で滑らせる操作です。
前回使用していたリレータッチボードを複数使用することで、実現を目指します。

確認方法

以下にやったことをまとめます。

スワイプ用タッチボードの作成

いろいろと試行錯誤したところ、3つあればスワイプを安定的に実現できそうです。
※2つでも実現できましたが、コードが複雑になることおよび精度が悪いため諦めました。

以下のボードを作成しました。

omote_ura.PNG

接続図

ラズパイ リレータッチボード 備考
5V 5V
GND GND
16(BCM) EN ラズパイ物理ピン - 40
20(BCM) EN ラズパイ物理ピン - 38
21(BCM) EN ラズパイ物理ピン - 36

回路図は、以下となります。

kairozu.PNG

プログラム

確認用のプログラムは以下となります。

ファイル名:relay.py

import RPi.GPIO as GPIO
import time
import sys

# pin settings
PIN_0 = 21
PIN_1 = 20
PIN_2 = 16
PIN_3 = 12

class RelayProc():
    def __init__(self):

        self._swipe_pins = [PIN_0, PIN_1, PIN_2]
        self._lsw_pin = PIN_0
        self._rsw_pin = PIN_3

        # bcm setting - gpio output
        GPIO.setmode(GPIO.BCM)  
        GPIO.setup(PIN_0, GPIO.OUT)
        GPIO.setup(PIN_1, GPIO.OUT)
        GPIO.setup(PIN_2, GPIO.OUT)
        GPIO.setup(PIN_3, GPIO.OUT)
        return


    def deini(self):
        GPIO.cleanup()
        return


    def tap(self, left = True, intervel=0.050):
        pin = self._lsw_pin
        if left == False:
            pin = self._rsw_pin
        GPIO.output(pin, GPIO.HIGH)
        time.sleep(intervel)
        GPIO.output(pin, GPIO.LOW)
        return


    def swipe(self, left = True, intervel=0.020):
        step = -1
        if left == False:
            step = 1
        for pin in self._swipe_pins[::step]:
            GPIO.output(pin, GPIO.HIGH)
            time.sleep(intervel)
        for pin in self._swipe_pins[::step]:
            GPIO.output(pin, GPIO.LOW)
            time.sleep(intervel)
        return

def main():
    relay_proc = RelayProc()

    args = sys.argv
    if "left" == args[1]:
        relay_proc.swipe(True)
    elif "right":
        relay_proc.swipe(False)
    else:
        pass

    relay_proc.deini()

    return


if __name__ == "__main__":
    main()
  • "left"を指定すると、swipe()にて以下が行われる
    • [PIN21 - HIGH]
    • 20msec wait
    • [PIN20 - HIGH]
    • 20msec wait
    • [PIN16 - HIGH]
    • 20msec wait
    • [PIN21 - LOW]
    • 20msec wait
    • [PIN20 - LOW]
    • 20msec wait
    • [PIN16 - LOW]
    • 20msec wait
      • 左へのスワイプを疑似的に行う
  • "right"を指定すると、swipe()にて以下が行われる
    • [PIN16 - HIGH]
    • 20msec wait
    • [PIN20 - HIGH]
    • 20msec wait
    • [PIN21 - HIGH]
    • 20msec wait
    • [PIN16 - LOW]
    • 20msec wait
    • [PIN20 - LOW]
    • 20msec wait
    • [PIN21 - LOW]
    • 20msec wait
      • 右へのスワイプを疑似的に行う

動作確認

  • リレータッチボードを取り付ける
    • 今回は、クリップを使用
  • ラズパイ側から"left"を指定し、プログラムを実行
$ python relay.py left
  • 左側にスワイプする
  • ラズパイ側から"right"を指定し、プログラムを実行
$ python relay.py right
  • 右側にスワイプする

こんな感じです。

output3.gif

さいごに

上記で、スワイプも実現できることが分かりました。
ラズパイであれば、bluetoothのセントラルで動かしたり、wifiを使ったりすることで、リモート制御もできそうです。
また、microbitと連携させるとおもしろいかもしれません。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?