Picoremin (1)概要

Picoremin "Raspberry PI Pico Pseudo-Theremin" (1)概要

Picoremin (ピコルミン)とは

世界最初の電子楽器と言われているのは、テルミン(Theremin) という楽器です。
テルミンの最大の特徴は、「楽器自体に直接触ることなく演奏する」
ということにあると思います。

Picoremin(ピコルミン)は、Raspberry PI Pico を使って作ってみた楽器で、
テルミンと原理はまるで違いますが、楽器に直接触ることなく演奏するという意味だけは、テルミンと類似している「テルミンもどき」とでもいうようなしろものです。

Picoremin外観
Picoremin 外観写真
左右に超音波距離計、Pico は、筐体の上に乗せています。

段ボール箱を切ったものを仕切りのようにしています。
これは、テルミンのアンテナを模したという側面がないこともないのですが、
超音波距離計は、外来ノイズに弱いようで、これがある方が音程が少し安定します。ついでに、カンニング用に音程位置目安を付箋紙で貼ってあります。

Picoremin筐体内部
Picoremin 筐体内部写真
2つの超音波距離計とスピーカーを結束バンドで、固定しています。 見ての通り、ほぼカラです。

ちなみに、本物のテルミンは、こんな感じの楽器です。
テルミンのイラスト


演奏方法

右手で音程、左手で音量を制御します。

音程の制御

テルミンは、アンテナと右手の距離で音程を制御するらしいですが、
Picoremin は、右手を上げれば音程が高くなり、下げれば音程が低くなります。
テルミンは、音程が無段階で制御できるそうなので、当初は、Picoremin もそれを真似しようとしましたが、演奏が難しすぎたので、
B3(下のシ)から、E5(上のミ)までの白鍵の音だけ出すようにしています。

音量の制御

テルミンの音量は、左手を高く上げると音量が大きくなるらしいです。
Picoremin もそれをまねて、
左手を上げれば音量が大きくなり、下げれば小さくなり、4cm くらいのところで、無音になります。 一応、ハード的には、100段階以上音量調整できるのですが、
無音を含めて6段階にしています。


回路図と実体配線図:

回路図

回路図

実体配線図

実体配線図

部品表

No. 部品名 個数 説明
1 Pico 1 Raspberry PI Pico 本体
2 20ピンヘッダ 2 Pico にはんだ付けする
3 ブレッドボード 1 half+
4 HC-SR04 2 超音波距離計モジュール
5 2SC1815 1 音量増幅用トランジスタ
6 抵抗 1 75Ω 1/4W ベース電流制限用
7 MCP-4018T-103E 1 ポテンショメータ・音量調整用
8 SOT363-6 DIP化基板 1 ポテンショメータのDIP化用
9 スピーカー 1 0.25W 8Ω
10 ケース 1 ダイソー スクエアメッシュ(大)

(線材、パスコン、仕切り版等は省略)

あと電源が必要ですが、USBマイクロBのものなら大丈夫なので、スマホの充電器とかで大丈夫だと思います。


プログラムソース:

Picoremin_20220508.zip ダウンロード

ソースファイルの説明
Python (MicroPython) で書いてます。
展開したら、srcs/ の2個の .py ファイルを Pico に書き込めば動きます。

MusicalScale.py は、電子オルゴールのものをそのまま持ってきてるので、不要な機能が多いです。

main.py が、メインプログラムですが、まだかなり改造する可能性が高いです。


実際の演奏動画

うまく演奏できず、お恥ずかしいかぎりですが、演奏動画のリンクです。

演奏動画

(4)「優良賞」いただきました「Pico オルゴール」

みんなのラズパイコンテスト2021

ラズパイマガジン、日経Linux、日経ソフトウエアが主催で
「みんなのラズパイコンテスト」というのが開催されていましたので
試しに、「Pico オルゴール」を応募していたのですが、

ありがたいことに「優良賞」というのをいただきました

