モーターを鳴らしてみた話

 前回の記事でも言ってましたが、なんか音の出るものを作りたかったのでその開発をしてみました。

 インターフェースを面白くしたかったのですが、技術力が足りないのでいつか使った"CapSense"を使いました。

 1オクターブは12音なので、これをCapSenceで読み取るには12個のデジタルピンが必要になります。これは一台のArduino UNOで扱うのは厳しいです。また、なるべく出力側のコードは軽くしたいので、Arduino MEGAも使い、Arduino2台体制で作ることになりました。そのほかにもいろいろこだわりがあり、大まかなシステムはこのようになりました。electronium
 今回初めて知ったのですが、Arduino MEGAはSCL,SDAはD20,D21ピンでUNOとは違うのでその点注意しなければなりません。

DSC01284
DSC01283
 LCDを使いたかったのはただの趣味です。
________________________________
|押してるキー 選択してるオクターブ |
|出力周波数                                            |
|_______________________________|
 こんな感じに表示させます。

DSC01281
 入力インターフェースはこんな感じです。
 前に書いた記事のセンサーを大量に並べただけです。


 プログラムはこのようになりました。難しいことは何もやってません。
・Master
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2); // I2C: 0x3F, 16x2 LCD

int ca, cb;
int freq;
void setup() {
  Wire.begin();
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  pinMode(13, OUTPUT);
}

void loop() {
  Wire.requestFrom(8, 2);

  while (Wire.available()) {
    ca = Wire.read();
    cb = Wire.read();
    Serial.print(ca);
    Serial.print(",");
    Serial.println(cb);
  }


  lcd.setCursor(0, 0);
  if (ca < 10) {
    lcd.print(" ");
  }
  lcd.print(ca);
  lcd.setCursor(3, 0);
  lcd.print(cb);

  lcd.setCursor(0, 1);
  freq = 440 * pow(2, (ca + 3 + (cb - 2) * 12) / 12.0);
  if (ca == 13) {
    lcd.print("No Sounds");
    delay(10);
    noTone(13);
  } else {
    if (freq < 1000) {
      lcd.print(" ");
    }
    lcd.print(freq);
    lcd.print("Hz   ");
    tone(13, freq);
  }
  delayMicroseconds(1000000 / freq);
}

・Slave
#include <Wire.h>
#include <CapSense.h>

#define thre 60

CapSense   cs_35_22 = CapSense(35, 22);
CapSense   cs_35_23 = CapSense(35, 23);
CapSense   cs_35_24 = CapSense(35, 24);
CapSense   cs_35_25 = CapSense(35, 25);
CapSense   cs_35_26 = CapSense(35, 26);
CapSense   cs_35_27 = CapSense(35, 27);
CapSense   cs_35_28 = CapSense(35, 28);
CapSense   cs_35_29 = CapSense(35, 29);
CapSense   cs_35_30 = CapSense(35, 30);
CapSense   cs_35_31 = CapSense(35, 31);
CapSense   cs_35_32 = CapSense(35, 32);
CapSense   cs_35_33 = CapSense(35, 33);
CapSense   cs_35_34 = CapSense(35, 34);

CapSense   cs_38_36 = CapSense(38, 36);
CapSense   cs_38_37 = CapSense(38, 37);

int freqa;
int freqb=3;
int numbb=2;

void setup() {
  Wire.begin(8);
  Wire.onRequest(requestEvent);
}

