酒呑みガジェット

〜マニアックな視点 ガジェットまとめ〜

【ラズパイ】raspberry pi zero でロボットを作製中...

2016/04/16

rasbperry pi zeroの軽量さと停電力、そして同時購入してしまったexplorer hatを生かして

自走バギーを手始めに作りました。

 

ハンダづけ

まずはハンダづけでGPIOピンを固定

以下を購入しました。

ハンダこて

右から

  • はんだ 0.6mm
  • ハンダこて 精密用こて先I型
  • ハンダこての清掃用スポンジ

いずれもコーナンで購入しました。

 

中学時代の技術授業以来使ったのでおぼつかない手つきではありましたが、youtubeのハンダづけテクニック動画をみながらraspberry pi zero とexplorer Hatをハンダづけしました。

 

ハンダづけ後GPIO raspberry pi

ハンダづけ後GPIO explorer hat

 

ロボット作る前にLチカで遊んだりしてました。ハンダがちゃんとついたかのテストも兼ねてですが。

LEDチカチカ

 

ロボットの基礎部分作製

バギーを模型屋から買いました。

そう、夏休みの工作などで昔触ったことがあったようななかったような。タミヤの例のやつです。

もともとはミニ四駆にしようかと思いましたが、ちょうど良さげなバギーがあったのでそっちを購入しました。

タミヤ製バギーとツインモーター

上の段

  • バギー本体(シングルモータ付き)

下の段 左から

  • タミヤ工作キット
  • ツインモーターギア付き
  • 100円均一で買ってきたボックス(結局つかわず)

 

難なく作製し、explorer hatをつけてモータを接続しました。モータの電極接合部分はハンダづけして取れないようにしました。

組み立て1

組み立て2

当然動作はしたのですが、グリスの付け方が甘かったのか?左右若干速さが違っていました。(微調整した)

 

ツインモーターにしたのは、シングルだと前に進むか後ろに進むかしかなかったので、ツインにしました。

右モータを前方向へ、左モータを後方向へ動かすことで方向転換できるようにしました。

 

バギー前部分に超音波センサーを付けて壁や障害物が迫ってきたら方向転換するようにしようと考え
DIYMALL HC-SR04超音波距離モジュールセンサー For Arduino

DIYMALL HC-SR04超音波距離モジュールセンサー For Arduino

HC−SR04を購入しました。

 

ですが、困ったことにexplorer hat経由で配線するとどうも動かないようで(なぜか指でTrigをつまみながらだと指から流れる微弱な静電気で?ちゃんと動作していた。原因不明だが、海外サイトでもできないという報告はありました。)

で、しかたなくTrigをラズパイZEROのGPIO17にハンダづけしたところちゃんと動作したのです。

ハンダGPIO17

 

で完成したのがこんな感じです。

バギー2

バギー1

 

簡単なpythonプログラムでこんな感じで動いた

buggy

#!/usr/bin/python
import explorerhat as eh
import time


def sonicRead(sensor):
    import time
    import RPi.GPIO as GPIO

    TRIG=17
    ECHO=23
    
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)

    if sensor == 0:
        GPIO.setup(TRIG,GPIO.OUT)
        GPIO.setup(ECHO,GPIO.IN)
        GPIO.output(TRIG, GPIO.LOW)

        time.sleep(0.3)
        GPIO.output(TRIG, True)
        time.sleep(0.00001)
        GPIO.output(TRIG, False)

        while GPIO.input(ECHO) == 0:
            signaloff = time.time()

        while GPIO.input(ECHO) == 1:
            signalon = time.time()

        timepassed = signalon - signaloff
        distance = timepassed * 17000
        return distance
        GPIO.cleanup()
    else:
        print "Incorrect usonic() function varible."

        
def moterAction(value):
    LEFT = 90
    RIGHT = 90
    TWIN = 90
    LEFT_MOTOR = eh.motor.two
    RIGHT_MOTOR = eh.motor.one
    TWIN_MOTORS = eh.motor
    
    TWIN_MOTORS.forward(TWIN)
    # forward
    #LEFT_MOTOR.forward(LEFT)
    #RIGHT_MOTOR.forward(RIGHT)

    flg = 0
    while True:
        print value
        if value <= 14 :
            flg += 1
        else :
            flg = 0
            
        if 3 <= flg :
            # backward
            TWIN_MOTORS.backward(TWIN)
            time.sleep(1.00)
            # turn
            LEFT_MOTOR.forward(LEFT)
            time.sleep(1.50)
            # forward
            TWIN_MOTORS.forward(TWIN)
            flg = 0
        time.sleep(0.03)
        value = sonicRead(0)
        
value = sonicRead(0)
moterAction(value)

動かすとモーター駆動音と迫力で1歳の息子が泣くのです。

あとはwebカメラつかったりコントローラ画面をwebで作ったり色々してみたいと思います。

-RaspberryPi
-,

WP Twitter Auto Publish Powered By : XYZScripts.com