審査の基準が技術的に優れたものというより、
楽しいものに重きを置いていただいたおかげだと思います。
選んでいただき感謝感謝です。

表彰状

「表彰状」というものをいただいたのは、何十年ぶりでしょう・・・
もう一生ないかもしれないし、額でも買ってこようかな(笑)

ちなみに「優良賞」の賞品は、Amazon ギフト券 1000円ですが、
応募したのが8月だったので、早めに出した人で抽選の 「スタートダッシュ賞」というのも併せていただいたようで、
2000円分の Amazonギフト券が同封されていました。

早応募は1000円の得
ありがとうございました。

関連リンク

・みんなのラズパイコンテスト

(3)笛機能追加「Pico オルゴール」

Raspberry PI Pico オルゴール(3)笛機能追加

注意事項

すみません。最初に注意事項です。
この工作は、(百均の霧吹き用の器具とはいえ)ペットボトルに加圧するので、
たぶん多少は危険だと思います。
この記事を見て同じものや類似のものを作っていただくのは、もちろん構わないのですが、
万一事故が起きても当方は責任をもてませんので、自己責任でお願いいたします。
特に、

  • キズのあるペットボトルとか使わないでください。
  • 何十回も同じペットボトルを使うとかしないでください。
  • 「これでもかぁ」って感じで加圧しすぎないでください。

笛機能

前回「お囃子機能」と、うたわせていただきましたが、
太鼓(?)と鈴だけで、そう「笛」抜きで「お囃子」というのは、おこがましい感じがしたので・・・
ひな祭りの歌の「五人囃子の笛太鼓」を字面の通りに解釈しただけです。
って、説明するほどの話じゃないですが・・・
(-_-)/~~~ピシー!ピシー!

というわけで、 Raspberry PI Pico (以下、Pico)オルゴールのお囃子機能をさらに強化し!!!
「笛」 機能を追加しました。
まぁ見てもらった方が早いです。

動画
画像クリックで、YouTube動画が開きます。

主な追加部品

  • 笛(ホイッスル)
    KAWAGUCHI SOS ホイッスル(大きさが非常によかったです)
    ・・・五人囃子の笛って、 横笛だと思うんだが ピーー!(ホイッスル音)
  • 加圧式霧吹き(ペットボトル用)
    ダイソーの園芸用品売場で売ってたもの・割り箸を付けたりして加工
  • 空きペットボトル
    加圧するので、強炭酸水のものがいいと思います(600ml を使ってます)。
  • サーボモーター
    MiniS RB90
  • タピオカストロー(4cmくらいに切る)
    ダイソーで買ったものが笛の太さにちょうどよかったです。
  • トリガレバー制御用針金
    1/4W のカーボン被膜抵抗で代替、割り箸に巻きつけるだけだと弱かったので
    巻いたところをはんだ付けしました。

笛吹き構造説明

まぁ見たまんまで、説明するほどの内容はないです。
ペットボトルに貯めた圧縮空気をトリガレバーを押して噴出すると、
タピオカ用ストローでつないだ笛に空気が流れて音が出ます。

トリガレバーがサーボモータでは少し制御しにくい構造だったので割り箸で伸ばして、
制御しやすくしました。

実体配線図と部品表:

実体配線図

実体配線図
(Fritzing というアプリで書いたものを PNG で出力したもの)

部品表(電子部品)

No. 部品名 個数 説明
1 Pico 1 Raspberry PI Pico 本体
2 20ピンヘッダ 2 Pico に、はんだ付けする
3 ブレッドボード 1 half+
4 タクトスイッチ 3 黒と赤と白
5 抵抗 1 390Ω 1/4W LEDの電流制限用
6 LED 1 赤色
7 ジャンパ線 13 うち4本はスピーカー接続、6本はサーボモータ接続
8 スピーカー 2 「マザーボード用」として売ってたもの
9 サーボモータ 2 RB90, RB50 各1 (RB90 が 2個でもよい)
10 抵抗の足 8 電源・GND 配線用

