2014/10/21

BrainWarsが楽しい

最近、技術ネタが無いので、趣向を変えてみました。


Android/iOSでリリースされている、BrainWarsというアプリを入れてみました。
「リアルタイム対戦型脳トレ」です。


神経衰弱、四則演算などの、いわゆる脳トレアプリがいくつか入っており、その成績を他のプレイヤーと競います。

このゲームの目玉は、なんと言ってもリアルタイムネット対戦です。
世界中の人と競い合いながら、脳トレをすることが出来ます。

1回の対戦は5分ぐらいで終わるので、ちょっと暇になった時にぴったりのアプリです。


また、各脳トレの成績から、能力チャートが作られます。
ある程度、対戦時の参考になったりします。




もしよければ、僕のユーザコード「SW4188」に、フレンド申請をお願いします。

フレンドになれば、登録したフレンドといつでも対戦することが出来るようになります。
対戦には相手がアプリを開く必要がありますが、フレンド対戦だと相手のゴースト(相手の記録に沿ったコンピュータ)と対戦することも出来ます。

2014/10/12

【ジャイロセンサ、加速度センサ】ティーポッドを回す

台風19号が近づいて来てるせいか、風が強いです。
家が吹き飛びそうですが、なんとか生きています。


それはそうとして、以前このブログにも何回か載せた傾き検出を、分かりやすく可視化してみました。
OpenGLを使って、マイコンから得た傾きデータを元に、3Dティーポッドを動かしています。



今はピッチとロールだけしか反映させていません。
ヨーを反映させるなら地磁気センサの値を使ったほうがいいかもしれません。(ジャイロセンサだとドリフトが発生する)

2014/10/09

FETゲートドライバのIR2302を使ったモータドライバ

秋月に売ってるIR2302ゲートドライバを使ったNchFETフルブリッジモータドライバです。



FETは、IR社のIRFB4410PBF(100V 96A 250W)を使っています。

IR2302は、ハーフブリッジ用のゲートドライバです。
NchのみでHブリッジなどを組むと、ハイサイドFETの駆動電圧をどうやって上げるかが問題になりますが、このICではブートストラップ方式で昇圧を行い、ハイサイドFETの駆動を行っています。
ICでデッドタイムなども挿入してくれているらしいです。(540ns程度)

ロジック入力に入れるPWMの周波数は、10kHzまでは動作を確認しています。
モータに負荷をかけた状態や、回転方向の切り替えを短時間に何回も行った場合の動作確認をしていないので注意。(540モータを2つ同時にぶん回すことは可能)

このICは、モータ側の電源と、ロジック側の電源のGNDが共通になっています。
データシートにはちゃんと絶縁されていると書かれているので大丈夫とは思いますが、気になる方は、フォトカプラをつけるなり何なりお願いします。(僕は、マイコンのロジックを直接繋げてますが、壊れたことは無いです。)

ロジック入力

00 : ローサイドブレーキ
01 : 正転
10 : 逆転
11 : ハイサイドブレーキ(非推奨)


