2013年5月30日木曜日

次回の授業(6/10)Arduino演習1

次回6/10は、Arduino電子工作の授業を行います。
Arduinoボードというマイコンを用いて、電子工作の基礎を学びます。

必要なもの:
・各自のノートパソコン
・Arduinoボード(以下に説明あり)
・USBケーブル(Arduinoとパソコン接続用)
・Arduinoソフトのインストール(ダウンロードページ
 各OSに応じてソフトをダウンロードしてください(Arduino1.0.5のほう)。

Arduinoボードの入手方法:
Arduinoボードには用途などに応じて幾つかの種類がありますが、
「Arduino Uno」もしくは「Aruino Uno Rev3(最新版)」の入手をおすすめします。

通販なら、Amazonやスイッチサイエンスにて購入できます。価格は2700円前後です。

【永久保証付き】Arduino Uno
スイッチサイエンス
売り上げランキング: 3,866


Arduino Uno Rev3
Arduino Uno Rev3
posted with amazlet at 13.05.30
GHEO SA
売り上げランキング: 2,715

また、秋葉原の千石電商などでも直接購入できます(通販も可)。



より大きな地図で 秋葉原工作マップ を表示

2013年5月28日火曜日

Processingの基礎

Processingソフトを起動すると、ウィンドウ上部に6つのボタンがあります。
左から順番にいくと:
・Run:書き込まれたプログラムを実行します。
・Stop:実行したプログラム(別ウィンドウ)を終了します
・New:新しいプログラムを書き込むためのウィンドウを開きます。
・Open:すでに保存されているプログラムを指定して開きます。
・Save:書き込んだプログラムを保存します。
・Export Application:書き込んだプログラムをアプリケーションとして書き出します。


書き込んだプログラムの保存先は、以下の方法で確認(または変更)できます。
Macなら、メニューバーの「Processing>環境設定...」をクリックで設定の画面が現れます。Windowsなら「File>Prerferences」 。
以下が、設定の画面です。
上部にあるSketchbook location:の欄に保存先のアドレスが書かれています。変更したい場合は、この欄を書き換えてください。保存されたProcessingファイルの拡張子は「.pde」になります。次回からは、「Open」ボタンなどをつかって、そのファイルを開いて下さい。また、「File>Recent」からも最近つかったプログラムであれば、開くことができます。あるいは、「File>Sketchbook」から選んで開くこともできます。

Processingのインストール

この授業では、プログラミングを学習するために、Processingというソフト(開発環境)をつかいます。以下にProcessingのダウンロード+インストール方法を説明します。

・まず、Processingのサイトにアクセスします。http://www.processing.org/
・最初のページの「Download」もしくは「>> Download Processing」をクリック。
・ダウンロードページから、WindowsやMacなどの使用しているOSにあわせて、Processingをダウンロード。最新版は、現在Processing 2.0 beta9になっています。
ダウンロード先は、WindowsならProgram Files、Macならアプリケーションフォルダがいいでしょう。インストール後、Program FilesやアプリケーションフォルダにProcessingが入っているか確認してください。
・インストールされたProcessingソフトを起動すると、以下のようなウィンドウが開きます(Macの場合)。

・白い空白の部分にプログラムを書いていきます。ためしに既にインストールされているサンプルプログラムを動かしてみます。
メニューバーの「File>Examples...」をクリックするとサンプルのウィンドウが出て来ます。
・ためしに、サンプル内の「Basics>Arrays>Array」をクリックしてみます。そうすると、もうすでにプログラムが書き込まれたウィンドウがでてきます。
・ウィンドウ上部のRunボタン(再生マークのようなアイコン)をクリックすると、このプログラムが実行(Run)されます。実行されると、以下のような画像(実行結果)が別ウィンドウにでてきます。実行結果が表示されれば、Processingソフトを問題なくインストールできたことになります。
 ・「Run」ボタンの右側にある「Stop」ボタンを押せば(または実行結果のウィンドウを閉じるボタンをクリック)、実行結果のウィンドウは閉じて、このプログラムは終了します。

*尚、サンプルウィンドウ内のサンプルで正常に動かないものもあります。原因や改善については、Processingサイト内のForumで解決に向けてディスカッションされています。


2013年5月23日木曜日

次回の授業(05/27)Processing演習2 

次回5/27は、ひきつづきProcessing(プログラミング)の演習を行います。

必要なもの:
・各自のノートパソコン(ない場合は学校のものを使用)

*また個人的に興味のあるデバイスなど(前回のKinectのように)あれば、個人的にやりとり致します。

2013年5月12日日曜日

電子工作ゼミ2013開講

電子工作ゼミ2013(改め:建築工作ゼミ2012)開講

開講日:全12回 隔週月曜日 19:00-20:30

05/13 Processing1
05/27 Processing2
06/10 Arduino1
06/24 Arduino2
07/08 Processing+Arduino1
07/22 Processing+Arduino2
*前期はプログラミングと電子工作の基礎演習。

*後期は応用的な実験/演習を予定しています。
09/09 
09/30
10/21
11/11
11/25
12/09

*毎回各自のノートパソコンを持参してください。
*また、各自の興味あるデバイスなどがあれば、随時個人的に対応します。


2012年11月15日木曜日

次回11/20 Arduino+Processing

次回11/20は最後の授業となります。
ひきつづきArduinoとProcessingを連携させた応用実験を行います。

各自利用したいセンサ、あるいは出力デバイスなど持参し、ひとつの入出力デバイスの仕組みを各自の設定において構築したいと思いますので、次回までに各自の入出力デバイスのサンプルを考えて来て下さい。
授業内では、さらに他の人との入出力デバイスとの連携やワイヤレス化など、発展させたいと思います。

必要なもの:
・各自の入出力デバイスの案
・各自の入出力デバイスに必要なセンサや出力装置
・Arduino(マイコンボード、ブレッドボード、その他部品など)
・Processing (Webカメラなど含む)

2012年11月1日木曜日

次回11/06 Webカメラ+Arduino

次回11/06は、前回に引き続きWebカメラの応用実験(Webカメラを使ってArduinoを操作する)を行いたいと思います。

必要なもの:
・各自のノートパソコン
・Processingのインストール
・Webカメラ(パソコン内蔵カメラでも可)
・Arduinoボード
・USBケーブル
・ブレッドボード
・ジャンパワイヤ(オス-オス)



以下、授業内で使用したサンプル
import processing.video.*;
import processing.serial.*;

Serial myPort;
Capture video;

int w=240;//320;
int h=180;//240;

int tolerance=20;

PFont font;
color targetColor=color(255,0,0);

boolean videoImage=true;
float x;
float y;
float fx;
float fy;

int sumX,sumY;
int pixelNum;
boolean detection=false;

void setup(){
  size(w, h);
  smooth();

  video = new Capture(this, w, h);
  font=createFont("Monaco",10);
  textFont(font);
  noStroke();
  myPort=new Serial(this,"/dev/tty.usbserial-A9005baQ",9600);
}

void draw() {
  if(video.available()){
    video.read();
    if(videoImage){
      image(video, 0, 0);
    }else{
      background(0);
    }

    detection=false;
    
    for(int i=0;i<w*h;i++){

      float difRed=abs(red(targetColor)-red(video.pixels[i]));
      float difGreen=abs(green(targetColor)-green(video.pixels[i]));
      float difBlue=abs(blue(targetColor)-blue(video.pixels[i]));
      if(difRed<tolerance && difGreen<tolerance && difBlue<tolerance){
        sumX+=(i%w);
        sumY+=(i/w);
        pixelNum++;
        detection=true;
      }
    }
    
    if(detection){
      x=sumX/pixelNum;
      y=sumY/pixelNum;
      sumX=0;
      sumY=0;
      pixelNum=0;
    }
  }
  
  fx+=(x-fx)*0.2;
  fy+=(y-fy)*0.2;
  myPort.write(int(fx));
  fill(255,0,0);
  ellipse(fx,fy,20,20);
  fill(targetColor);
  rect(0,0,10,10);
  text(tolerance,20,10);
  String s;
  if(detection){
    s="detect";
  }else{
    s="none";
  }
  text(s,40,10);
}
void mousePressed(){
  targetColor=video.pixels[mouseX+mouseY*w];
  //println(int(red(targetColor))+","+int(green(targetColor))+","+int(blue(targetColor)));
}
void keyPressed(){
  if(key=='c'){
    video.settings();
  }
  if(key=='v'){
    if(videoImage){
      videoImage=false;
    }else{
      videoImage=true;
    }
  }
  if(key==CODED){
    if(keyCode==LEFT){
      tolerance-=1;
    }
    if(keyCode==RIGHT){
      tolerance+=1;
    }
  }
}