void loop() {
  int tonea[14];
  tonea[0] =  cs_35_22.capSense(30);
  tonea[1] =  cs_35_23.capSense(30);
  tonea[2] =  cs_35_24.capSense(30);
  tonea[3] =  cs_35_25.capSense(30);
  tonea[4] =  cs_35_26.capSense(30);
  tonea[5] =  cs_35_27.capSense(30);
  tonea[6] =  cs_35_28.capSense(30);
  tonea[7] =  cs_35_29.capSense(30);
  tonea[8] =  cs_35_30.capSense(30);
  tonea[9] =  cs_35_31.capSense(30);
  tonea[10] =  cs_35_32.capSense(30);
  tonea[11] =  cs_35_33.capSense(30);
  tonea[12] =  cs_35_34.capSense(30);
  tonea[13] = 0;
  
  int toneb[6];
  toneb[0] =  cs_38_36.capSense(30);
  toneb[1] =  cs_38_37.capSense(30);
  toneb[2] = 0;
  
  int numa = 13;
  int numb = 2;

  for (int i = 0; i < 13; i++) {
    if (tonea[i] > tonea[numa]) {
      numa = i;
    }
  }
  if (tonea[numa] < 60) {
    numa = 13;
  }
  freqa = numa;
  
  for (int i = 0; i < 2; i++) {
    if (toneb[i] > toneb[numb]) {
      numb = i;
    }
  }
  if (toneb[numb] < 60) {
    numb = 2;
  }
  
  if(numbb==2 && numb==0 &&freqb>0){
    freqb--;
  }
  
  if(numbb==2 && numb==1 &&freqb<4){
    freqb++;
  }
  
  numbb=numb;
  
  delay(10);
}

void requestEvent() {

  Wire.write(freqa);
  Wire.write(freqb);
}

 こんな感じです。適当なプログラムですが、自分では満足しているのでよしとします。

 ほんとはこれにフィルターとかエフェクターとか掛けようとも思っていたんですが、自分に音楽センスがないので止めました。その代わりなんか面白いことできないかと思ってたんですが、モーターを鳴らしたことがなかったので鳴らしてみました。
 まあただ出力信号を2sk2232で増幅してモーターに流すだけです。
 こんな感じでなります。

 今回はここまでです。なんか全然まとまってないんですがまあいいです。最近はデスク周りの整備をしたので次回はその記事でも書きます。それではまた今度。

マルチバイブレータとか音階とかの話

 また、音の出るなんかを作ろうとしているのでいろいろやっています。VVVFは、なぜか作った基板のハーフブリッジドライバの出力が同相になるので、またいろいろ余裕があるときにどうにかします。

 まあマルチバイブレータはLチカなのでできない人はいないと思うのですが、周波数の計算式とか諸々を忘れるので、そのメモになります。

 まず、マルチバイブレータの回路図はこのようになります。1
 周波数fはf=1/1.38RCです。まあ、時定数の問題なので、普通に求めようと思っても求まります。
 今回、自分は可変周波数にしたいので、Rを10kΩのBカーブの二連スライド抵抗にしました。また、Rcを100Ω,Cを0.2μFにしました。


 次に音階と周波数の話になります。
 音階のことはよくわからないのですが、440Hzのラの音が基準となっています。ピアノだと、このラの音を0として-48~+39までの音があるそうです。それぞれの周波数は"=440*2^(A1/12)"を計算すると出てきます。例えば、この数式をエクセルなどにコピペして計算してあげると、ピアノの音階の表ができます。


 そんなこんなで適当に計算すると、二連スライダで基準のラを挟む1オクターブを入れるためにはCを0.2μFにし、二連スライダの前に3848~3886Ωの抵抗を入れればよいことになります。やたらとシビアですけど、気にしてはいけません。

 今回はここまでです。徐々にトライアックの扱いに慣れたいと思っているので、次はトライアック関係のことでもしようかと思います。それではまた今度。

透過ディスプレイ?を作ってみた話

 なんか最近YouTubeでよく透過ディスプレイの動画が流れる気がするので、適当なモニターをあきばおーで買ってきて作ってみました。

 あきばおーで買ったモニターはこちら。決め手はHDMI入力と5V入力でした。これならラズパイと一緒に使える時が来るかもしれません。
DSC01274


 まあ本題の作成に入ります。
DSC01262
 まず裏返してネジを全部外します。


DSC01263
 フロントパネル?を外すと基板が出てきます。左の小さい基板は両面テープで止まっているだけなのではがします。右の基板はネジで止まっているので全部外します。


DSC01264
 外すとこうなります。とりあえず、スピーカーは今回使わないので外します。また、この後の作業のためにディスプレイのコードも外しておきます。

DSC01265
 バックライトのコードを切ってしまうのでそのために絶縁用のシートをはがします。