プログラムソース:

PicoMusicBox_20210815.zip ダウンロード
MITライセンスを適用(念のため解凍後 LICENSE.txt でご確認ください)

大雑把な説明
Python (MicroPython) で書いてます。
展開したら、srcs/ の7個の .py ファイルを Pico に書き込めば動きます。

PWMを4ch使っていて、

  • 左スピーカーから直接 Beep 音を出す
  • 右スピーカーから直接 Beep 音を出す
  • サーボモータ制御で鈴をふる
  • サーボモータ制御で加圧式霧吹きのトリガレバーを制御する

です。

タクトスイッチが押されると割り込みがかかります。

大雑把な使い方

  • 赤のタクトスイッチで演奏開始・次の曲に進む
  • 黒のタクトスイッチで演奏終了
  • 白のタクトスイッチでBeep音のDuty比変更

です。

曲は、4曲入ってて(4曲とも著作権フリーです)

  • Yankee Doodle(アルプス一万尺)アメリカ民謡
  • When The Saints Go Marching In(聖者の行進)アメリカ民謡
  • Le Piccadilly(ピカデリー)エリック・サティ作曲
  • Неделька(一週間)ロシア民謡

です。

後日プログラムの説明を・・・(万一リクエストでもあればw)書くかもしれません。

(2)お囃子機能追加「Pico オルゴール」

Raspberry PI Pico オルゴール(2)お囃子機能追加

お囃子機能

Raspberry PI Pico (以下、Pico)のオルゴールに、
お囃子機能 を追加しました。
「なんのこった?」と思うと思うのですが、
見てもらった方が早いです。

動画
画像クリックで、YouTube動画が開きます。

「くだらねぇ~」(言われると悔しいので、言われる前に、言っておくやつww)

主な追加部品

  • 透明アクリルケース
    100均で売ってたもの、たたいた時に音が響くものがいいです。
  • サーボモーター
    MiniS RB50 何年か前に買って使ってなかったもの、
    1000円くらいで、今も買えます。
  • 鈴 2個
    100均で、10個入りで売ってたもの
  • 鈴付け用の針金 2本
    • サーボモーターのホーン(モーターの回転部につけてる白い部品)に付ける(抵抗で代替)
    • ケースに鈴をぶら下げるもの(手元にあったビニタイを使用)
  • コンデンサ 0.1μF
    パスコン(手元にあったもの、気休めに近いですがある方がいいです)

打音・鈴音

試行錯誤の結果

  • ケースを鈴でたたく音(以下、打音)
  • 鈴と鈴をぶつける音(以下、鈴音)

がよさげでした。

