Processingを使ってみた話

 この間よくわからないまま使っていたProcessingですが、Ene-1GPのモニターに使えそうだということで使えるようになろうと思います。今回はその時使ったプログラムの解読です。

 まず、Arduinoで毎回センサーのデータをとるのはめんどくさいので、数秒おきに1~4をシリアル出力しておきます。

 前回使ったプログラムは以下の通りです。
 コメントに解説を追加しておきます。
import processing.serial.*; //宣言?

//下三行が定義
Serial port;
int val;
int x, y, dx, dy, c;

void setup() {
  size(800, 600); //画面サイズ
  String arduinoPort = Serial.list()[1]; //シリアルポートの番号
  port = new Serial(this, arduinoPort, 19200); //ポートの設定
  background(0); //背景を黒に設定
}

void draw() {
  val = 0;
  if ( port.available() > 0) {
    val = port.read(); //ポートの値を読む
    print(char(val)); //Processingのコンソールに読んだ文字を表示
    if (char(val) == '2') {
      x = -800;  //表示する図形の左上の点の初期位置のx座標
      y = 0; //同y座標
      dx = 50;  //xの変化量
      dy = 0; //yの変化量
      c = 16; //出てくるまでのコマ数
      fill(255, 255, 0); //表示する図形の色
    } else if (char(val) == '1') { //以下繰り返し
      x = 800; 
      y = 0;
      dx = -50; 
      dy = 0;
      c = 16;
      fill(0, 0, 255);
    } else if (char(val) == '4') {
      x = 0; 
      y = -600;
      dx = 0; 
      dy = 40;
      c = 15;
      fill(255, 0, 0);
    } else if (char(val) == '3') {
      x = 0; 
      y = 600;
      dx = 0; 
      dy = -40;
      c = 15;
      fill(0, 255, 0);
    }
  }
  if (c-- > 0) { //更新処理
    x = x + dx;  //x座標の変換
    y = y + dy; //y座標の変換
    rect(x, y, 800, 600); //(x,y)の座標から800*600の長方形を表示
  }
}

 このようになります。Javaはわからないので間違っていたらごめんなさい。

 今回はここまでです。ちょっとProcessingに浮気していろいろ作ってみたいと思います。それではまた今度。

ギターを弾くと光るやつを作った話

 弟に「ギターを弾くと光るやつ」を作ってって言われたので作りました。

・回路図
gita-noyatu_回路図
 こんな感じで、ギターの入力(数mV)をオペアンプで増幅してコンパレーターの閾値よりも高いときだけLEDを光らせます。手元にRail to Rail(またの名をフルスイング)のオペアンプがなかったので、任意の閾値(0~5V)の中で2.5±1.5Vまでにしか増幅されず感度がピーキーになってしまいました。また、閾値を超す波の密度の差によってpwmと同じ現象が起き音の大きさによって明るさが変わるようになりました。

・動作
 このように動作します。

 今回はここまでです。そろそろきちんとVVVFを作りたいと思います()。それではまた今度。

定電流ダイオード(CRD)を使ってみた話

 以前から名前は知っていた定電流ダイオード(CRD)ですが、使ったことがなかったので試しに使ってみました。

 秋月にあるデータシートを見てみるといろいろなグラフが乗っていますが、今回はハードワークさせるつもりはないので静特性のグラフを見ます。

キャプチャ
 静特性のグラフはこのような感じになってます。これを見ると型番によって多少の違いはあれども、端子間電圧がほとんど0Vでも定格電流を流し百数十Vまでは定格電流を流し続けることがわかります。


 実際に直流安定化電源でLEDと直列につなぎ電気を流した時の様子がこちらです。
 LEDの最低動作電圧である3V弱~30V弱まで同じ明るさで光っていることがわかると思います。
 今回は18mAのものを使ったので、電源が3V以上あればどのような電圧でも同じ明るさで光らせることができます。これは導通チェック用のライトとして使いやすいものです。

 今回はここまでです。VVVFがなんかうまくいってないので最近は簡単なものが多く申し訳ないです。それではまた今度。