使うときの注意点


  • 最大定格電圧は、FET、ゲートドライバ、ダイオード、パスコンの定格電圧のうち、最も低いものになります。これを超えたら死にます。(回路図では、パスコンが一番低いので、50V)
  • ゲートドライバへの電源(回路図のVd)に20V以上かけると、もれなくゲートドライバとFETが死にます。
  • ロジック入力を長時間Highにしていると、ブートストラップコンデンサの電荷が放電されてしまい、モータが停止します。そのため、必ずPWM制御等でLowの時間を取るようにしてください。
  • パスコンを取り付けないとスパイクノイズがひどいので、必ず取り付けるように。
  • 最大定格電力を超えないようにしてください。
    (参考:http://abcdefg.jpn.org/elememo/swfet/cc.html



「100Aは雑魚」

という変態な人たちもいると思うので、そういう場合はFETをもっと強い奴にするかIGBT等に変えてください。

2014/09/10

マイコンでブラシレスモータ用ESCを制御する

忘れそうなので自分用メモ。

ラジコン飛行機などに使われる小型のブラシレスモータを動かす、ESC(アンプ)をマイコンで制御したかったので、やってみました。

用意したもの

・ブラシレスモータ
A2208-KV1400 ブラシレスモーター
http://www.rc-e-tech.co.jp/eccube/html/products/detail.php?product_id=3502

・ESC
ZTW BEATLES20ABEC ブラシレスアンプ
http://www.rc-e-tech.co.jp/eccube/html/products/detail.php?product_id=4476

・マイコンボード
STBee Mini

結線

モータやバッテリとの結線は、使うESCのマニュアルを見てください。

ESCからは、比較的太目の線と細い線が出ているはずです。
細い線はラジコン受信機に繋ぐためのものですが、今回はマイコンから制御するため、マイコンに接続します。

制御信号

サーボと大体同じです。
PWM周期は20ms前後でON時間を1~2ms程度で動作するようです。

僕が使ったESCでは、電源投入時にON時間を1msにするとESCが初期化を開始しました。
1.4msあたりからモータが回転し始め、大体1.8ms程度で最大出力になりました。

信号を見れば分かると思いますが、このタイプのESCは一方向にしか回転させることができません。

モータの回転方向が逆のほうがいい場合は、ESCとモータの結線を変えれば回転方向を変えられます。

2014/08/19

テトリス

Win7のコンソールで動くテトリスです。
暇つぶしに作ってみた。

やっつけ感がすごいけど、ご勘弁を。


Githubに上げているので、興味があればどうぞ。
https://github.com/nekosan/tetris

2014/08/13

残像LEDディスプレイ的なアレ



これを持って振ったら、残像で空中に文字が出て読める、的なやつです。
残像LEDディスプレイはググったら結構たくさん出てきて、僕も作りたくなったので作りました。

今のプログラムでは時計として機能します。(RTCを組み込んでないので電源切ったら要調整)

加速度センサが付いていて、振ったら勝手にLEDが光ります。

本当は振る速度に応じて発光スピードを変えて、表示長さを一定にするようにしたかったのですが、なかなか難しくて、とりあえず5[g]以上の加速度を検知したら発光を開始するようにしています。

ちょっとした衝撃とかでも光っちゃうので、そこが課題です。


最終的には小型化してBluetooth基板を搭載して、Androidと連動させたいです。
腕時計型にして、見たいときに腕を振れば情報が表示される、みたいな。

イメージはこんな感じ。

2014/07/04

ライフゲーム

ライフゲームとは↓
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0


面白そうだなーと思って、とりあえず作った。

https://gist.github.com/nekosan/988c4c43104d77c3d861

単純な規則なのに形によってはすごく複雑になったりするのは結構興味深いです。

個人的にはグライダー銃が好き。

2014/06/27

傾き検出まとめ

nekolabの資料庫に、9軸センサを使った姿勢制御のページを作りました。 

https://sites.google.com/site/nekolabwiki/electronic/posturecontroll


いままでブログにちょこちょこ載せてきた内容をまとめたものです。

2014/06/20

RasPiで9軸センサーを動かす

Raspberry PiでI2Cを使って9軸センサー(MPU9150)を動かしてみました。
今後も使う可能性あるので自分メモです。

RasPiでI2Cを使うのに参考にした(丸パクリしたともいう)サイトは次のサイトです。
http://www.instructables.com/id/Raspberry-Pi-I2C-Python/all/?lang=ja


環境

実機 :Raspberry Pi Model.B
OS  :Raspbian
センサ:9 Degrees of Freedom Breakout - MPU-9150

1.RasPiのI2Cを有効化する。

RasPiのI2Cはなぜかデフォルトでは使えません。
/etc/modprobe.d/raspi-blacklist.conf にある設定ファイルを変えると有効化できます。

$ sudo vi /etc/modprobe.d/raspi-blacklist.conf

ファイルをエディタで開きます。

blacklist spi-bcm2708
blacklist i2c-bcm2708

blacklist i2c-bcm2708をコメントアウトします。

blacklist spi-bcm2708
#blacklist i2c-bcm2708

これでI2Cが有効化されました。

2.カーネルのI2Cモジュールを有効化する。

/etc/modulesを編集して、I2Cモジュールを読み込むようにします。

snd-bcm2835

の末尾に、i2c-devを追加します。

snd-bcm2835
i2c-dev

3.パッケージをインストールする。

apt-get updateを実行してから、i2c-toolsと、python-smbusをインストールします。

$ sudo apt-get update
$ sudo apt-get install i2c-tools
$ sudo apt-get install python-smbus

終わったら再起動します。

$ sudo reboot

再起動が終わったら、インストールしたソフトがちゃんと動いてるか確かめます。

$ sudo i2cdetect -y 1
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

こんな感じの表示が出れば大丈夫です。

i2cdetectコマンドの引数は、RasPiのタイプ(?)によって違うのを用いるみたいです。
参考サイトでは引数を0にしていますが、今回用いたRasPi、Model.B(メモリが512MBのほう)では、引数を1にするとうまくいきました。

4.9軸センサを実際に接続してみる。

RasPiの外部端子と9軸センサを接続します。使うのは3.3V,GND,SDA,SCLのみです。
RasPiの端子配列は(http://elinux.org/RPi_Low-level_peripherals)を参考に。

9軸センサの端子は、センサボードごとに調べてください。

I2Cなので、SDAとSCLにプルアップ抵抗は必要です。
センサボードに搭載されてなければ、自分で抵抗を接続してください。

5.Pythonで通信するコードを書く。


import smbus
import time

class Mpu9150:
 
    def write(self, register, data):
        bus.write_byte_data(self.address, register, value)
        return 0

    def read(self, register):
        data = bus.read_byte_data(self.address, register)
        return data

    def __init__(self):
        self.bus = smbus.SMBus(1)
        self.address = 0x68

        #ここにセンサ初期化用の処理


if __name__ == '__main__':
    mpu = Mpu9150()
 
    while True:
        #何らかの処理

だいたいこんな感じです。
センサのI2Cスレーブアドレスは用いるセンサのマニュアルを参照してください。

このプログラムには例外を組み込んでないので通信が失敗したらクラッシュします。注意。



大体こんな感じでI2C通信ができました。
Pythonだと楽ですね。

今回はPythonのコードを書いてI2Cを行いましたが、シェル上からコマンドでI2Cすることも出来るようです。C言語でも同じようなコードが書けるようなので、知りたい方はグーグル先生へ。

では。


2014/06/04

ATMega328Pをアセンブラで動かしてみた

タイトルまんまです。

僕はわりと最近マイコンを触り始めた勢ということもあり、アセンブラを触ったことがありません。

と、いうわけで書いた!


 .include "m328Pdef.inc"

 .def TEMP=R16

 .org 0x0000

 rjmp RESET

 RESET:
 ldi R16,LOW(RAMEND)
 out SPL,R16

 ldi TEMP,0xFF
 out DDRB,TEMP

MAIN:

 LED_ON:
 ldi TEMP,0b00000001
 out PORTB,TEMP

 rcall wait05

 LED_OFF:
 ldi TEMP,0b00000000
 out PORTB,TEMP

 rcall wait05

 rjmp MAIN

wait05:
 ldi R18,5

wait052:
 rcall wait01
 dec R18
 brne wait052
 ret

wait01:
 ldi R19,40

wait012:
 rcall wait1m
 dec R19
 brne wait012
 ret

wait1m:
 ldi R20,250

wait1m2:
 nop
 dec R20
 brne wait1m2
 ret

Lチカ!!!!
楽しい!!!!!!


アセンブラはめんどくさそうと思っていましたが、全くその通りでした。
でも楽しかったので良しとします!

次は条件分岐だ...

2014/05/19

LEDが点滅するだけの記事



みんな大好き、非安定マルチバイブレータ回路を作りました。
比較的単純な回路で視覚的に動作がわかりやすいということもあり、電子工作の初心者におすすめな回路として有名ですね。


せっかくなので基板を使わずに作ってみました。製作時間は15分ぐらい。
ちゃんと点滅します。
http://youtu.be/MpXq6GTwiSI


何も考えずに作ったので、配線にムダがあったりします。
たぶんもう少し小さく、ショートしにくく作れるはずです。誰か作って。

2014/05/12

倒立振子っぽい?




本体と回路だけ作りました。

構成は、ArduinoUNOと3軸センサモジュール、TB6612FNGとかいうモータドライバです。
電源は9V。(FA130モータの定格3Vだった気がするけど気のせいだよな)


前にブレッドボードで同じのを作ったりしましたが、モータノイズでマイコンがやられてたので、コンデンサとか付け足して作り直しました。

当初は6V(1.5V電池4本直列)で動かしてましたが、(恐らく)電池の内部抵抗による電圧降下でマイコンがリセットされてしまうため、増やしました。

車輪にエンコーダが必要な気もしますが、つけていません。たぶん大丈夫です。


まだプログラムとか作ってないので動作未確認です。
Arduinoのプログラミング楽すぎてAVRのプログラムを書くのが非常にだるくなってしまった。

今週中に動かせたらいいなぁ。

2014/05/05

ジャイロセンサで遊ぶ

ジャイロセンサ(9 Degrees of Freedom センサスティック)を使っていろいろ実験。
ゆくゆくはセグウェイもどきを作る予定。

実験方法

ジャイロセンサを地面に置いた状態を初期値とする。
ジャイロセンサを傾けてみて、元に戻す。
これを何回か繰り返す。

CPU : Arduino UNO
センサ : 9 Degrees of Freedom センサスティック

ジャイロセンサの設定

Sample rate :1000Hz
Digital LPF :47Hz

センサ値の取得は1軸のみ。


1.補正無し

ジャイロセンサから100ms間隔でデータ値を取る。このデータ値、つまり変化量は赤線で表す。
取得したデータ値を変数に加算していって積分する。このデータは現在角度で緑線で表す。


だんだんと誤差が増えていっている模様。


2.オフセット、平均補正を付加

起動時、センサの値を20ms間隔で5回取得し、この平均をオフセット値とする。

センサ値を20msで5回取得した平均を取ったものを変化量とする。変化量は赤線。
変化量を加算した(積分した)のが現在角度。角度は緑線。


補正よりはマシになった。何回か動かすだけならば問題ないみたい。



課題

オフセットと平均補正を取ったら改善はした。
が、どうしても少しずつズレていっているみたい。
これをどうにかする。

2014/04/25

高専ロボコン2014開始

ついに今年のルールが発表されましたね。
http://www.official-robocon.com/jp/kosen/kosen2014/index.html

競技課題

「出前迅速」


移動手段の制限が大幅緩和されたこともあり、さまざまなアイデアが見れそうで楽しみです。

「オフシーズンにせっかく足の研究したのに!」という声が全国各地から聞こえてきそう...

回路班の僕としては電子制御バリバリ使いたい気分ですね。
卒研のテーマにでもするか...w


ではでは ノシ

2014/04/12

【メモ】BeagleBoneBlackで無線LAN

BeagleBoneBlackで無線LAN使うメモです。

ほとんど参考にしたサイトの内容なのであしからず。

参考

http://www.fisproject.jp/
http://www.openrtm.org/


環境

ハード:BeagleBoneBlack A5C
OS:Debian Wheezy
無線LANアダプタ:BUFFALO WLI-UC-GN


1.LANアダプタの認識

無線LANアダプタをBeagleBoneBlackに挿します。
Debianだと、電源を入れる前に挿しておかないと認識しないので注意。
そして、
$ lsusb
でデバイスが認識されているかを確認します。
それっぽいものがあればOK。

次に
$ iwconfig
で、ネットワーク機器として認識されているかを確認します。
wlan0みたいな項目にいろいろ情報が表示されていれば大丈夫です。

ここで認識が上手くいってなければドライバが無いとか対応していないとかだと思います。
その対策は良く知らないので略。

2.無線LANの設定

次にLinuxのネットワークの設定をします。
$ vi /etc/network/interfaces 

auto wlan0
iface wlan0 inet dhcp 
    wpa-ssid "SSID"
    wpa-psk  "PASSWORD"
/etc/network/interfacesを開き、wlanの項目に接続するSSIDとパスフレーズを書きます。

3.ネットワークの再起動

$ /etc/init.d/networking restart

これで無線LANが使えるようになるはずです。

2014/02/09

【記事紹介】運動神経からの信号で、ラジコン操縦

ぐぐる先生でネタを探していたら、これはすごいと思った記事があったので紹介。

https://plus.google.com/u/0/101828427997295401901/posts/V9B8kjmmDpB

URL先の記事訳です。

ニューラルネットワークは、パターン認識又は機械学習を行うためのアルゴリズムを包含する。あなたは運動ニューロンの活動から学び、パターンを定義し、クアッドコプターの運動指令にこれらをマッピングするためにそれを使用することができます。」(訳:google翻訳)


つまり、腕に付けた電位センサから得た運動神経(?)の信号からパターンを学習して、そのパターンに応じてクアッドコプターに信号を送っている。ということでしょうか。

腕を動かすときはある決まった信号が出るはずなので、そのパターンを学習すれば、体の動きを利用したコントローラーが出来る、と。

画像を見た感じだと、割と高精度な操作が出来ているようですし、自由度は高いのかもしれません。


ラジコンのようなコントローラよりも、自分の体を使ったコントローラーだとより直感的なインターフェースになると思います。
パワードスーツなど、応用できる分野も多そうですね。

2014/01/20

電ちゃんのLEDアクリルプレートつくった


電ちゃんかわいい!!

アクリルプレートにいつぞやに描いた電ちゃんをレーザーで焼いてもらいました。
せっかく頂いたので、LEDアクリルプレートに改造。

回路は簡単。
単三電池4本に、抵抗と青色LEDセット5つを接続した回路を作るだけ。

プレート台は、パーティクルボード(5mm厚)を使用。
特に設計もせずにけがいて切り出したので、若干バランスが悪いです。


そしてアクリルプレートの上のほうに、接着面が銀色のテープを張ります。
こうすると、より綺麗にくっきりと線が光ります。


フルカラーLEDとかを使っても良かったんですが在庫がなかったのでとりあえず青色LEDを使いました。
マイコン載せてグラデーション制御してもよさそうですね。

2014/01/19

スタンフォードの自分を変える教室

今回の記事は、週末に僕が買った本の紹介です。
紹介するのは2冊買ったうちの1冊の方。「意志力」について書かれた本です。



週末の土曜日、僕は編入試験向けの数学演習問題集を買いに出掛けました。
自転車で20分。そこから徒歩5分か10分。

僕は本屋に入ったら決まって、専門書やらが並んでる本棚の前に吸い込まれていきます。
大抵、小説や雑誌コーナーにはたくさんの人が居ますが専門書コーナーとやらはほとんど人が居ないのも足が向く理由のひとつでしょう。

数学関連の本棚でお目当ての本を見つけ、ちょっと時間があるので他のコーナーも回ってみることに。
そこで、ひとつの本を見つけました。



「スタンフォードの自分を変える教室 ケリー・マクゴニガル」
1600円也。
自己啓発本コーナーに置かれていました。

この本の存在は、このときに初めて知ったわけじゃありません。
1、2年ぐらい前に、TwitterでRTされていたツイートを見て知りました。
なので本を見たときに、「あぁ、こういう本あったなぁ」と思い手に取りました。


結果、2600円もする数学参考書と一緒にこの本も購入しました。
Introductionを見て、「意志力」に興味を持ったのが決め手です。


自己啓発や行動改革の本はいろいろありますが、「やらないといけない事がいつまでもできない」人のための本があまり無いなぁと思ってました。
が、これは、そういう人のための本です。(と、Introductionに書いてました。)

思い返すと、やらないといけない事がいつまでもできないなんてしょっちゅうです。
学校の課題、部屋の片付け、レポート、2週間後のTOEICの勉強などなど。
そのくせTwitterやゲームはすぐやろうとするんですから不思議です。
自分でも訳が分かりません。

「意志力」とやらを知ることで、少しでも自分がコントロールできるなら。と、ちょっとだけ期待しながら、買ってみました。


1回読んでみた僕の感想です。
今まで見えていなかった事、考えていなかった事に対して、視野を向けさせてくれる本、という印象を持ちました。

意志力に関するポイントに対して根拠(実験の結果など)が書かれているので、自分にとって効果的かどうかなどを考えているうちに、様々な視点から自分を見直す手助けをしてくれるというような感じです。

自分を見直し、悪習慣を直すきっかけになる良い本だと思います。


課題に手をつけられない、原稿がいつも〆切ギリギリになる、という人は1度読んでみてはどうでしょうか。


では、これぐらいで。

2014/01/06

TWE-Liteモジュール使ってみた

秋月電子に半年前ぐらいに入荷してたTWE-LliteというZigBeeワイヤレスモジュールを使ってみました。
http://akizukidenshi.com/catalog/g/gK-06759/


お値段は1つで1500円程度。
XBeeの安いやつが秋月で1700円ぐらいだったので同じぐらいの値段ですね。

大きさは28ピンDIP(600mil)と同じです。
ピッチは2.54mm。XBeeは2mmピッチなので、こっちのほうが便利。


で、なんとこのモジュールは初期状態で通信ができます。
ディジタル信号を送信できたり、送信側のアナログ入力の電圧値からPWM波を出せたりします。

便利そうだし、XBeeより安いからという理由で買ってもらいました。(部費で)
が、結局使ってなかったので使ってみました。


とりあえずLEDリモコン。


ちゃんと通信できてるみたいです。
これはディジタル信号通信を使ってます。(付属説明書に書いてました)


調べてみると意外と高機能で、内部にマイコンがあって外部からプログラムを焼けるそうです。
つまりこのモジュールにモータドライバをつければ簡単なラジコンが出来ますね。


あと、モジュールの識別をどうやったらいいのか分からない等、色々分かってないので下級生の人たちに押し付けたいと思います。(

ここ最近ロボコンではリモコンも使わないし、ロボット同士の通信は禁止だしで、無線モジュールの使いどころは減ってるので寂しいところ。
イベント用などのロボットでは使ったりするので無用という訳ではないんですけどね。


ちなみに、面実装型のモジュール(http://akizukidenshi.com/catalog/g/gM-06896/)や、書き込み器(http://akizukidenshi.com/catalog/g/gK-06893/)も秋月にあります。


では、これぐらいで。

2014/01/03

あけました

明けましておめでとうございます。
2014年です。早いですね。

このブログも立ち上げてもうすぐ1年になりますね。早いもんだー。

今年もよろしくお願いします。

挨拶だけですが、これぐらいで。

人気の投稿