Mashup Awardsに出てきた
ブログに書くまでがハッカソン
という言葉を,今回のMashup Awardsで聞いたので,このブログ記事を書くことで今回のハッカソンを閉じることができそうです.
そもそも,Mashup Awardsってなに?
MashupAwardsとは、2006年にはじまった日本最大級の開発コンテスト。様々なデバイスやAPI、ハードウェア、技術をMashupし、さらに人や企業もMashupしながら、作品を生み出すことを楽しむ「ものづくりの祭典」です。パートナー企業は60社を超えます。最優秀賞は100万円!賞の数が多いこと、全国でイベント開催していることも特徴です
*About MA 2017より引用.
そんな日本最大級の開発コンテストが,僕の今いる会津若松市で,2017年10月28/29日で開催されました.
Mashup Awardsについて
午前10時に開始ということで,9時30分ごろに会津大学に集合.ネームプレートのようなものが渡され,ニックネームと,自分が持っている技術を書かされる.
Mushup awardsにきました pic.twitter.com/n2YOY7G09T
— 飛ばすはとバス@リバウンド82.8 (@flying_hato_bus) 2017年10月28日
ハードウェア大好き人間(できるとは言っていない)なので,持っている技術として書くものはArduinoとRaspberry pi,そしてPythonを書く.
今回作りたかったもの
今回僕が作りたかったものとしては, 自動で動く赤べこです.
何回か作っていますが,赤べこネタはこれで最後くらいかなと思いまして,けっこう頑張って行こうと思いました.
過去の赤べこたち
ELECTRICAL COMMUNICATION
— 飛ばすはとバス@リバウンド82.8 (@flying_hato_bus) 2017年9月3日
引き裂かれてる IMAGINATION
誰にも 邪魔させない
Sparkしてる ROCK ACTION
打ち砕け MEDITATION
狂った現実(いま)を焼き捨てたい pic.twitter.com/qriS4L4seB
ア カ ベ コ タ イ ム pic.twitter.com/COi8JDfeDk
— 飛ばすはとバス@リバウンド82.8 (@flying_hato_bus) 2017年9月3日
今回は,vivosmart HRJを使用して,心拍数と合わせて首の動きをリアルタイムにリンクさせようとしていました.
作ることになったもの
心拍数データを使用した,健康管理サービス(with 赤べこ)
模式図としてはこんな感じ.
スマートウォッチから得てきた心拍数のデータをRaspberry piで取得.サーバーに送信し,Raspberry piがデータを取得,赤べこに反映させる また,モバイルアプリやwebサービス共連携し,1日の心拍数データなどを取得することもできる.
こんな感じでした.
大学でよくつるんでいる3人と合流し,4人で開発がスタート.
4人の内訳として,ハードウェア(ぼく),サーバーサイド,webフロント,モバイルアプリと,バランスの取れたチームだと思いました.
ほかの3人も,同様にブログを書いてくれていると思うので,今回は僕が実装したところ,気づいたところを書きます.
最初にやったことは,スマートウォッチとRaspberry piの連携.
参考にしていたのは,ここ.わかりやすい上に,1時間と少しくらいで全部実装ができた.
それくらいの時間でだいたい3時ごろ,そのあとそのあとに迫っていた電子工作部門で必要な部品を調達したり,別に買い物をしたりしてから,ようやくステッピングモータに.
一番手間取ったのがこのステッピングモータの部分でした.
まともに使えるライブラリが存在しませんでした.
使用したモータードライバはこちら
上の動画で動いている赤べこはこちらのドライバをArduinoで使用していました.
今回はこれをRaspberry piで動かそうとしました.
とりあえず,githubやら,ブログ記事やらに書かれている奴を片っ端から動かしていってみましたが,一向に動きませんでした.
これで大学でできる時間の大半を使い果たし,動かないまま僕の家への開発へ.
ずーっと探して試行錯誤するのにも面倒だと思って,「一から実装するか!!」と一念発起したらなぜか30分もかからず動いたので,今回はこれを書こうと思います.
EasyDrive
今回使用した easydriverの模式図です.
ピン名 | 用途 |
---|---|
PWR IN (GND / M+) | モータへ電源を供給する |
STEP | 立ち上がりエッジでモーターが動く,パルス幅1ms min. |
DIR | 回転方向を決定 |
MS1, MS2 | マイクロステップの設定。デフォルトは共にプルアップされており、1/8ステップ。 |
ENABLE | HIGHにすると出力が止まる.今回はずっとLOW |
RST | 全シーケンスをHome Stateに設定,出力は停止,Reset端子がHighになるまでStep入力は無視 |
PFD | 次の出力電流が前回より少なくなる場合,PFDピンへの入力で電流の抜け方が変化.VCCにプルアップされているので slow decay modeになっている。とりあえず非接続でよい |
SLP | Sleep機能,非接続でよい |
MOTOR | モーターに接続する。A/Bがそれぞれ一組 |
5V | 5V出力 |
APWR (SJ1) | ここをショートさせると外部からA3967へVCCを給電できる |
3V/5V (SJ2) | VCC設定。ショートさせると3.3V, オープンだと5Vになる |
TP1 | 電流調整 |
- バイポーラステッピングモータ用
- 入力電圧は8V~30V (5V系), 6.4V~30V(3.3V系)
- 出力は最大30V, 150~750mA
- 1/1, 1/2, 1/4, 1/8 マイクロステップ動作対応
- 特別な電源シーケンスは不要
- (チップの)貫通電流防止、加熱防止、低電圧保護
とまあ,今となって見ると実装が簡単そうなもの.
実装
配線としてはこんな感じ.Raspberry piに繋げるのはGPIO23,24,GNDの3ピンくらい
import RPi.GPIO as GPIO import time import sys GPIO.setmode(GPIO.BCM) GPIO.setup(23,GPIO.OUT) #23 is DIR pin GPIO.setup(24,GPIO.OUT) #24 is STEP pin class stpmotor(): def __init__(self): pass def Drive(self, rpm): one_rot = 200 l = rpm * one_rot delay = 30/(2*float(l)) steps = l/6 #rotato to 5 sec for x in range(1,steps): GPIO.output(24,GPIO.HIGH) time.sleep(delay) GPIO.output(24,GPIO.LOW) time.sleep(delay) def inv_Direction(self): GPIO.output(23, not GPIO.input(23)) if __name__ == '__main__': Motor = stpmotor() Motor.Drive(YOUR_VALUE) GPIO.cleanup()
これで動きます.細かい話はgithubのリポジトリを参考に.
実装した感想なのですが,DIRで回転方向を決めて,STEPピンに矩形波を入れてあげればとりあえず動く.
Drive関数で矩形波を作成して動かしている.
ステッピングモータを動かすために必要なのはステップ数と,ステップ角,そしてちょっとした計算能力です.
ステップ角は一回のステップ(矩形波)で動く角度です.大体は1.8度とかになってます.
ということなので モータの回転量[°] というのは
モータの回転量[°]= モータ固有のステップ角[°]× 指令パルス数
一回転するためには 360/1.8 = 200 回パルスを送ってあげればいいことになる.
それを指定回数分回すことになるので,rpmを設定して.回転数などを取得します.
あとはforの求めたdelayを使ってHIGH,LOWを入れ替えます.
そしたら多分こうやって動く
動いたので神 pic.twitter.com/B1OXCVxxQx
— 飛ばすはとバス@リバウンド82.8 (@flying_hato_bus) 2017年10月28日
こんな感じで動いてました.
辛かったこと
webの知識が全くないです
pythonでろくにPOSTも投げられませんでした.のあくんにめちゃくちゃキレられました.
API叩くなりして,これからもうちょっとwebの知識を入れていきます.
できたもの
僕が作った赤べこです!!! #MA_2017 pic.twitter.com/2LjwYXFFKx
— 飛ばすはとバス@リバウンド82.8 (@flying_hato_bus) 2017年10月29日
こんな感じです.5秒に一回サーバーにGETリクエストをして,取ってきた情報から赤べこの首を動かしています.
今回はここら辺で終わり.もうちょっとwebの知識を入れてからハッカソンに臨もうと思いました.