モータードライバーに送るパルスの生成(周期の計算)
前回の記事でステッピングモーターを回す事が出来たので、今度はモーターを回転させながら任意の周波数の音を出せるようにしたい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const int motor_pin = 2; int motor_delay = 600; //パルスの1/2周期 void setup() { pinMode(motor_pin, OUTPUT); } void loop() { digitalWrite(motor_pin, HIGH); //2番ピンをHIGHに delayMicroseconds(motor_delay);//motor_delay μ秒待機 digitalWrite(motor_pin, LOW); //2番ピンをLOWに delayMicroseconds(motor_delay);//motor_delay μ秒待機 } |
前回のプログラムで生成されるパルスはこのようになる。
モータードライバーに送るパルスは、LOWからHIGHに変わる時にモーターは1ステップ動く。十回パルスを送ると10ステップ動くことになる。
この時の、パルスの間隔つまり周期(周波数)を調整してあげる事で、モーターからパルスと同じ周波数の音が出る仕組みだ。
周期と周波数の関係
周期
音の波をグラフで表した時、ある時点の山から次の山までにかかる時間を周期という。- 周波数
1秒間に山~山が何回繰り返されるか、1秒間に10回繰り返されれば10Hz、100回繰り返されれば100Hzになる。
周期と周波数の関係は「周期(秒) = 1秒 ÷ 周波数(Hz)」で求めることができる。
このプログラムでは、パルスのHIGHとLOWの時間(周期)をmotor_deley変数で半分づつになるように指定している。
たとえば、ピアノの鍵盤番号36番の”ド”の音の周波数は「261.26Hz」になるが、これを実際にモーターで鳴らしたい時はまず、周期を求める。
周期(秒) 1÷261.26 = 0.003827...
単位が秒なので、マイクロ秒に変換するため100万を掛ける
周期(μ秒) 0.003827 × 1,000,000 = 3827
プログラムではHIGHとLOWで半分ずつに分けているので1/2にする。
motor_deley = 3827 ÷ 2 =1913
従って、ピアノの鍵盤番号36番の”ド”音を上記のプログラムで出したい場合は、motor_deley変数に1913を入れてあげれば、良いということになる。。。。
ガ!しかし
実際にはズレてしまうのだ。
基準を442Hzで鍵盤番号36番のドの音(周波数 263.626、motor_deley = 1897)を上記のプログイラムで実行した時のチューナの画面だが、2Hz程低くなってしまう。
理由はdigitalWrite関数などは、命令の実行開始から実際に結果に反映されるまでのタイムラグがあり、結果予定より周波数が若干低めになってしまうのだ。
(別記事で詳しく説明・・・記事作成中・・・)
・deley関数を使わずに 「milis()、micros()」を使う方法
・digitalWrite を使わずに、ポートレジスタを叩いて高速化
これらを修正したプログラムがこれになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
const int motor_pin = 0b00000100; //D2番ピン int motor_delay = 1000; //パルスの1/2周期 unsigned long old_micros = 0; // int pulse_state = LOW; //ピンの出力状態の記録 void setup() { pinMode(motor_pin, OUTPUT); } void loop() { unsigned long current_micros = micros(); if (current_micros - old_micros >= motor_delay) { old_micros = current_micros; if (pulse_state == LOW) { pulse_state = HIGH; PORTD |= motor_pin; } else { pulse_state = LOW; PORTD &= ~motor_pin; } } } |
動作確認結果
各音階の周期(motor_delay)の計算表
周波数 |
442Hz(+2Hz) |
1/Hz | *1000000 | 1/2(motor_deley) | ||
ド | C | 261.626 | 263.626 | 0.003793 | 3793 | 1897 |
ド# | C# | 277.183 | 279.183 | 0.003582 | 3582 | 1791 |
レ | D | 293.665 | 295.665 | 0.003382 | 3382 | 1691 |
レ# | D# | 311.127 | 313.127 | 0.003194 | 3194 | 1597 |
ミ | E | 329.628 | 331.628 | 0.003015 | 3015 | 1508 |
ファ | F | 349.228 | 351.228 | 0.002847 | 2847 | 1424 |
ファ# | F# | 369.994 | 371.994 | 0.002688 | 2688 | 1344 |
ソ | G | 391.995 | 393.995 | 0.002538 | 2538 | 1269 |
ソ# | G# | 415.305 | 417.305 | 0.002396 | 2396 | 1198 |
ラ | A | 440 | 442 | 0.002262 | 2262 | 1131 |
ラ# | A# | 466.164 | 468.164 | 0.002136 | 2136 | 1068 |
シ | H | 493.883 | 495.883 | 0.002017 | 2017 | 1008 |
コメント
гарантия при продаже аккаунтов магазин аккаунтов
купить аккаунт маркетплейс аккаунтов
продажа аккаунтов аккаунт для рекламы
магазин аккаунтов магазин аккаунтов социальных сетей
продать аккаунт аккаунты с балансом
Account marketplace Account Buying Service
Сотрудничество с компанией НАПЫЛЕНИЕ РФ, специализирующейся на поставке редкоземельных материалов для различных методов напыления, открывает перед вашим предприятием двери в мир качественных инноваций. Закупка у нас гарантирует не только доступ к премиальным продуктам, но и возможность заказа требуемого количества.
Обладая обширной линейкой редкоземельных элементов, от мышьяка до циркония, компания НАПЫЛЕНИЕ РФ готова удовлетворить потребности самых разных заказчиков. Каждый продукт сопровождается необходимыми документами, удостоверяющими его происхождение и соответствие заданным критериям.
Кроме того, НАПЫЛЕНИЕ РФ понимает важность профессионального взаимодействия и поддержки на каждом этапе партнерских отношений. В нашем лице вы найдете не просто продавца, но и партнера, готового предложить квалифицированную помощь и поддержку, опираться на ваши конкретные потребности и адаптировать условия поставки под особенности вашего производства.
Заключая партнерство с НАПЫЛЕНИЕ РФ, вы гарантируете себе плавное и бесперебойное снабжение ценными напыляемыми материалами, позволяющее вам без остановки реализовывать самые передовые и технологичные проекты. Ваш бизнес получит крепкого союзника, с которым сегодняшние вызовы превращаются в завтрашние успехи.
Наши товары:
Плоская мишень для распыления свинца 4N
Account marketplace Database of Accounts for Sale
Sell accounts Account Store
Account Selling Platform Account Trading
Online Account Store Buy accounts
Accounts marketplace Social media account marketplace
Secure Account Purchasing Platform Account Exchange Service
sell pre-made account purchase ready-made accounts
sell accounts verified accounts for sale
account store secure account purchasing platform
account selling platform account marketplace
account acquisition account market
account purchase online account store
marketplace for ready-made accounts accounts for sale
accounts market marketplace for ready-made accounts
account selling service verified accounts for sale
account trading ready-made accounts for sale
account exchange service ready-made accounts for sale
ready-made accounts for sale gaming account marketplace
sell pre-made account buy pre-made account
secure account purchasing platform social-accounts-marketplace.org
marketplace for ready-made accounts account store
account trading service account selling platform
account market gaming account marketplace
account trading purchase ready-made accounts
buy and sell accounts secure account sales
website for selling accounts account trading platform
account marketplace account trading platform
account purchase verified accounts for sale