3V→5Vの昇圧回路の話

 一年ほど前に作っていて記事にしてなかったのでDC/DCコンバータの話でも。
 自分はほかにも555を使ったスタンガンや、Arduinoを使ったコイルガン付きのラジコンを作ったことがあるので機会があったらそちらの話も記事にしたいと思います。

 今回扱う昇圧回路ですが、HT7750Aというものを使う簡単なものです。


3V_5V_回路図
 このような回路で動作します。インダクタは100μH程のもので動作します。


 今回は昇圧回路を使いました。あまり電流は取り出せませんが手軽なので、いろいろなものに使えると思います。それではまた今度。

コーヒーメーカーを分解した話

 新しいコーヒーメーカーを買ったので古いものがいらなくなったので分解してみました。

ko-hi-2
 中身はこんな感じでした。スイッチが入ったら電熱線があったまり、温度が上がるとさーみすてにより出力が下がる感じだと思いますたぶん。また、140℃の温度ヒューズがついているので安全なのでしょう。

 水の入力口に便があったので内部で発生した水蒸気の圧力で水を上げる感じだと思います。


 今回はここまでです。VVVFインバータの開発がうまくいってないのですが、頑張ろうと思います。それではまた今度。

デジタルテルミンを作った話

 今まで一回も測距センサーを使ったことないので使ってみようということで、テルミンを作ってみました。

 今回使ってみたセンサーは、シャープ製のGP2Y0A21YKを使いました。
DSC01148
これです。有名な話ですが、このセンサーは左からVo,GND,Vccとなっており、それぞれの色のイメージとは違うので気を付けなければいけません。

 プログラムは下のように適当に書きます。

#define BEATTIME 20 //音を出している時間(msec)
#define SPEAKER 12 //スピーカーの出力ピン番号
int val1=0;
  
void setup() {
Serial.begin(9600);
}

void loop() {
  val1=analogRead(0);
  Serial.println(val1);
  tone(SPEAKER,val1,BEATTIME) ; // ド
  delay(BEATTIME) ;
}

 適当にデータを拾って適当に出力します。センサーの出力がArduinoのアナログインプットで100~600ぐらいなのでそのままそれを周波数として発信させてもいいと思います。

 今回はここまでです。それではまた今度。

ジェスチャーセンサAPDS-9960を使った話

 2年ちょっと前に買って、使えていなかったジェスチャーセンサーを使ってみました。

 ※この記事はこちらの記事を参考にしています。また、今回は秋月で売っているこちらのモジュールを使うことを前提にしています。


・配線
 このモジュールの動作電圧は3.0~3.6Vなので、絶対にArduinoの5V端子などから電源を供給せずに、3.3Vの電源を供給しましょう。

以下の端子同士をつなぎます。
LED -3.3V
VDD -3.3V
GND -GND
INT   -D2pin
SDA -A4pin
SCL -A5pin


・プログラム
"スケッチ"→"ライブラリをインクルード"→"ライブラリを管理"と進み、APDSと検索し下のライブラリをインクルードします。

#include <Wire.h>
#include <SparkFun_APDS9960.h>

// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
uint8_t proximity_data = 0;

void setup() {

  // Set interrupt pin as input
  pinMode(2, INPUT_PULLUP);

  // Initialize Serial port
  Serial.begin(19200);

  // Initialize interrupt service routine
  attachInterrupt(0, interruptRoutine, FALLING);

  // Initialize APDS-9960 (configure I2C and initial values)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }

  // Start running the APDS-9960 gesture sensor engine
  if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
  }
}

void loop() {
  if ( isr_flag == 1 ) {
    detachInterrupt(digitalPinToInterrupt(2));
    handleGesture();
    isr_flag = 0;
    attachInterrupt(digitalPinToInterrupt(2), interruptRoutine, FALLING);
  }
}

void interruptRoutine() {
  isr_flag = 1;
}

void handleGesture() {
  if ( apds.isGestureAvailable() ) {
    Serial.print(apds.readGesture());
  }
}

・拡張
 参考元では、これをパソコンの画面上で表示するプログラムも公開されています。
 これはProcessingを使うもので、これはこのサイトからダウンロードし、zipファイルを解凍すると使えます。一応プログラムは以下の通りで動きます。
import processing.serial.*;

Serial port;
int val;
int x, y, dx, dy, c;

