電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

デジタル顕微鏡を買いました これは面白い

動画で基板へのはんだ付け作業にデジタル顕微鏡を使っているのを見て、これは便利そうだと思い買ってみました。
実際に購入したのは、デジタル顕微鏡G1000です。
Aliexpressで金属プレートの方を選択し、送料無料で約6,500円でした。

はんだ付けの際にプラスティックのプレートでは溶けないか心配で金属プレートの方を選択しました。
AmazonではKoolertron デジタル USB 顕微鏡 4.3インチLCDマイクロスコープが同型だと思われます。ただこちらはプラスティックのプレートのようです。

この機種を選択したのは常備して普段から使うわけではないので小型の方が良いと思い4.3インチにしました。同サイズの中ではこの機種が一番画素数が多く(公称8Mピクセル)金属プレートが選べたところです。

MicroSDのスロットもあり、画像や動画として保存できます。画像サイズは1280x720で、動画は720pで録画されます。
また、USBでPCに接続でき、0.9MP,720pのUSB CAMERAとして認識されました。

倍率は1000倍と書いてありますが、金属の定規で試したところ、1mmのメモリが本体の画面上では2.5cmで25倍ほどでした。デジタルズーム機能で4.5cmになりました。

このファイルをPC上で等倍で表示すると、23.8インチ1920x1080のモニタで9cmでした。

倍率を上げるほどカメラを被写体に近づけることになるのですが、はんだ付け作業はそんなに倍率はいらないので、十分作業空間を確保することができました。
プレートから8cmほど上げた場合の作業イメージです。

ここでちょっと面白いものを見ることができました。
液晶画面の構造がわかるくらいに見ることができたので、載せておきます。
全て画面上の白の部分です。

Nintendo Switchの液晶モデル

Nintendo Switchの有機ELモデル

iPhone13 Pro

Nintendo Switchはよく見る液晶画面の仕組みそのままの配置ですが、有機ELはSwitchとiPhone13で違うことがわかりました。

安いモデルでもここまで実用的に使えて色々遊べるので、良い買い物だと思いました。

M5StickC Plus で時計制作

眠ってたM5StickC Plusを有効活用できないかと思い、時計を作ってみました。

プログラムもそんなに大きくならなかったので、全文掲載します。

#include <WiFi.h>
#include <M5StickCPlus.h>
#include <time.h>

const char* ssid       = "(Wi-fiアクセスポイントのSSID)";  
const char* password   = "(Wi-fiアクセスポイントのパスワード)";

