編集履歴一覧に戻る
sycom2600のアイコン画像

sycom2600 が 2021年02月20日16時21分00秒 に編集

初版

タイトルの変更

+

VVVF風磁励音扇風機

タグの変更

+

秋葉原2021

+

Arduino

本文の変更

+

はんだを行うとき、皆さんはどのような体勢で行うのでしょうか?私は姿勢が前のめりになるので顔に煙が直撃しておそらく体によろしくないであろうと思っていました。 しかも天性の貧乏性のため、超格安のはんだを使用しています。はっきり言って質は100均以下です。そのため煙がモクモクと...そのため、いつもはPC用の140mmファンを回していましたが、12v故に安定化電源を占有もしくはいちいち出さなければならないため少し面倒でした。そのため、5vで動く扇風機が、こんな真冬に欲しくなったのですがまさかのどこにも売ってないのです。なのでどうせなら楽しく遊べる、かつ予算500円以内で作れる扇風機 というものをテーマに作っていきます。 遊べるとなると、やはり音を鳴らしたいですよね(鉄分多めの一言) 音と言えば鉄道のVVVF インバーター音のなる扇風機なんてタモリクラ〇ぐらいでしか見たことありませんが...憧れますよね。でも三相交流は面倒です。重いです。何ならかご三相捨てられました(涙 なのでDCでそれっぽく流していきましょう。 用意するもの パチディーノナノ(Arduino nanoの互換機) スライド抵抗(10K) Nch FET(今回はK2232使用) 抵抗(適当) 夏によく見かけたスマホにさせる扇風機(今回はホームセンターで100円で購入) 上から125円 150円 100円 100円 計475円です。目安までに... まずArduinoのPWM周波数は標準で490、または980Hzです。これはPin、ボードの設計によって違いますが大体は6.5ピンが後者です。 周波数を変えるにはArduinoとしてプログラムするのは直接的には無理なのでAVR的な、マイコン的なアプローチになります。まあ行ってしまえばレジスタ値書き換えとプリスケーラの分周期変更です。 なので、皆さんの愛しのデータシート↓↓ https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf ご存じの通り328pはタイマカウンタを0~2まで持っています。内訳は8ビットが2個、16ビットが1個です。自分は16BITのカウンタ1を例にとり進めていきます。制御は13のレジスタで成り立っていてArduino系だと9.10PINに割り当てられています またPC周波数(移送基準)は490のはずなので分周比はクロックとカウンタから (1024x2ⅹ490)/16Mⅹ1000=62.7200000 どこか間違えてますがおおよそ64の分周比なのでしょう(適値 レジスタ値書き換えとプリスケーラの分周期変更は AVR.hのヘッダが必要です。 TCCR〇A及びBの〇にはそれぞれカウンタ名が入ります。 PWMmodeは海外ニキに従い位相周波数基準PWM top値はOCR1Aが多いのでOCR1Aです。  (トップ値はなぜかOCR1Aにしてますが理由はよくわかっていませんがBだとダメ見たいです。おそらくダブルバッファされてるのかな?) 分周期は1とかにすると楽しくなっちゃうので8を選択 下位3itに注意して書き込みます。 TCCR1A = 0b00100001; TCCR2B = 0B00010010; ビット演算子指定について 説明が出来ないので...ネットを見ると演算子指定いっぱいでびっくりです TOP値 式がHz/分周比とTOP値らしいので OCR1A=(1000000/周波数) OCR1B=(1000000/周波数xduty比) これに合わせて関数を立てます。 これでモーターを回せば音が鳴ります。 あとは適当に周波数を変えてあげればOK 正直これ以上書くのが疲れたのでもう... 一応レジスタ部以下 #include <avr/io.h> float duty =   ; //初期数値はとりあえず0推奨 float svc=100; //周波数 void setup() { pinMode(9, OUTPUT); } void loop() { // モード指定 TCCR1A = 0b00100001; TCCR1B = 0b00010010; // TOP値指定 OCR1A = (1000000 / svc); // Duty比指定 OCR1B = (1000000 / svc * duty); } 以下loopで可変周波数にすれば音変わります 周波数について loopで周波数変えるのはいいけど周波数はどうするかですが 私はシーメンスVVVfにしたかったのでmapで抵抗値を整えてそれっぽく鳴らしています 周波数はネットから拾ってきました。 FETは抵抗を介さなくてもなぜか安定すると定評?の2232君を使います。Arduino と愛称抜群です。 本体ハードの加工 本体は元についてたmicroUSBを基板ごととリます。 FETと電源側に適当に配線します。 Arduino nanoを付けます  FETのパッケージと合わさり綺麗にハマります。 AnalogPinにスライド抵抗を付けます 抑える棒がなかったので落ちてたFRP棒を使いグルーガンで固めます。 完成?出来上がりです。一応出力はロジアナで見ましたが高校のロジアナだったので写真は撮れませんでしたOrz ちなみにこれはNゲージに応用できるのでこれでパワーパック作りました。いつか上げたいものですが書くのが面倒で 疲れたのでとりあえずここまでで...参考になったURLとレジスタについて詳しく知りたい人向けにURLを張り付けておきます。 上田ブログ様 https://b.ueda.tech/?post=06039 ↑京急VVVFの周波数についてです。これをベースに自分の耳に合わせて前後10Hzくらいふればちょうどよくなります。 なんと!時間も書いてあるのでこれに合わせてディレイ割り当てて加速度で回してあげれば.... garretlab様 http://garretlab.web.fc2.com/arduino/inside/hardware/arduino/avr/cores/arduino/wiring_analog.c/analogWrite.html ↑レジスタについて詳しく乗っています。正直勉強になります。いやなりました。 他にもいろいろ乗っているので見て損はないと思いますむしろ得だらけですが時間がすごい勢いで吸われます simple projects様 https://simple-circuit.com/arduino-frequency-counter-project/ 以上です