Arduino Processing 連携 第2弾 LEDをロッカースイッチでオンオフする

Arduino Processing 連携

Arduino工作講座とProcessing入門講座を通して、学習してきたことを連携させる。第2弾はLEDをロッカースイッチでオンオフする。パソコンの画面に描いたロッカースイッチをマウスで操作して、LEDのオンオフを切り替えるようにする。
この講座は少し説明を省こうと思います。中級編だと思ってください。

Arduino Processing 連携 第2弾 LEDをロッカースイッチでオンオフする

Arduino Uno と パソコンをUSEケーブルで接続して、パソコン側からProcessingを利用して操作をする。Processingの描画機能でロッカースイッチを作成。

これは、Processing入門講座で作成したスイッチです。3D表示されたロッカースイッチを操作します。その動作に合わせて、内蔵LEDが点灯したり、消灯したりします。

内蔵LEDをロッカースイッチでオンオフする

Processingで用意したロッカースイッチを操作して、オンの時だけ、内蔵LEDを点灯する。オフの時は、内蔵LEDを消灯する。

シリアルポートに接続している機器が一つしかないことを前提にしているので、違う場合には、ポート番号を書き換えるようにしてください。

今回はArduino Uno とUSBケーブルをつなげるだけです。

必要となる部品

  • Arduino Uno
  • USBケーブル

回路と回路図

画像に alt 属性が指定されていません。ファイル名: arduino_processing_01_01.jpg
画像に alt 属性が指定されていません。ファイル名: arduino_processing_01_02.jpg

Arduino プログラム

char val;                          // Data received from the serial port 
int ledPin = 13;                    // Set the pin to digital I/O 13

void setup() { 
  pinMode(ledPin, OUTPUT);         // Set pin as OUTPUT 
  Serial.begin(9600);              // Start serial communication at 9600 bps 
} 
 
void loop() { 
  if (Serial.available()) {        // If data is available to read, 
    val = Serial.read();           // read it and store it in val 
  } 
  if (val == 'H') {                // If H was received
    digitalWrite(ledPin, HIGH);    // turn the LED on 
  } else { 
    digitalWrite(ledPin, LOW);     // Otherwise turn it OFF
  } 
  delay(100);                      // Wait 100 milliseconds for next reading 
} 

事前にArduino Uno にプログラムを書きこんでおき、シリアル信号を受け付ける準備をしておく。

Processing プログラム

Sw Sw1 = new Sw(80,50,120,200,0);

import processing.serial.*; 
Serial myPort;                       // Create object from Serial class

int stat;

void setup() {
  size(300, 300);
  Sw1.display(Sw1.st);
  frameRate(10); 
  printArray(Serial.list());
  myPort = new Serial(this, Serial.list()[0], 9600);
  
}

void draw(){
}

void mousePressed(){

    if (Sw1.areachk() == 1)

        if (Sw1.st == 0){
          Sw1.st = 1;
          myPort.write('H'); 
        } else {
          Sw1.st = 0;
          myPort.write('L'); 
        };
     

     Sw1.display(Sw1.st);
 
}

class Sw {
  int x, y, w, h, st;
  Sw (int xpos, int ypos, int wsw, int hsw, int sta) {
    x = xpos;
    y = ypos;
    w = wsw;
    h = hsw;
    st = sta;
  }
  
  void display(int stat){

    noFill();
    strokeWeight(2);
        
    int col_top;
    int col_right;
    int col_bottom;
    int col_left;
   
    int col_intop;
    int col_inmidup;
    int col_inmidlo;
    int col_inbo;

    col_top = 230;
    col_right = 100;
    col_bottom = 80;
    col_left = 190;
      
    if(stat == 0){      
      col_intop = 200;
      col_inmidup = 100;
      col_inmidlo = 170;
      col_inbo = 160;   
    }
    else {
      col_intop = 160;
      col_inmidup = 170;
      col_inmidlo = 200;
      col_inbo = 100;
    }
    
    stroke(0, 0, 200);   // center
    fill(col_top);

    rect(x,y,w,h); 
  
    noStroke(); 
    fill(col_top);
    quad(x-10, y-10, x+w+10, y-10, x+w, y, x, y);   // top

    fill(col_right);
    quad(x+w, y, x+w+10, y-10, x+w+10, y+h+10, x+w, y+h); // right

    fill(col_bottom);
    quad(x+w, y+h, x+w+10, y+h+10, x-10, y+h+10, x, y+h); // bottom

    fill(col_left);
    quad(x-10, y-10, x, y, x, y+w, x-10, y+h+10);   // left


    fill(col_intop);
    rect(x+10,y+10,w-20,15);
    
    fill(col_inmidup);
    rect(x+10,y+25,w-20,(h-20)/2); 

    fill(col_inmidlo);
    rect(x+10,(y+h/2),w-20,(h-20)/2); 

    fill(col_inbo);
    rect(x+10,y+h-25,w-20,15);

    stroke(0); 

    ellipse((x+(w/2)),y+15 +(h/4),15,15);

    line(x+(w/2),y+(h/2)+10,x+(w/2),y+h -30);
    line(x+w-10,y+10,x+w-10,y+h-10);
    line(x+10,y+h-10,x+w-10,y+h-10);  

}
  
  int areachk(){
    if(mouseX > x+10 && mouseX < x+w-10 && mouseY > y+10 && mouseY < y+h-10){
      return 1;
     } else {
      return 0;
     }
  }
}

事前にパソコンのProcessingにプログラムを用意しておく。シリアルポートを調べに行き、ポート番号をチェック。調べたポートにマウス情報から、情報を発信。Processingから「H」を送ると、Arduinoの方では、LEDの対応ピンを「HIGH」に。「L」を送られてくると「LOW」にします。

Processing 実行画面

ロッカースイッチ オフ
ロッカースイッチ オン

ロッカースイッチを操作して、オンにすると内蔵LEDが点灯し、オフにすると内蔵LEDは消灯する。

外部LEDをロッカースイッチでオンオフする

外部LEDについては、第1弾と全く同じで対応できるので流用したいと思います。

必要となる部品

  • Arduino Uno
  • 赤色LED
  • 220Ωの抵抗
  • ブレッドボード
  • ジャンパー線 赤色と黒色

回路と回路図

画像に alt 属性が指定されていません。ファイル名: arduino_processing_01_05.jpg
画像に alt 属性が指定されていません。ファイル名: arduino_processing_01_06.jpg

内部LEDの場合

int ledPin = 13;                    // Set the pin to digital I/O 13

外部LEDの場合 I/Oピンの対応ピン番号を指定

int ledPin = 12;                    // Set the pin to digital I/O 12

なんてことはない、単純にIOピンを外部LEDに接続したピン番号に変更するだけです。抵抗はいつものあれです。LEDの保護ですね。ジャンパー線は色は何色でもLEDが光ります。USBケーブルを接続してください。

電子工作では、スイッチを利用しました。Processingを利用すると、パソコンで制御することができる事ができるようになります。もちろん、他の言語でもできると思います。

今回はこの辺で。次回をお楽しみに。

コメント

タイトルとURLをコピーしました