DSC01268
 液晶のパネルの分解に入ります。まず側面にある爪を全部で12か所外します。

DSC01275
 これで中から出てくる黒い板が出てきます。これが今回使い物本体になります。

DSC01276
 コネクタを戻して体裁を整えれば完成です。

DSC01271
 電源とHDMIを挿せば映ります。これは写真のために裏にiPhoneを置いてますが、ある程度の明るさの場所で肉眼で見る分には普通に見えます。

 今回は透過ディスプレイを作ってみました。このブログ恒例行事の全然VVVFを作るといいながら作っていない状態なので、今度こそ作ろうと思います。それではまた今度。

パソコンの買い物をした話

 なんか今年度末くらいに弟がパソコンが欲しいとか言ってるので、自分のパソコンを売ることになってしまいました。
 売るときのスペックは以下のような感じでいいそうです。
・core i7 8700
・GTX1050
・4GB*2 RAM
・256GB SSD
ぐらいでいいそうです。

 そのため、7月ぐらいからいろいろ買っていて、GTX1080Ti,1TB SSD,1050W電源,をすでに用意してありました。
 そして先日、秋葉原をうろついてるとパソコン工房で、ASUS PRIME H370-AとCeleron G3900の組み合わせが7500円くらいで売ってました。これはアマゾンで買うと15000円ぐらいの値段がするのでとてもお買い得だと思い衝動買いしてしまいました。

 これにより、パソコンが一台分できる部品がそろったのでパソコンを組んでみました。構成は
・ASUS PRIME H370-A ・ntel Celeron G4900 ・玄人志向 GT710 ・CWT 500W BRONZE+ 電源 ・SanMax DDR4 4GB*2
・I-O DATA 256GB SSD
になりました。

 ケースとかはないので実際の様子はひどいことになりました。

DSC01258
 ベンチマークを回してみた結果がこちら
EBF-ckMUcAAkwaq
 さすがにファンレスのGT710で3DMarkを回す気にはならなかったのでCINEBENCHで許してください。

 最近のCPUとグラボを搭載してるのでブラウジングは普通にできました。今この記事を書いているMBAがほとんど同じベンチマーク結果なので、マイクラなどの軽いゲームぐらいなら無理なくできそうです。


 余談ですが私は昨日(8/3)にMFTに行ってきました。DSC01255
DSC01256
 いろいろなメイカーさんの作品を見て自分もなんか作んなきゃと思いました。

 あと国際展示場にモバイルバッテリーのレンタルの自販機があって驚きました。存在は聞いたことがあったのですが、実物を見たことがなかったので面白かったです。DSC01257

 あと帰り道に秋葉原によったらラジオデパートの地下でCPUガチャを見つけてしまいました。
 この↑同行してた友達はi5を引いていたのに、自分はCeleron E3400で世の不条理を感じました。
DSC01260
 LGA1151世代のマザボしか持ってないのでマジでいらない子です。

 そんなこんなで、いろいろありましたがサブPCができました。サブPCができてもあまりやらせることはありませんが、テキトーに作業BGMでも流そうかと思います。それではまた今度。

fusion360で傘歯車を作る方法

 最近投稿してなかったし、ちょっと傘歯車を作る用事があったので記事にしました。
 傘歯車はアドインを利用すると簡単に作れるので、今回はそれを使います。


現在このアドインが使えないので↓の記事の方法で作ってください。

https://www.chisatofu.com/archives/30490075.html


・インストール手順
 アドインをクリックし、下のFusion 360 App Storeをクリックします。
キャプチャ
 このような画面がブラウザで開くので「Bevel Gear Design」を検索し、クリックします。
キャプチャ
 そうするので詳細画面が出てくるので、右側のFreeの中にあるDownloadをクリックします。ここで、人によってはAUTODESKのログイン画面が出てくるかもしれません。その時はログインしてください。

 ダウンロードできたものを実行し、fusionを再起動するとアドインがインストールできています。

 インストールができたらスケッチの一番下に「Create Bevel gear」が追加されます。それを選択するとパラメーターの設定が出てくるのでちょちょいっといじればできます。
