Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
75
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Raspberry Pi 2とタミヤの1/10RCでインターネットラジコンを作ってみた

インターネットラジコンを作ろう!

!!!個人的な備忘録です!!!
私はRaspberry Piや電気工作に関して、ほとんど素人です。所々正しくない記述があるかもしれません。適宜直しますのでどんどんご指摘ください。
15_秋_wip.001.jpeg

今回作ったもの

JavaScript (Node.js)、スマートフォンのモーションセンサーで制御できるラジコンカーを作ります。今回はスマートフォンから操作出来ることを目標にします。
ソースコードはGitHubで公開しています
追記:
新しく書き直したバージョン

仕様

  • Raspberry Pi 2 B rasbian 4.1~
  • Servoblaster 2015年10月更新版
  • Node.js v0.10.28
  • npm 3.3.12
  • Socket.io 1.4.5
  • Express 4.13.4
  • Keypress 0.2.1

構成図.jpeg

一般的なラジコンの構成図

スクリーンショット 2016-01-31 3.12.14.png
こちらが一般的なラジコンの主要部分の構成図です。今回利用したTAMIYAのRCはもちろんのこと、だいたいの競技用ラジコンカーが共通してこのような構成です。

  • 送信機
    • いわゆるプロポ。リモコンです。
  • 受信機
    • プロポから受け取ったFMなりWi-Fiなりの電波を、PWM信号という電気信号にして各部に送信します。
  • ESC
    • スピードコントローラーとも呼ばれる部分です。受信機からの信号を基にモーターに掛かる電圧を変えて回転数を制御しているそうです。バッテリーはここに接続されます。
  • サーボ
    • 受信機からの信号を受け取りステアリングを動かすモーター部分です。
  • バッテリー
    • 図には載っていませんが、クルマが走るためには勿論バッテリーが必要です。TAMIYAのノーマルは7.2v 1000mAh。

今回の構成

スクリーンショット 2016-01-31 3.11.21.png
続いてこちらが今回の構成図。上の図と比べればどこがどの役割を果たすかが分かりやすいですねぇ。

  • Raspberry Pi
    • 言わずと知れたIoTの申し子。今回はRaspberry Pi 2を使用しました。
  • パソコン・スマホ
    • 環境を構築したり、ラジコンを制御するのに使用します。一部のスマホではモーションセンサーが動かない可能性があります。
  • Raspberry Pi
    • 言わずと知れたIoTの申し子。今回はRaspberry Pi 2を使用しました。

準備編

1.必要なもの。

インターネットラジコンでIoTの恩恵を享受するためにはそれなりに投資が必要です。

ラジコン

今回はTAMIYAのXBシリーズを使用しました。
XBシリーズ No.148 スバル BRZ
大体同じ要領でできると思うので車種はお好みでどうぞ。シャシーの種類によってはRaspberry Piの収まりが悪いかも。

Raspberry Pi 2

http://www.amazon.co.jp/dp/B00TBKFAI2
OSをインストールするためにはSDカードも必要です。
ちなみにRaspberry Pi 1だと電圧不足などに陥る可能性があり。

USB Wi-fiモジュール

http://www.amazon.co.jp/dp/B002G9URGA
Raspberry Piを無線に接続するために使用します。今回はバッファローのアダプターを使いましたが、適宜手に入った物を使って下さい。

ジャンパーワイヤー

http://www.amazon.co.jp/dp/B00P9BVKOK
配線用のケーブルです。オスメス,オスオス,メスメスが全部あるとすごく便利になるはず。

モバイルバッテリー

http://www.amazon.co.jp/dp/B0071SYNAM
車載したRaspberry Pi用のバッテリー。ラジコンに積める物なら何でもOK。

USBケーブルなど

Raspberry Piをモバイルバッテリーに接続する際に使用します。適宜用意。

2.環境構築をしよう!

インターネットラジコンを作り始める前に基本的な環境構築をしましょう。わかる方は読み飛ばしちゃって下さいな。

SSHクライアントのインストール

Windowsの方はSSHクライアントをインストールする必要があります。
  Tera Termなどを適宜用意して使ってください。

Raspberry Piの初期設定

Raspberry PiにOSをインストールし、無線接続・SSH出来る環境を整える必要があります。
デフォルトOSのRasbian,バージョンは4.1以降で大丈夫です。
Raspberry Pi 2 設定メモ 01 (導入編)
raspberry pi2 で 無線 LAN 設定まで
適当にお好きなリンクをどうぞ。こういう時Qiitaは便利ですね。固定IPを用意できるなら設定。
Raspberry Piに固定IPを割り振る

配線編

結構簡単です。自分は手探りでやったので時間がかかりましたが、やり方を理解すれば猫でも5分で出来ます。

