Altera CycloneIIIリファレンスボードDE0が届いた.

火曜日ぐらいに届いてた.土日を抜けば注文から3日ぐらいか.


パッケージは意外と普通.一般家電みたいw


外箱をスライドすると中箱が出てきた.


まず最初に出てきたのは,シリーズのカタログとCD-ROM.CDにはWEBからダウンロードできるものと同じものが入ってる.開発環境のQuartusとかリファレンスとかサンプルソースとか回路図とか.


その下には,ボード本体と付属品が出てくる.


ボード本体.アクリルパネルがあるとかっこいいよね.


付属品は,ACアダプタと,USBケーブルと,滑り止めの足につけるキャップと,電源を外部から取り込むための線材.



というわけで,これが内容品すべて.
これが10000円程度なのは,やっぱり驚異的.
FPGAに入門してみよう!と思う人にはかなりお勧めだと思う.
これだけで一通り動かすことができるしね.

【追記した】mixiボイスとtwitterに同時ポストするスクリプトを書いてみた.GUIにも対応してみた.

【追記】TkでGUIにも対応しておいた.



twitterでちょっと話題になったので,書いておく.


使い方.(Rubyがインストールされている状態で!)


(下記ソース | カキソース(ってオイスターソースだっけ?))を保存して,中の

mixi_email = "hoge@hoge.jp"
mixi_password = "fugafuga"

twitter_id = "hoge"
twitter_password = "fugafuga"

について書き換えて,
コマンドラインで,

gem install twitter
gem install mechanize

をかけて,

ruby mixitter.rb "うんこうんこー!"

と打ちこむとポストする.

ruby mixitter.rb

と打ちこむとGUIを起動する.


イカソース!
mixitter.rb

require "rubygems"
require "mechanize"
require "tk"
require "twitter"
require "kconv"

class Mixi
  MIXI_BASE = "http://mixi.jp/"
  MIXI_HOME = "#{MIXI_BASE}home.pl"

  attr_accessor :email, :password

  def initialize(email, password)
    @email = email
    @password = password
    @agent = WWW::Mechanize.new
  end

  def login
    top_page = @agent.get(MIXI_BASE)
    form_login = top_page.form_with(:name => 'login_form')
    form_login.email = email
    form_login.password = password
    @agent.submit(form_login)
  end

  def post(text)
    home_page = @agent.get(MIXI_HOME)
    form_echoPost = home_page.forms.find{|f| f.form_node['id'] == 'EchoPost'}
    form_echoPost.body = text
    @agent.submit(form_echoPost)
  end
end
  

mixi_email = "hogehoge@hoge.jp"
mixi_password = "fugafuga"

twitter_id = "hogehoge"
twitter_password = "fugafuga"

def mixitterpost(email, mpass, tid, tpass, comment)
  puts "mixiとtwitterに同時ポストするツール"
  puts ""

  comment = Kconv.toutf8(comment)

  puts "mixi================================="
  magent = Mixi.new(email, mpass)
  puts "認証中."
  magent.login
  puts "コメントをポスト中"
  magent.post(comment)

  puts ""

  puts "twitter=============================="
  puts "認証中."
  tauth = Twitter::HTTPAuth.new(tid, tpass)
  tagent = Twitter::Base.new(tauth)
  puts "コメントをポスト中"
  tagent.update(comment)
end

if(ARGV[0] != nil)
  mixitterpost(mixi_email, mixi_password, twitter_id, twitter_password, ARGV[0])
else
  @root = TkRoot.new(:title => "Mixitter")
  @text = TkEntry.new.pack
  @button = TkButton.new(nil, :text => "POST")
  @button.command = proc{
                           mixitterpost(mixi_email, mixi_password, twitter_id, twitter_password, @text.value)
                           @text.value = ""
                         }
  @button.pack
  Tk.mainloop
end


kconvを使っているのは,Windows環境を想定しているから.
Mixiクラスのコンストラクタでloginしていないのは,無駄に重くなることを恐れたため.