キャプチャ

 今回はここまでです。いろいろあって記事の投稿ができませんがこれからもあんまりできないと思います。それではまた今度。

GTX1050をオーバークロックした話

 もうそろそろGTX1080Tiを買うので、壊れてもいいGTX1050をオーバークロックしてみました。

 使うものは
・MSI AfterBurner
・Unigine Heaven
です。それぞれ、オーバークロックするソフトとベンチマークするためのソフトです。

 参考までにうちのパソコンのスペックを紹介すると、
 core i7 8800
 MSI GTX 1050
 RAM 16GB * 2 + 4GB * 2
です。マザーボードの型番は完全に忘れたのですが、ASUSの普通のLGA1151,PCIE16*2とかのやつです。多分。電源は1050W GOLD認証とかのやつで、WDとSAMSUNGの250GBのやつです。

 やったことですが、難しいことは省くとこのような感じになりました。
キャプチャ
 いろいろ調べたのですが、結局GTX1050Tiの限界と同じぐらいの性能で落ち着きました。コアクロックが1885MHz、メモリクロックが3903MHzぐらいがピーク時の値になります。
 このぐらいでは3DMarkを走らせても特におかしいところがなく、温度もそこまで熱くなりませんでした。

 ここからは3DMarkの結果です。
 一応Time Spyもやってみたのですが、このグラボにはそもそもRAMが2GBしかなくあまり向いてないらしいので載せないでおきます。