1.受信機から端子を引き抜く。

【画像】
左側がアクセル,右側がステアリングです。平型端子の爪を折り、白のケーブル2本と黒のケーブル1本(アースなのでどっちでもOK)を引きぬきましょう。

2.配線をする。

 回路図って物がさっぱりわからないので、猫でもわかる絵にしてきました。
アースが大事です!!忘れると動きません。
配線図.png
gpoio.jpg
必要に応じてハンダゴテやキボシ配線などを使いましょう。

実装編

ServoBlasterのインストール

https://github.com/richardghirst/PiBits/tree/master/ServoBlaster
ServoBlasterは接続したサーボをターミナル上で操作できる超便利なライブラリです。これを発見するまでCでPWM信号を自力で生成してましたから楽になったものです。
Raspberry Piのカーネルのバージョンによってはソースコードの書き換えが必要でしたが、最新版で公式に対応したためそのまま実行するだけでサーボが回せるようになります。

githubから最新版をダウンロードしましょう。

:~/
git clone https://github.com/richardghirst/PiBits.git

余計なファイルがダウンロードされるので消しときます。内容は変わるかもしれないので適宜適当に。

ServoBlasterの実行ファイルがあるディレクトリに移動してMAKEします。そのまま管理者権限でインストール

:~/
cd ServoBlaster/user
make 
sudo make install

これでインストールは完了。今後は、makeしたディレクトリ下で

:ServoBlaster/user
sudo ./servod

を実行すればOKです。

動作テストをしてみましょう。

$echo サーボ番号=周波数 > /dev/servoblaster

で接続したサーボを動かす事ができます。
RC用サーボの周波数は事前に受信機からオシロスコープで調べておきました。

glaf2.png

17.5msec周期で、1msec~2msecの範囲でアクセル全開↔バック全開,左一杯↔右一杯を制御しています。何も操作していない状態(ニュートラル状態)は1.5msecです。
Servoblasterでは1msecが100として扱います。

例えば左一杯に切るときは、

:~/
echo 1=100 > /dev/servoblaster

右に切りながらちょっとだけバック

:~/
echo 1=170 > /dev/servoblaster
echo 2=160 > /dev/servoblaster

というように数値を増減させることで速さを調整させることが出来ます。
閾値をまとめておきました。

前進:100~149
ニュートラル:150~158
バック:159~200
左:100~149
ニュートラル:150
バック:151~200

微妙にアクセル側のニュートラルが広いみたいです。ちなみに前進状態から直接バックに移行することはブレーキ機能が作動するため出来ません。一度ニュートラルを経由させてあげましょう。

操作プログラムをダウンロードする

と、いうわけでここまで自由にラジコンをRaspberry Piから操作できるわけです。
自分は通信機能を拡充させることを見越してnode.jsで操縦プログラムを作ってみました。
githubにコードをあげていますのでクローンしてきて下さい。

$ git clone https://github.com/yas-nyan/Internet-RC.git

node.jsのインストール

node.jsでファイルが構成されているためnodejsのインストールが必要です。
このページが参考になりました。
http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi2_Nodejs.html

npm moduleのインストール

npmとはnodeの拡張機能群です。ラジコンに必要な拡張機能をインストールしましょう。
package.jsonというファイルに必要なモノは全て記述されてあるので、ワンコマンドでmoduleをインストールできます。

:~/Internet-RC
npm install

hostの宣言

nodejsでサーバーを立ててそこにブラウザからアクセスする形でラジコンを操作します。
サーバーのアドレスをプログラムに教えてあげる必要があります。host.jsをjsディレクトリ以下に作れば勝手に読んでくれます。
固定IPを用意出来ている方は固定IPを、ローカルネットワークで操作する方はRaspberry PiのIPアドレスをhost.nameに書いちゃってください。

ちなみにIPアドレス調べ方。wlan0のinetで普通はOK。

:~/
ip a
:~/Internet-RC/js
vim host.js


:~/Internet-RC/js
var host ={
    name:"【ラズパイのIPアドレス】",//固定IPを用意出来ている方はそれを。
    port:"3000" //初期値は3000です。

}

実行!走らせよう!

さあようやく実行です。

:~/Internet-RC/
node socket-rc.js

これでサーバーサイドは起動完了。
モーションセンサーによる操作機能が実装されてるのでスマートフォンから下記のアドレスにアクセスしましょう。

http://【Raspberry PiのIPアドレス】:3000/

今後の展望

携帯回線を積みたいんだなぁ...\(^o^)/

追記

携帯回線を積んで動かしてみました。
いつか詳しく記述します。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
75
Help us understand the problem. What are the problem?