サーボモーターで、この音を出すには、ホーンの位置 2個所を設定してトグルさせるだけで、実装できます。
ただ、鈴音、打音を交互で出すことしかできません(^^;

お囃子用の固有問題(って大げさな)

Beep音と同時に、打音・鈴音のモーターを動かすと
Beep音が鳴り始めてから、打音・鈴音がするので、
「酔っぱらって、手拍子が合わせられないおっさん」
みたいになります。

それを避けるため、(いい加減ですが)Beep音の
約0.1秒前に、モーターを動かすことで、
「ちょっとリズム感が弱いおっさん」くらいになってます。

サーボモーター制御について

MiniS RB50 の仕様 によると、信号周期 15-20mS とあるので、 周波数表現だと、50-66.7Hzくらいになりそうなので、 PWMの周波数を 60Hz(約 16.6mS)にしました。

あとは、実際に動かしてみて、よさげな値に設定します。
この値は、おそらく個体差があるので、実際に使う
モーターで、設定値を変えなければいけないはずです。

Pythonソースの要部は、こんな感じです。
初期設定

from machine import Pin, PWM

bell_pos1 = 2200 # 鈴音位置(これは、モーター固有値)
bell_pos2 = 3600 # 打音位置

bell_pos = bell_pos2

motor1 = PWM(Pin(18, Pin.OUT))   # PWM 1A ch
motor1.freq(60)
motor1.duty_u16(bell_pos)

def bell_exec():
    global bell_pos
    if bell_pos == bell_pos1:
        bell_pos = bell_pos2
    else:
        bell_pos = bell_pos1
    motor1.duty_u16(bell_pos)

で、Beep音を出す 0.1秒ほど前に bell_exec() を実行します。

ごめんなさい、まだ改良の余地がありそうなので、
現時点では、ソースは公開しないでおきます。

WordPress 表の罫線強制表示

WordPress 表の罫線強制表示

表の罫線はテーマ依存か?

WordPress で表を作るとき、テーマに依存するんだと思うんですが、
罫線が表示されたり表示されなかったりします。

少なくとも、Markdown で入力すると、表の罫線の設定はできません(たぶん)

「こうなっちゃうんですよ(設定前)」例:
設定前

この表示の方がしっくりするという人や場合も多いとは思うんですが、
個人的には、どうも落ち着かないです。


テーマ Sparkling で罫線を強制表示するには

コンテンツを表示して、Chromeのデベロッパーツールで、確認したところ tableタグは、

<table class=" table table-hover">

だったので、
table.table.table-hover の th と td に罫線を設定すれば、強制表示できます(たぶん)。

副作用が、出ないともかぎりませんが・・・まぁそんときはそんとき


footer.php の書き換え

テーマのファイルを書き換えるのは最小限にとどめたいですが、
別の対策(このリンクが別ウィンドウで開くようにする対策)で、
既に footer.php を書き換えていたので、同じ場所に入れちゃいました。

wp-content/themes/sparkling/footer.php の最後に近いあたりに、

<script type="text/javascript">
jQuery(function() {
    jQuery("table.table.table-hover th, table.table.table-hover td").css('border','1px solid #cccccc');
});
</script>

を入れると、強制表示できます。


そういうわけで、このサイトの footer.php は、現在

<script type="text/javascript">
jQuery(function() {
    var atags = $("a[href$='#_blank']");
    for(const atag of atags) {
        jQuery(atag).attr('target', '_blank');
        str = jQuery(atag).attr('href').slice(0, -7);
        jQuery(atag).attr('href', str);
    }
    jQuery("table.table-hover th, table.table-hover td").css('border','1px solid #cccccc');
});
</script>

を追加してあります。

で、この対応により
「こうなります(設定後)」例:
設定後
のようになります。

Raspberry PI Pico でオルゴール(1)概要

Raspberry PI Pico でオルゴール(1)概要

はじめに(Raspberry PI Pico とは)

Raspberry PI Pico(以下、Pico)は、Raspberry PI という名前ですが、Linuxが動くとか、
そういうものじゃなくて、電子工作とか組み込み機器に使う、いわゆるマイコンボードです。

というと、敷居が高そうな感じがするかもしれませんが、
パソコンがあれば(Windows、Mac だけじゃなくて、Raspberry PI とかでも)
ほぼ、手間なしで、C/C++ のほか、Python (MicroPython)も使えちゃう。
しかも2コア使ったスレッド処理なんかも簡単に書けちゃうというしろもので、
これがなんと、600円弱くらいで買えちゃうんです。


オルゴールを作ってみた

で、とりあえず、電子オルゴールを作ってみました。

動画リンク
画像クリックで、YouTube動画が開きます。

夏休みとかの自由研究ネタになるかもしれません。

細かい話は、後日書くつもりですが、仕様概要は以下の通りです。

  • 3曲演奏(自動ループ)曲の切替可能、停止可能
     「ピカデリー」「聖者の行進」「一週間」(※)

  • 和音(2音)対応

  • 音色の変更対応
    (といえるか? PWM の Duty 比を変える)

※:楽譜 PDF をダウンロードして、手作業で Python の変数配列に落としこむという、
 「昭和か!」 的なアナログな方法で・・・3曲で疲れました(笑)


実体配線図と部品表:

実体配線図

実体配線図
(Fritzing というアプリで書いたものを PNG で出力したもの)

部品表

No. 部品名 個数 説明
1 Pico 1 Raspberry PI Pico 本体
2 20ピンヘッダ 2 Pico にはんだ付けする
3 ブレッドボード 1 half+
4 タクトスイッチ 3 黒と赤と白
5 抵抗 1 390Ω 1/4W LEDの電流制限用
6 LED 1 赤色
7 ジャンパ線 7 うち4本は、スピーカー接続用
8 スピーカー 2 「マザーボード用」として売ってたもの
9 抵抗の足 6 GND 配線用

(No.5 と No.6 は、後述のように無くてもかまいません)

あと電源が必要ですが、USBマイクロBのものなら大丈夫なので、スマホの充電器とかで大丈夫だと思います。
もし、電源コンセントのないところで使うなら、モバイルバッテリーでも大丈夫です(たぶん)。


プログラムソース:

PicoMusicBox_20210508.zip ダウンロード

大雑把な説明
Python (MicroPython) で書いてます。
展開したら、srcs/ の6個の .py ファイルを Pico に書き込めば動きます。

そうしなくても実装できるけど(笑)2スレッドで和音を出してます。
スイッチが押されると割り込みがかかります。

いくらなんでも、大雑把すぎるww
後日プログラムの説明を書く・・・かもしれません。


説明:

実体配線図の3つのボタン(タクトスイッチ)は
左から「SW_STOP」「SW_SEL」「SW_TONE」で、

  • SW_STOP
    演奏を停止する
  • SW_SEL
    曲を変える
  • SW_TONE
    音質を変える

になります。

ブレッドボード上のLEDは、「スピーカー1」の音が出てるときだけ点灯させてます。
それだけのことなので、無くても動作に問題はありませんが、
なんかの理由で、音が出ないときに LED が チカチカ してると、
「プログラムは動いてるけど、スピーカーがおかしい可能性が高そう」とかの判断に役立ちます。

Markdown のリンクを別ウィンドウ表示にするかを制御

Markdown のリンクを別ウィンドウ表示にするかを制御

Markdown のリンクの問題点

WordPress の Jetpack で、Markdown で入力でき、
編集の時も入力した Markdown がそのまま入ってるんで、とても便利です。

が、ちょっと残念なのは、リンクに、target=’_blank’ がつけられないこと

Jetpack の Markdown は、Markdown Extra に対応していると書いてあるけど、
{.class名}って書けば、class が付けられるってのは対応していないみたいです。

リンクURIが #_blank で終わってたら別ウィンドウ

で、ググってみたら、JavaScript で、外部サイトだったら target=’_blank’ を付けるという、
目からウロコの方法が紹介されていたので、それを少し変えさせていただき、
リンク先が、#_blank で終わっていたら、で実装してみました。

表示する文字列:ロリポップXXリンク、リンク先:https://lolipop.jp/ であれば

[ロリポップ通常リンク](https://lolipop.jp/)  
[ロリポップ別窓リンク](https://lolipop.jp/#_blank) 

です。

ロリポップ通常リンク
ロリポップ別窓リンク

まぁ、URIの最後に、7文字余計なのを入れることになっちゃいますが・・・

footer.php の書き換え

wp-content/themes/使用するテーマ/footer.php
の最後に近い </body> の上あたりに、

<script type="text/javascript">
jQuery(function() {
    var atags = jQuery("a[href$='#_blank']");
    for(const atag of atags) {
        jQuery(atag).attr('target', '_blank');
        str = jQuery(atag).attr('href').slice(0, -7);
        jQuery(atag).attr('href', str);
    }
});
</script>

を入れてみました。

説明

説明するほどの内容じゃないですが、
a タグの href が #_blank で終わってたら、

  • その a タグに target=’_blank’ を入れる
  • href の最後の7文字(余計につけておいた #_blank )を消す

というものです。

参考

Markdownのリンクを別ページで開けるようにする