以上!

すっごい安いAltera CycloneIIIのリファレンスボードを注文した.

Terasic社のCycloneIIIリファレンスボード DE0がソリトンウェーブで安く手に入るっぽい感じだったので,注文したみた.

http://www.terasic.com.tw/attachment/archive/364/image/001_500.jpg


[名称]DE0 開発学習ボード (アカデミック版)
[記号]DE0-A
[会員価格]\10,290(税込)
[発売日]2009/08/19
[分類]FPGA開発:Terasic
[単価]10,290円(税込)


■DE0 開発学習ボード (アカデミック版) : 株式会社ソリトンウェーブ


Terasic - SoC Platform - Stratix - Altera DE0 Board


注文してから気がついたけれど,どうやらつい最近リリースされたものの模様.

New TerASIC DE0 FPGA board - MiniMIGtg68?


CEATEC2009でも展示されていたようで,安価な環境としてかなり期待される存在.

http://www.ceatec.com/2009/ja/visitor/detail.html?exh_id=E090425


なんつったって,搭載CycloneIIIのロジックエレメントは,ディジタルデザインテクノロジ付録のLattice基板の3倍!
チップLED,7セグメントLED,スライドスイッチ,プッシュスイッチ,PS/2コネクタ,アナログVGAコネクタ,SDカードスロット,フラッシュメモリSDRAMまでしっかり搭載されている,やばい!
ついでに本来FPGA開発に必要とされる接続ケーブルも必要とせず,USBだけで接続できちゃう!
開発環境からNiosIIまで無償で提供されてて,なんでもできる気がしてくるよ!


どうやったらこんなものが10000円程度で提供できるんだ,不思議!

bamboo touchで"くぱぁ"してみた.

bamboo touchペン付きを買ったので,どんな感じでピンチインとかしているのか気になって,調べてみた.

Wacom ペンタブレット Sサイズ イラスト&ビジネスに Bamboo CTH-460/K0

Wacom ペンタブレット Sサイズ イラスト&ビジネスに Bamboo CTH-460/K0


とりあえずspy++で見てみたら,どうやら仮想キーボードでControlKeyを押して,そいで仮想マウスのスクロールをしている模様.

<00218> 00030B2A P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:0 fUp:0<00219> 00030B2A P WM_MOUSEWHEEL fwKeys:MK_CONTROL zDelta:120 xPos:531 yPos:494<00220> 00030B2A P WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1


なので,適当にコードを書いてみた.フォーム上で"くぱぁ"した時.

Private Sub Form1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseWheel
    If Control.ModifierKeys And Keys.ControlKey = Keys.ControlKey Then
        If e.Delta > 0 Then
            '広げたときの処理
        Else
            '閉じたときの処理
        End If
    End If
End Sub

まぁマウスホイールイベントが発生した時に,コントロールキーが押されているか調べて,ホイールの回転角が正なら広げている動作で,負なら閉じている動作というわけ.


というわけで,適当に画像を用意してくぱぁクラスを書いて動画にしてみた.


だれか画像きぼんぬ!

TrevaなるカメラをArduinoにつなげてみる.


つなげてみた.
trevaはクロックを与えるだけで,データを出力してくれる素敵なカメラ.

http://www.paken.org/aaf/treva/


上のページの解析結果を参考にスケッチを描いてみる.

#include <stdio.h>

#define CLK 8
#define DAT 9

#define BAUDRATE 115200

void setup()
{
  pinMode(CLK, OUTPUT);
  pinMode(DAT, INPUT);
  
  Serial.begin(BAUDRATE);
}

void loop()
{
  capture();
}

