rasbperry pi zeroの軽量さと停電力、そして同時購入してしまったexplorer hatを生かして
自走バギーを手始めに作りました。
ハンダづけ
まずはハンダづけでGPIOピンを固定
以下を購入しました。
右から
- はんだ 0.6mm
- ハンダこて 精密用こて先I型
- ハンダこての清掃用スポンジ
いずれもコーナンで購入しました。
中学時代の技術授業以来使ったのでおぼつかない手つきではありましたが、youtubeのハンダづけテクニック動画をみながらraspberry pi zero とexplorer Hatをハンダづけしました。
ロボット作る前にLチカで遊んだりしてました。ハンダがちゃんとついたかのテストも兼ねてですが。
ロボットの基礎部分作製
バギーを模型屋から買いました。
そう、夏休みの工作などで昔触ったことがあったようななかったような。タミヤの例のやつです。
もともとはミニ四駆にしようかと思いましたが、ちょうど良さげなバギーがあったのでそっちを購入しました。
上の段
- バギー本体(シングルモータ付き)
下の段 左から
- タミヤ工作キット
- ツインモーターギア付き
- 100円均一で買ってきたボックス(結局つかわず)
難なく作製し、explorer hatをつけてモータを接続しました。モータの電極接合部分はハンダづけして取れないようにしました。
当然動作はしたのですが、グリスの付け方が甘かったのか?左右若干速さが違っていました。(微調整した)
ツインモーターにしたのは、シングルだと前に進むか後ろに進むかしかなかったので、ツインにしました。
右モータを前方向へ、左モータを後方向へ動かすことで方向転換できるようにしました。
バギー前部分に超音波センサーを付けて壁や障害物が迫ってきたら方向転換するようにしようと考え
DIYMALL HC-SR04超音波距離モジュールセンサー For Arduino
HC−SR04を購入しました。
ですが、困ったことにexplorer hat経由で配線するとどうも動かないようで(なぜか指でTrigをつまみながらだと指から流れる微弱な静電気で?ちゃんと動作していた。原因不明だが、海外サイトでもできないという報告はありました。)
で、しかたなくTrigをラズパイZEROのGPIO17にハンダづけしたところちゃんと動作したのです。
で完成したのがこんな感じです。
簡単なpythonプログラムでこんな感じで動いた
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#!/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で作ったり色々してみたいと思います。