const char *wd[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

// NTPサーバのURL
const char* ntpServer =  "ntp.jst.mfeed.ad.jp";
//  GMT+9(日本時間)
const long  gmtOffset_sec = 9 * 3600;
// サマータイム時差(無し)
const int   daylightOffset_sec = 0;


void setup() {
  M5.begin();
  
  M5.Lcd.fillScreen(TFT_BLACK);
  M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
  M5.Lcd.setRotation(1);

  adjust();

}

void loop() {
  struct tm t;
  if (getLocalTime(&t)) {
    M5.Lcd.setTextSize(5);
    M5.Lcd.setCursor(20, 25);
    M5.Lcd.printf("%02d:%02d", t.tm_hour, t.tm_min);
    M5.Lcd.setTextSize(3);
    M5.Lcd.setCursor(175, 38);
    M5.Lcd.printf(":%02d", t.tm_sec);
    M5.Lcd.setTextSize(3);
    M5.Lcd.setCursor(10, 90);
    M5.Lcd.printf("%04d/%02d/%02d", (1900 + t.tm_year), (t.tm_mon + 1), t.tm_mday);
    M5.Lcd.setTextSize(2);
    M5.Lcd.setCursor(197, 97);
    M5.Lcd.printf("%s", wd[t.tm_wday]);

    if (t.tm_hour == 4 && t.tm_min == 0 && t.tm_sec == 0) {
      adjust();
    }
  }
  
  delay(100);

}

void adjust() {
  WiFi.begin(ssid, password);

  // 500ms*120回なので、1分でタイムアウト
  for (int i = 0; i < 120 && WiFi.status() != WL_CONNECTED; i++) {
    delay(500);
  }
  if (WiFi.status() != WL_CONNECTED) {
    // Wifi接続エラー
  }

  if (WiFi.status() == WL_CONNECTED) {
    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
    struct tm t;
    if (!getLocalTime(&t)) {
      // NTPサーバ接続エラー
    }
  }
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}

M5StickC Plus

M5StickC Plus

  • スイッチサイエンス
Amazon

MakeCode Arcade で遊んでみました

Microsoft MakeCode Arcade で簡単なゲームを作ってみました。

Space Attack
Catch Apple

Microsoft MakeCode Arcadeはゲームを作成できる開発環境です。
初めから基本的な機能や素材が用意されているので、簡単にゲームを作ることができます。
プログラム方法はブロック、JavaScript、Pythonでできるのですが、今回はブロックで作ってみました。

実行はWeb上でもできるのですが、対応ハードで実行することができます。
今回はELECFREAKS Retro Arcade for Educationを購入しました。
すぐに欲しかったのと、メーカーの通販サイトで送料を含めるのとそんなに変わらない金額だったので、共立エレショップで購入しました。

USBを接続してからクリックで転送できるお手軽仕様です。
また、USBドライブとして見えているので、ここにダウンロードしたuf2ファイルをコピーしても転送することができます。

対応機種はこれの他にも色々あり、Amazonからも購入できるのもがあります。

ダイソーの300円スピーカーで遊んでみました 高音質化改造

ダイソーで販売されている300円のスピーカーで遊んでみました。

ノーマル状態では値段なりの音です。
低音が弱く、高音も細かい音が表現しきれずに軽い感じの音でした。
パワーが足りずに振動版を上手く振動しきれていないような感じです。

そこで、ネット上で何人かの方が紹介されているコンデンサの交換を試してみることにしました。

上の画像のC3とC4のチップコンデンサを交換します。
初期のコンデンサは0.082uFのものらしいのですが、これを2.2uFに交換します。
あまり容量を増やしすぎてもオペアンプが熱を持って危険なので、3.3uF以下に抑えた方が良いらしいです。
経験上、普通のサイズの電解コンデンサだと半田付けした後に基板からはがしてしまいそうで、チップコンデンサにしました。サイズは0603のもので大丈夫でした。


こんな感じです。

決して良い音ではないですが、軽い感じの違和感がある音ではなく、普通に落ち着いて聞けるような音になりました。
ちょうどPC-9801で使用している、上海問屋かあきばおーで2,000~3,000円で買った(記憶が定かではない)ミニスピーカと同レベルの音になりました。

手間はかかりましたが、300円のスピーカとAliexpressで100個200円程度のコンデンサで2,3千円の音になったと思えばよかったと思います。
もう1つ買ったので、そのうち汎用アンプ基板でオペアンプを色々変えて遊んでみたいと思います。

音源作りに持っておきたい本 サウンドプログラミング入門

スイッチサイエンスで買い物をした時についでにM5Stack ATOM Echoも買ったので、久しぶりにPSG音源でも作って遊ぼうかなと思ってます。
過去にArduinoやmbedでPSG音源やファミコン音源を作って遊んでたことがありました。
その頃に結局実現する前に飽きて止まってしまってますがFM音源を作ってみたいなと思い、仕組みを理解するために買って今でも音源関係で役に立っている本があります。

サウンドプログラミング入門 - 音響合成の基本とC言語による実装

初版は2013年3月10日発行ですが、現在でも現行商品として販売されています。

章の構成を見てもらえればわかると思いますが、波形を出力する基本からPSG音源やFM音源等の仕組みも解説されていて1冊で一通りのことがコンパクトに書かれています。
この手の本は他になかなか無いので、重宝しています。

章の構成

第1章 サウンドプログラミングの基礎知識
 1.1 サンプリング
 1.2 標本化
 1.3 量子化
 1.4 メディアの規格
 1.5 WAVEファイル
 1.6 C言語によるサウンドプログラミング
 コラム1 サウンドレコーダー

第2章 サイン波を鳴らしてみよう
 2.1 サイン波
 2.2 波形と周波数特性
 2.3 12平均律音階
 コラム2 フェード処理

第3章 サイン波を重ね合わせてみよう
 3.1 サイン波の重ね合わせ
 3.2 ノコギリ波
 3.3 矩形波
 3.4 三角波
 3.5 位相
 3.6 白色雑音
 コラム3 音の三要素

第4章 周波数特性を分析してみよう
 4.1 周波数分析
 4.2 フーリエ変換
 4.3 窓関数
 4.4 楽器音の周波数分析
 4.5 スペクトログラム
 4.6 高速フーリエ変換
 コラム4 バーチャルピッチ

第5章 加算合成 ~ 足し算で音を作ってみよう
 5.1 加算合成
 5.2 サイン波の重ね合わせ
 5.3 時間エンベロープ
 5.4 オルガン
 5.5 ピアノ
 コラム5 分析合成

第6章 周波数特性を加工してみよう
 6.1 フィルタ
 6.2 FIRフィルタ
 6.3 IIRフィルタ
 6.4 DFTフィルタ
 コラム6 インパルス応答

第7章 減算合成 ~ 引き算で音を作ってみよう
 7.1 減算合成
 7.2 原音のフィルタリング
 7.3 周波数エンベロープ
 7.4 音声合成
 7.5 ボコーダ
 コラム7 パルス列

第8章 PSG音源 ~ 電子音を鳴らしてみよう
 8.1 PSG音源
 8.2 時間エンベロープ
 8.3 ゲームミュージック
 8.4 効果音
 8.5 オーバーサンプリング
 コラム8 MMLとMIDI

第9章 アナログシンセサイザ ~ 楽器音を鳴らしてみよう
 9.1 アナログシンセサイザ
 9.2 LFO
 9.3 トレモロ
 9.4 ビブラート
 9.5 ワウ
 9.6 ADSR
 9.7 オルガン
 9.8 バイオリン
 9.9 ピアノ
 9.10 ドラム
 9.11 アナログ信号とディジタル信号
 コラム9 デチューン

第10章 FM音源 ~ 金属音を鳴らしてみよう
 10.1 FM音源
 10.2 変調指数
 10.3 周波数比
 10.4 時間エンベロープ
 10.5 チューブラーベル
 10.6 エレクトリックピアノ
 10.7 ディジタルシンセサイザ
 コラム10 モジュレーション

第11章 PCM音源 ~ サンプリングした音を鳴らしてみよう
 11.1 PCM音源
 11.2 タイムストレッチ
 11.3 ピッチシフト
 11.4 Log-PCM
 11.5 DPCM
 11.6 ADPCM
 コラム11 ループシーケンサ

第12章 リアルタイム処理のサウンドプログラミング
 12.1 サウンドデバイスとサウンドドライバ
 12.2 録音処理
 12.3 再生処理
 12.4 ループバック再生
 12.5 ボイスチェンジャ
 コラム12 Pure DataとSuperCollider

Sipeed Maix Amigo のメモ

Sipeed Maix Amigo を買ったので、初めに用意したものをメモとして残しておきます。

MaixPyドキュメント

https://wiki.sipeed.com/soft/maixpy/en/

ファームウェア

https://dl.sipeed.com/shareURL/MAIX/MaixPy/release/master

2021年6月25日の最新
https://dl.sipeed.com/shareURL/MAIX/MaixPy/release/master/maixpy_v0.6.2_54_g897214100
maixpy_v0.6.2_54_g897214100_amigo_ips_defaults.bin

スイッチサイエンスで2021年6月21日に購入したバージョンはIPSの方だった。
説明にはTFTと書いてあったので、最初にTFTの方を入れたら色が反転したりラインがズレたりした。
IPSとTFTが混在している可能性がある。

kflash_gui

https://github.com/sipeed/kflash_gui
ファームウェアを書き込むもの。
ファームウェアを書き換える場合はEraseが必要 。(デフォルトはサイズが1MBだが上手く消されないので、16MBに変更する。)

モデル

https://dl.sipeed.com/MAIX/MaixPy/model

実行するときに別途モデルが必要な時がある。
何が必要かはドキュメントを参照する。

サンプルスクリプト

https://github.com/sipeed/MaixPy_scripts

MaixPy IDE

https://dl.sipeed.com/shareURL/MAIX/MaixPy/ide

最終更新が2020年7月とバージョンが古く、ボードの選択でAMIGOがない。
選択しなくても使えるが、詳細は不明

Thonny(https://thonny.org/)でもMicroPython(generic)で使用可能
フラッシュにソースを保存するときにエラーメッセージが表示されるが、問題なく保存して実行される。
サブディレクトリは作成不可

Arduino UNO互換機を購入する際の注意事項


Arduino UNOを購入する際に価格が安い互換機も探す場合に注意事項を紹介します。
特にUNOの互換機にはUSB-Serial変換チップに純正品と同じATmega16U2ではなく、CH340Gが使われている場合があります。
これはArduino開発環境のドライバとは別にドライバのインストールが必要になり面倒なので、避けたほうが良いです。

コストを下げるためにCH340Gが使われており、この手の物は他の部分でも作りが雑で同じ互換機でもATmega16U2が使用されているものより質が悪いことが多いです。
AliExpress等で中華互換機を探すと全体的にATmega16U2と比較して極端に安いものが多いですが、手間と質を考えるとATmega16U2の方が色々と楽になります。
(ATmega16U2の物は安くても1000円前後するのに対して、CH340Gのものは300円ほどからある。)

またCH340Gは機能ICでUSB-Serial専用チップです。プログラムの書き換えができるのATmega16U2と違い、ファームウェアを書き換えてAVRライタにしたり、USB-MIDIで遊んだりはできません。

始めは割り切って買ったとしても、後から色々と不具合が出るので、ATmega16U2が使われていることをチェックして購入することをお勧めします。

UNOと同じくATmega16U2を使用しているMega等にも言えることですので、気を付けてください。