2
4
 
 だいたい5%程性能が上がっています。これだけ性能が上がると、GTX1050Tiと同じぐらいの性能になったのではないでしょうか?(まあそもそもRTX2060とかGTX1660とか出ている今、GTX1050系を使う人がいるのかは謎ですが... 
 
 今回はここまでです。壊れてもいいと思っていたのでオーバークロックをしましたが、あまりパソコンにいいことではないのでお勧めはできません。それでも、ちょびっとだけ性能が上がったので満足です。それではまた今度。

三相用のトランスを作った話

 三相200V定格のモーターは内部抵抗が100Ω以上あり、電圧が低いと全然パワーが出ません。
 しかし、VVVFに入力する電圧には制約があり、特にene1GPではどう頑張っても60Vほどまでしか上げられません。直流電源の昇圧は難しいし電流取り出せないしロスが大きいので、三相交流にしてからトランスを逆接続し電圧を上げる方法を今回は試しました。

 今回考えたのはこのような回路です。キャプチャ
 秋月で一個600円ぐらいで売ってるトランスをY結線して三相用のトランスのように使ってしまおうという魂胆です。三相用のトランスもあるにはあるのですが、値段が高いのでこれが成功したらコストカットにつながります。

 LTspiceでシミュレーションしたところうまく行きそうな感じがしました。D8qrFHhVsAEzMSX
 VVVFじゃないしそもそも三相電源ですらないし出力先も三相モーターじゃないしいろいろ不安ですが作ってみることにします。

 今回やることは、前に作ったVVVFインバータと三相モーターの間にトランスを突っ込むだけです。

 作成したトランスがこちら。絵面がひどいですが動けば関係ありません。
i5wzvY-v


 で、実際これを動かした結果なのですが、12V/100Vの逆接続なので8倍ほどの電圧が出力されてないとおかしいのですが、4倍ほどの電圧しか出てませんでした。
 これには様々な要因が考えられますが、大きな要因の一つが三相用のトランスとは磁気回路が全然違うという点が考えられます。本物の三相トランスは鉄心1つにコイルを三相分巻いて作るのですが、今回使った者はそれぞれの相の鉄心間に磁気経路は存在しません。
 そのほかの原因としては、周波数が60Hzではないこと、波形が正弦波ではないことなどが挙げられます。


 今回はここまでです。今回の実験は成功とも失敗とも言えない微妙な結果になってしまいましたが、実際に使えるようになるといいです。それではまた今度。

LTspiceでトランスを使う方法

 最近はキーボードを作ったらうまく行かなくて没になったのもあり、投稿感覚が遅れていました。これからはもっと進捗を出せるように頑張ります。
 さて、今回はLTspiceでトランスを使ったシミュレーションをしたくて、いろいろ調べてできたので記事にしました。

 今回の最終目標はこんな感じです。
キャプチャ
 
 まず用意するものはAND回路のタブから出てくる"ind2"を二つと"voltage"です。両方とも"ind"と"bv"という似たようなものがありますが、こちらではできないので注意してください。
 あとは適当に抵抗とGNDを置きます。


①電源の設定
 V1は右クリックしてこの画面が出てきたらAdvancedを選択します。キャプチャ

 出てきた画面でこのように設定します。キャプチャ


②インダクタの設定
 先ほど置いたind2の設定を行います。右クリックして出てきた画面でこのように設定してください。この時にSeries Resistanceを0にしてしまう(設定しない)と無限に電流が流れてしまいエラーを図れるので1uほど入れておいてください。
キャプチャ

 そして、右上の.opというところを押し、このように入力してください。これは「結合係数の番号 コイルの番号 コイルの番号 結合係数」という風に決めています。キャプチャ


 あとは適当に配線するとできます。
 実際にシミュレーションしてみるときちんとトランスとして機能してくれます。キャプチャ


 今回はここまでです。次回はこれを使った面白いことをしたいと思います。それではまた今度。

ミニかわを作った話

 今回は、昔入っていたサークルの学園祭での催しに呼ばれたので「ミニかわ」を作りました。

 まず、適当にCADデータを作ります。
キャプチャ

 次に回路図を作ります。
minikawa_R_回路図

 はんだ付けして組み立てます。
D65asYDUYAUGm0M

 プログラムも適当に書くとこれが動きます。

 自分としてはCADやXbeeのチュートリアルとしてよかったと思います。
 またシンセサイザーを作りたくなってきたのでまた作ろうと思います。

 それではまた今度。

XBeeを使ってみた話。セットアップ

 今まで無線というものを全然してこなかったので、ちょっと使ってみました。
 「ミニかわ」なるものも作っているのでそのうち書こうと思います。

 今回はこのインターフェースこのXbeeを使いました。
 ZigBee形式の普通のXBeeです。

①セットアップ
 このサイトのDiagnostics,Utilities and MIBsから、それぞれのOSに対応したソフトをインストールします。色々引っかかるかもしれませんがokを押し続けてしまえばオッケーです()。
 インストーラーをインストールできたら実行します。ほかのソフトと同じように許可とかokとか押していればインストールできます。


 ここからはxbeeのセットアップです。
 XCTUを起動するとこんな画面が出てきます。
1

 左上の虫眼鏡のアイコンをクリックすると、こんなウィンドウが出てきます。2

 それっぽいポートを選んでnext、画面が変わったらfinishを押します。そうすると選んだポートからxbeeを探してくれます。

3

 全部選択して追加しましょう。
4

 そうするとこのように認識されます。
5
 今回はxbee同士で通信したいためお互いのアドレスを設定し(AddressingのSHとSL)、どちらか片方をCoordinator Enableにしておきます(NetworkingのCoordinator Enable)。
 
 これでセットアップは終わりです。

 
②回路
xbee

 回路はこんな感じです。電源が3.3Vなことに注意してください。
 xbeeは送信側のArduinoにR,受信側のArduinoにCをつなぎました。

③プログラム
 送信側でカウントし、その値を受信側に渡すことで同期をとっています。
 双方のArduinoの13pinのLEDが同時に光れば成功です。
送信側
int LED = 13;
int count = 0;

void setup(){
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop(){
  count++;
  Serial.write(count);
  if((count % 2) == 1){ 
    digitalWrite(LED, HIGH);
  }else{
    digitalWrite(LED, LOW);
  }
  delay(1000);
}


受信側
int LED = 13;

void setup(){
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop(){
  while(Serial.available()){
    byte inChar = (byte)Serial.read();
    if((inChar % 2) == 1){ 
      digitalWrite(LED, HIGH);
    }else{
      digitalWrite(LED, LOW);
    }
    delay(10);
  }
}



 これでXBeeを使えるようになったので、ミニかわなるものをラジコン化しようと思います。
 それではまた今度。
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

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