マカロニペンギンの健忘録

特にテーマを決めているわけじゃないが、私が気になったことを書いていく予定です。

Arduono+Python+Firmataの今日の成果

2014年11月26日 | 電子工作
先日のラズパイコンテストに応募してから逆にArduono+Python+Firmataに魅せられて、頑張っています。(念の為、別にRaspberryPiが嫌いというわけではないです)

とりあえず、今日完成した成果から

Arduonoのシールドは何年か前のMakerFaireTokyoでスイッチサイエンス + セニオネットワークのワークショップに参加した時に娘がハンダゴテを使用して作った「五徳バーLEDシールド」です。

その時に使われていた教科書がどこかに行ってしまったので逆にハード側から調べたのですが、バーLEDのしくみが分からない。
ホント、四苦八苦して調べたら、Complementary LED Driveという方式で点滅していることが判明。

参考:パレットソフトさんの複数LED制御のページの「サンプルプログラム(その2:Complementary LED Drive)」という項目。

とりあえず、作ってみたスケッチはこちら

from firmata import * 

a = Arduino('/dev/ttyUSB0',baudrate=57600) # 3 for COM4

#[Z,Z,Z,L,H]→Z:入力にするポート、L:出力LOWにするポート、H:出力HIGHにするポートの順番で配列(リスト)

led_matrix = [[2,3,4,1,5],[1,3,4,2,5],[1,2,4,3,5],[1,2,3,4,5],[2,3,5,1,4],[1,3,5,2,4],[1,2,5,3,4],[1,2,3,5,4],[2,4,5,1,3],[1,4,5,2,3],[1,2,5,4,3],[1,2,4,5,3],[3,4,5,1,2],[1,4,5,3,2],[1,3,5,4,2],[1,3,4,5,2],[3,4,5,2,1],[2,4,5,3,1],[2,3,5,4,1],[2,3,4,5,1]]


def led_print(n):
#毎回、一旦全部のポートを出力LOWにしている。
    for j in range(5):
       a.pin_mode(n[j] + 4, firmata.OUTPUT)
       a.digital_write(n[j] + 4, firmata.LOW)

#入力にするポート、出力LOWにするポート、出力HIGHにするポートの順番で設定

    print 'SEG' + str(n[0] + 3) + '= Z'
    a.pin_mode(n[0] + 3, firmata.INPUT)

    print 'SEG' + str(n[1] + 3) + '= Z'
    a.pin_mode(n[1] + 3, firmata.INPUT)

    print 'SEG' + str(n[2] + 3) + '= Z'
    a.pin_mode(n[2] + 3, firmata.INPUT)

    print 'SEG' + str(n[3] + 3) + '= L'
    a.pin_mode(n[3] + 3, firmata.OUTPUT)
    a.digital_write(n[3] + 3, firmata.LOW)

    print 'SEG' + str(n[4] + 3) + '= H'
    a.pin_mode(n[4] + 3, firmata.INPUT)
    a.digital_write(n[4] + 3, firmata.HIGH)

    a.delay(0.02)

#本文
a.delay(2)
while 1:
    for i in range(20):  
        print str(i) + " = " + str(led_matrix[i])
        led_print(led_matrix[i])


まあどれをとっても最初にしては上出来では・・・

パソコンから直接Arduinoの入出力を操作する。

2014年11月19日 | 電子工作
先日、「みんなのラズパイコンテスト」に応募してから、私の電子工作熱が復活したようです。
今度はFirmataをやってみたくなりました。

Firmataとはパソコンの高級言語やProcessingからArduinoの入出力端子に直接アクセすることができる方法です。
ArduinoにはあらかじめFirmataのスケッチをコンパイルして入れておきます。

先日、ちょこっと使用しようしたPython言語に惚れ込んでしまいましたので、最終的にはPythonからFirmataを使用したいと思っています。

とりあえず、ProcessingからFirmataを使用してみます。

なにも知らない私が参考にさせていただいたWebページは以下のとおりです。
です。これでArduinoが接続されているUSBの番号を知らないとFirmataが使えないことを知りました。サンプルなども大変参考になりました。

何に使いたいのかも、何に使えるのかも全くわからないですが、楽しみながらやりたいと思います。

「みんなのラズパイコンテスト」に応募してみた

2014年11月12日 | Weblog
一週間でコンテストに応募するための電子工作をイチから作るなどはかなり無謀ですが、とりあえず作って応募しました。
モットーは「参加することに意義がある」です。

今回、応募したコンテストのは「みんなのラズパイコンテスト」です。

ラズパイと聞いて、わからない人のために簡単に説明をすると正式名称はRaspberryPiという名刺サイズの高性能マイコンボードです。名刺サイズなのにLinuxの仲間をインストールして一昔前のパソコン並みに動かすことができます。
このマイコンボードとパソコンの大きな違いは外部に簡単に入出力をすることができるポートを持っていることです。基本的にRaspberryPiで電子工作というとこのポートを使ったものになります。


今回、作ったのは「簡単ホームセキュリティシステム」です。
本当はオチャラケな電子工作にしたかったのですが、残念ながら実用的なものになってしまいました。

ざっくり言ってしまうと、「泥棒さんが家に入ってくると電子メールで知らせる」システムです。

泥棒さんが入ってきたことがわかる部分というのが

ドアについた

センサーと

ブレットボードについた

モーションセンサーです。

これらで泥棒さんを感知すると

ブレットホードについた

LEDが点灯し

LANケーブル経由でメールを送ります。

Raspberry PiでLEDを点滅させてみた。

2014年11月03日 | 電子工作
日経Linux、日経ソフトウェアでみんなのラズパイコンテストの応募期間が延長されたということで、私も「応募してみようかな?」とちょこっと頑張ってみることにしました。

私の場合、RaspberryPiを買ってはみたものの、Raspbianをインストールして起動できたら、満足して終わりって感じでしたね。

やはり、Arduinoと比べたら外部端子で入出力って敷居が高いってかんじですね。
なんでだろう。
○なまじOSがあり、OS経由で外部端子にアクセスっていうのが意外とイメージわきにくい(本来だったらメリットなはずなんだが)
○Arduinoと違って、開発しているところが一本化していない
○インターネット上の情報が散らばっていて、探すのが精一杯
って感じでしょうか。

当然ながら、最初はRaspbianのインストールからはじめました。
以前よりもバージョンアップしていました。現在(2014/11/03)の最新版で2014/09/09でした。

それからRaspberryPiの外部端子(GPIO)にアクセスするための環境を整えます。
アクセスする方法は複数あるみたいですが、私が選んだのはAdafruitのPythonを使う方法です。
私はとっても英語が苦手なのですが、辞書を片手にLESSON1から順番に設定していったらとりあえず開発環境は設定出来ました。

しかしやはりマニア向けなのでしょうか、途中から急に難しくなります。なんで設定まで手取り足取り事細かく書かれているのに、実際にプログラミングする段になってから、突き放すような行為に出てしまうのか不思議です。もう少しゆっくりと階段を登るようにlessonしてくれたらうれしいと思います。

なにがともあれGPIOを使用したという実績がほしいために、定番のLチカを紹介しているホームページを探しました。
http://www.hiramine.com/physicalcomputing/raspberrypi/rpigpio_blink.html
です。

これでGPIOを使用したという実績だけはできました。
しかし、コンテストに出すようなアイデアは浮かばない。ましてやOSが載っているマイコンボードのメリットが生かせるようなものというと、とにかく難しいですね。