void capture()
{
  long magic = 0,i,k;
  int v = 0, u = 0, y = 0;
  int r = 0, g = 0, b = 0;
  unsigned char d;
  
  while((magic & 0xffffff) != 0xaa55ff)
  {
    magic <<= 1;
    if(readbit())
    {
      magic |= 0x01;
    }
  }
  for(i=0; i<29*8; i++)
  {
    readbit();
  }
  
  Serial.println("get!!");
  for( k=0; k < 96*72*2; k++){
    d = 0;
    for (i=0; i<8; i++){
  	d <<= 1;
  	if(readbit())
  	  d |= 0x1;
    }
    if((k & 0b11) == 0b00){
      v = d - 128;
    }else if((k & 0b11) == 0b10){
      u = d - 128;
    }else if((k & 0b11) == 0b01 || (k & 0b11) == 0b11){
      y = d;
      r = u + y;
      g = 0.98 * y - 0.53 * u - 0.19 * v;
      b = v + y;
      
      if(r > 255) r = 255;
      if(r < 0) r = 0;
      if(g > 255) g = 255;
      if(g < 0) g = 0;
      if(b > 255) b = 255;
      if(b < 0) b = 0;
      
      Serial.print(r, DEC);
      Serial.print(" ");
      Serial.print(g, DEC);
      Serial.print(" ");
      Serial.print(b, DEC);
      Serial.print(" ");
    }
  }
  Serial.println("");
}

int readbit()
{
  int a;
  digitalWrite(CLK, HIGH);
  //delayClk(1);
  a = digitalRead(DAT);
  digitalWrite(CLK, LOW);
  //delayClk(1);
  if(a){
    return 1;
  }else{
    return 0;
  }
}

void delayClk(int clk)
{
  int i;
  for(i=0;i<clk;i++);
}


これをアップロードすると,シリアルポートからPPM画像のデータ部を出力する.
ので,適当に保存してimageMagickで変換してみた画像がこれ.


96*72画素しかないので,こんなもんだけど,ロボットカーコンテストで赤いパイロンを見分けるぐらいには使えるだろうと思い込む.
オリジナルの出力はYUVで,96*72*2バイト出力されるけど,Arduino本体のメモリには格納できない気がするので,どうやって画像処理するか悩む.
明るい,暗い,赤いっぽいものが目の前にある,とかそんなもんしか認識できないよなー,なんて妄想.

WiiモーションプラスをArduinoにつなげてみる.


手元に以前買ったモーションプラスのユニットがあったので,適当に検索していたらフォーラムにスケッチを見つけたので試してみるテスト.

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1245723011

Wiiリモコンと拡張デバイスはI2Cで通信しているので,サンプルスケッチはWireライブラリで繋げているだけのようだ.


ちなみにWiiリモコンのピンアサインはこんな感じ.

Wiimote Expansion Port - HwB


なので,3.3VとGroundはArduinoの刻印通りつなげるとして,SCLとSDAはリファレンス通り

ArduinoボードのSDA(データライン)はアナログ入力ピン4、SCL(クロックライン)はアナログ入力ピン5です。
Arduino 日本語リファレンス

の様につなげてあげましょう.
今回はポリウレタン線で基板上から引き出して,ジャンパ線で接続しています.


あとは一番上のリンクのフォーラムのスケッチをアップロードしてかんりょ.



エクセルでプロットしてみたら,それっぽいので満足w


たかだか1500円のユニットに3軸ジャイロが入っていて,どこの家電量販店でも売っているなんて!
これはいい時代ですね(^q^)

ArduinoでGPSデータ受信できたおww


つい下のエントリで意地あけて,放置していたらいつのまにやら測位できてた.


部屋から出て10分ぐらいPC片手にぶらぶらしてても,測位できなくて,ずーっと部屋の窓際に放置していたら,おそらく2時間ぐらいたって4個だけ衛星が見つかった模様.
出力された数値を緯度経度それぞれ600000で割ってやれば,一般的な緯度経度の値になるので,GoogleMAPで調べてあげたら,しっかりと自宅の地図が出たので安心.


GPSって田舎とか関係ないよね!むしろ田舎の方が測位できるはずだよね!むしろそうあるべきだよね!!!