電子趣味の部屋

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

Arduino Uno R4 Minima 入手しました

所用で秋葉原に行った際に秋月電子通商に寄ったら Arduino Uno R4 Minima があったので、買ってみました。

名前の通りこれが今後の標準な機種になると思います。
Wifi搭載の Arduino UNO R4 WiFi もあるのですが、こちらは技適がまだのようで取得次第国内でも販売されるようです。

MCUはRenesas RA4M1になりました。これはコアが ARM Cortex-M4です。
今までARMコアのArduinoとしてはCortex-M3のDueやCortex-M0+のZeroがありましたがFPUが無いモデルでした。ARM Cortex-M4 はFPU搭載なので、ポイントが高いです。Renesas ってのもポイントですね。

前にNUCLEO-F4シリーズでサイン波に簡単なエフェクトを掛けてちょっとした音源を作ったことがあるのですが、経過時間から波形の現在のアナログ値を計算してました。
同じ方法でArduino Zeroで作ろうとしたら、小数点演算の速度が遅くて思うように作れたなかったことがありました。
今度はFPUに加え、12bitのDACもあるので、これ単体で自作音源が作れそうです。

メモリも32 kB of SRAM、256 kB flash、8 kB data (EEPROM) と大幅に増えました。簡単な電子工作では困らないと思います。自作音源に加え、シーケンサまで作れそうです。

GPIOの動作電圧は5Vのままです。これも個人的には良いポイントで、今までのシールドがそのまま使用できることに加え、5Vの機器もそのまま接続できます。
FM音源は基本的に5Vで他のARMコアのmbedやRP2040のものは3.3Vばかりで上手く扱えなかった上に、同じArduinoでさえDueやZeroは3.3Vでした。

高性能になった分消費電力も上がってるので、実用的なものを作る場合はR3を選択することもあると思いますが、価格もそんなに変わらないので、基本的にはこれからはR4で良いと思います。

docs.arduino.cc

CASIO PB-100のカセットインターフェイスを自作

CASIO PB-100のカセットインターフェイスの簡単な作り方を見つけたので、自作してみました。

正確には使用しているのはPB-100Fですが、PB-100シリーズなら何でも対応してると思います。

参考にしたサイトです。
ziend.net
ここではカセット&プリンタインターフェイスを作成しているサイトからカセットインターフェイルに特化し、極限まで簡略化したものの回路図が紹介されてます。

実際に作成したものはこんな感じです。

PB-100に装着した画像

配線をイメージした回路図です。

使用した部品のリストです。
AVR AT90S2313
セラロック 10MHz
抵抗 5.6KΩ 4個
セラミックコンデンサ 15pF
USBシリアル変換モジュール
適当な基板
適当な線材
適当なピンヘッダ

基板と線材とピンヘッダ以外は秋月電子通商で購入したので、リンクにしておきました。

Mass storage and printer interface for the FX-700P calculatorにあるtape25d.zipにHEXファイルはあるので、これをそのままROMライターでAT90S2313に書き込みました。

PCでの接続はTeraTermで行いました。
シリアルポートは下の設定で上手く動作しました。
スピード : 9600
データ : 8bit
パリティ : none
ストップビット : 1bit
フロー制御 : Xon/Xoff

下のテストプログラムを保存してみました。

10 S=0
20 FOR I=0 TO 10
30 S=S+1
40 NEXT I
50 PRINT S

プログラムを保存する際はSAVEコマンドでPCに転送します。
PB-100の場合はソースがテキストで受信されるのではなく、バイナリを文字列にしたような信号文字列が受信されます。

oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oonnB`H`VdloB`H`>hPhPh0`oooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooo4hPh0`TiH`Phng0i0`0e@aH`PhZdR`PhngPa0`Ti
H`Ti2h@ang0j0`2m@angPb0`<eTingPg0`

プログラムをロードする際はLOADコマンドを実行後、TeraTermからこの文字列を送信します。
送信方法は、そのまま文字列をコピペで送信しても、テキストファイルで保存してファイル送信しても成功しました。
受信の際にTeraTermのログ出力を使用して保存したテキストファイルでも送信に成功しました。

まだ試してないのですが、CASsette IO Utilitiesを使用すると信号文字列をBASICへ変換したり、BASICを信号文字列へ変換したりできるようです。

CASIOの純正カセットインターフェイスは入所が困難なので、プログラムを残したい場合は簡単にできるこの方法がおすすめです。

Raspberry Pi Pico W でWifi接続のメモ (MicroPython)

Raspberry Pi Pico W でWifi接続するコードのメモ

ネットワークインターフェースを有効化

import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

Wi-Fiの接続

ssid = "(アクセスポイントのSSID)"
password = "(アクセスポイントのパスワード)"
wlan.connect(ssid, password)

接続が完了するのを待つ

while not wlan.isconnected():
    pass

これで接続できる

以下はWifiに接続して、IPアドレスを表示するまでのサンプルコード

# ネットワークインターフェースを有効化
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

# Wi-Fiの接続
ssid = "(アクセスポイントのSSID)"
password = "(アクセスポイントのパスワード)"
wlan.connect(ssid, password)

# 接続が完了するのを待つ
while not wlan.isconnected():
    pass

# IPアドレスを表示
ip_address = wlan.ifconfig()[0]
print("IP address:", ip_address)

PiCar-Xで遊ぶ 2 各モーター制御のメモ

今回は PiCar-X のモーター制御メソッドのメモです。

範囲はサンプルプログラムから推測した実用的な範囲です。
範囲を超えても指定できますが、可動に無理があるので範囲内に収めた方が良いです。

Picardクラス

PiCar-Xで遊ぶ 1 初期セットアップのメモ』 でセットアップをすると、picarxモジュールが使用できるようになりその中にPicardクラスがあります。
Picardクラスに各モーターを制御するメソッドがあります。

カメラの縦の角度

set_camera_servo1_angle(角度)
実用的な角度の範囲は-35~75

カメラの横の角度

set_camera_servo2_angle(角度)
実用的な角度の範囲は-90~90

前輪の角度

set_dir_servo_angle(角度)
実用的な角度の範囲は-30~30

前進

forward(速度)
速度の値の基準は不明
都度適当な値を設定して調整する

後退

backward(速度)
速度の値の基準は不明
都度適当な値を設定して調整する

簡単なサンプル

正面を向いて速度10で前進させるだけの簡単なサンプルです。

#!/usr/bin/env python3

from picarx import Picarx

px = Picarx()

# 正面を向く
px.set_camera_servo1_angle(0)
px.set_camera_servo2_angle(0)

# 前進
px.forward(10)

PiCar-Xで遊ぶ 1 初期セットアップのメモ

ロボット的なもので遊んでみたいと思い、価格も手ごろでカメラも扱える PiCar-X を買ってみました。

似たようなものは簡単なものでmicro:nbitを使用したものやESP32を使用したものを持っているので今度紹介したいと思いますが、今回はsshで接続してPython等でコードを書いたらすぐに実行できれば手軽だなと思いRaspberry Pi用のものが欲しいと思ってました。
今まで所有してたものは距離センサーがあって障害物を回避したりはできたのですが、今回はカメラと組み合わせて色々と遊びたいと思って探してたところ、1万円前後で手に入る PiCar-X を購入してみました。
実際に購入したのは2,3か月前なのですが、やっと組み立てました。

初期セットアップは公式ドキュメントPython環境の公式ドキュメントの方に詳しく書いてあるのですが、初期セットアップは何回も行いそうなので、簡素にコマンドを中心にメモを残しておきたいと思います。

RaspberryPi SDカード作成

Raspberry Pi Imager で「CHOOSE OS」→ 「Raspberry Pi OS(other)」 を選択。
Raspberry Pi OS(Legacy)かRaspberry Pi OS Lite(Legacy)を選択してDebian Busterをインストール

pythonモジュール

sudo apt update
sudo apt upgrade
sudo apt install git python3-pip python3-setuptools python3-smbus

robot-hatインストール

cd /home/pi/
git clone https://github.com/sunfounder/robot-hat.git
cd robot-hat
sudo python3 setup.py install

vilibインストール

cd /home/pi/
git clone https://github.com/sunfounder/vilib.git
cd vilib
sudo python3 install.py

picar-xインストール

cd /home/pi/
git clone -b v2.0 https://github.com/sunfounder/picar-x.git
cd picar-x
sudo python3 setup.py install

i2s アンプに必要なコンポーネントインストール

cd /home/pi/picar-x
sudo bash i2samp.sh

最後に「Would you like to reboot now?」と聞かれるので、yを入力し再起動
再起動後に音が出ない場合は、i2samp.sh スクリプトを数回実行する

Polyhex シングルボードコンピュータ EMB-iMX8MP-02

Polyhex シングルボードコンピュータ EMB-iMX8MP-02 をレビューします。

今回使用したオンラインサイト、RSでは電子工作に使うロジックICや各センサー等オンラインで購入可能です。

Raspberry Pi のようなシングルボードコンピュータです
Raspberry Piとほぼ同じ大きさです。

プロセッサはクワッドコアi.MX 8M PlusプロセッサでコアはCortex A-53です。
ちょうどRaspberry Pi 3と同等のコアです。
このプロセッサはニューラル処理ユニットが搭載されており、Tensor Flow Lite等で使用できるようです。

OSはUbuntu 20.04、Android 11、Yocto-L5.10.72_2.2.0が用意されています。
OSイメージは下のURLからダウンロードできます。
https://debix.io/Software/download.html

Ubuntuで実際に試した使用感ですが、Raspberry Pi 3と同等のコアの割には意外と快適に動作しました。
Raspberry Piでは3でも4でもUbuntuはもたつく感じがしますが、EMB-iMX8MPはそんなことはありませんでした。
Raspberry Pi 4でRaspberryOSを使用する場合と同等に快適でした。
初期状態では日本語やストアは用意されていないので、aptコマンド等で自分でセットアップする必要があります。
自分の使用用途としてコンソールからTensor Flow Lite等でニューラル処理ユニットを試したいので、ssh接続の設定後はディスプレイも使用せずにそのままssh接続して使用してます。

OSの日本語へのローカライズやストアが無いので初めは少々扱いにくいですが、一通り環境が整った後は単体のUbuntu環境として快適に使えるようになりました。

今後はAndroidや他のOSも試そうと思っています。

GB ゲームボーイ セーブデータのFRAM化

ゲームボーイのセーブデータは電池から電気を供給したSRAMに保存されるバッテリーバックアップ方式ですが、電源がいらないFRAMに交換しました。

今回は『ドラゴンクエスト モンスターズ』で試してみます。

ケースから基板を取り出すとこんな感じです。

左下のチップがSRAMで、これをFRAMに交換します。

FRAMは『FM1808-70-SG』を使用しました。

元のSRAMの型番は薄くなってちょっと判別できませんでしたが、ドラクエモンスターズのSRAMはそのままこのFRAMと置き換えることができるようです。
国内では1個1,000円ほどで販売されてますが、Aliexpressで10個3,200円で購入しました。価格差を考えると再生品ということも考えられます。

まず、SRAMと電池を外します。

チップの取り外しはヒートガンではんだを溶かして取る方法がありますが、そんなものは持ってないので低温はんだで追いはんだをして取りました。
強引に外すとパターンまではがれてしまうので注意が必要です。

元々SRAMがあった場所にそのままFRAMを付けます。

動作確認をしてみます。
まず初めは何もデータが無い状態です。

初めにセーブできるところまで進めて保存し、一度電源を消して10分ほど放置して再度起動してみます。

保存は成功してます。

2日遊んでこの記事を書くまで1週間ほど放置してましたがデータが消えることも無く安定してます。

全てのゲームボーイのソフトがFM1808-70-SGに置き換えられるかわかりませんが、ドラクエモンスターズの他にドラクエ1・2とドラクエ3は成功しました。

(2023年5月24日追記)
ウィザードリィ外伝シリーズ等FM1808では正常に動作しないものがありまして、ピン配置と容量が同じMB85R256を試してみたら正常に動作しました。