void setup() {
  size(800, 600);
  String arduinoPort = Serial.list()[1];
  port = new Serial(this, arduinoPort, 19200);
  background(0);
}

void draw() {
  val = 0;
  if ( port.available() > 0) {
    val = port.read();
    print(char(val));
    if (char(val) == '2') {
      x = -800; 
      y = 0;
      dx = 50; 
      dy = 0;
      c = 16;
      fill(255, 255, 0);
    } else if (char(val) == '1') {
      x = 800; 
      y = 0;
      dx = -50; 
      dy = 0;
      c = 16;
      fill(0, 0, 255);
    } else if (char(val) == '4') {
      x = 0; 
      y = -600;
      dx = 0; 
      dy = 40;
      c = 15;
      fill(255, 0, 0);
    } else if (char(val) == '3') {
      x = 0; 
      y = 600;
      dx = 0; 
      dy = -40;
      c = 15;
      fill(0, 255, 0);
    }
  }
  if (c-- > 0) {
    x = x + dx; 
    y = y + dy;
    rect(x, y, 800, 600);
  }
}


今回はこれまでです。それではまた今度。

シンセサイザーを作った話

  作っていたシンセサイザーもどきが完成したのでその報告を。

 今まで11回にわたって使う技術の紹介をしてきたのですが、それをひとまとめにしたものができました。
electronium_回路図

 左上から、発信回路、積分回路、分周回路、パスコン、ディレイ、左下に行って、オーバードライブ、動作確認LED、反転回路、加算回路、となっています。
 これを配線図にすると
electronium_プリント基板
 こうなりました。基板サイズはケースのサイズに合わせてあるので右側に余裕ができました。そのため拡張性が高くなっています。
 はんだ付け始めてからミスに気付いた部分が多々あるので、セラコンが一つ裏についていたりしますが気にしてはいけません。

 はんだ付けをすべて終わらせてケースに取り付けるとこのような感じになります。
前面

DSC01146
後面

DSC01147

 前面についているボリューム類はエフェクターのものです。また、背面から左側面に半田メッキ船がついており、これを触りながらセンサーに触れることで音を鳴らすことができます。

 基板にはピンソケットがついており、これをジャンパワイヤでつなぐことで音を変化させます。


 私はほとんど楽器を弾くことができないので演奏の動画は上げないでおきます。気が向いたら何か演奏してみようと思います。 
 
 今回はここまで、次はずっと作ると言っていて結局作っていないVVVFをそろそろちゃんと作りたいと思います。それではまた今度。

電子楽器を作りたい話⑪ 発信部

 今までだいぶ迷走していた発信回路ですが決まったのでの記事を書きました。

 まず、分周器を使っているので出力は矩形波なのが望ましいです。また、自分の中のこだわりとしてセンサーは押すのではなく触れるだけで反応してくれるものが好ましいです。
 以上のことから以下のようなシステムを採用することにしました。

humanR_回路図
 もはや回路図を乗せる必要があるのかわかりませんが、それぞれの抵抗のマイコン側に触れることでその端子の入力電圧を下げ反応させています。また、マイコンは前回作ったモノを使用することにします。
 また、プログラムはA0~A4で音階や変化記号を押し、D2~D9でド~ドまでの一オクターブを弾けるようにします。


 このシステムは分周器の記事を書く前にはできていたのですが、記事を書くのがなぜか遅くなってしまいました。例によって、新せさいあー本体はもうほぼ完成してるのですぐに記事を書きたいと思います。それではまた今度。

最小構成のArduinoの話

 以前にもArduinoの記事を書いたのですがわかりにくかったので、もう一回作る機会があったのでついでに記事にしました。

 ATMEGA 328PにArduinoを書き込む必要があるのですが、これは公式フォーラムにやり方が乗っている他、秋月では書き込んであるものがほとんど同じ値段で売っているため省略します。


・回路図

Arduino_回路図


 1ピンをスイッチでGNDに短絡させるとリセットされます。
 またこのままではプログラムの書き込みができないので、Arduinoの基板につけるか書き込み用の回路をつける必要があります。

 今回はここまでです。回路図を一から作り変えているので、これを見るだけでArduinoをわざわざ買わなくても使えるようになりました。それではまた今度。
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

読者登録
LINE読者登録QRコード