ミニサイズのUSBキーボード
ラズベリーパイなどで使えるミニサイズのUSBキーボード
一年前に設計してから放置していたのを最近何台か販売しました。
https://mobi-electronik.booth.pm/items/2183541
追加で何台か作ろうと思うが在庫部品も無いので発注ついでに基板も見直してみようかと、しかし大幅に変更すると色々めんどうなので少しだけ
・旧バージョン
・新バージョン
Neopixel RGB LED x 15個とUSB信号引き出しピンを追加。あとは細かい修正
何とか隙間にLED x 15個入った。
USB信号引き出しピンはラズベリーパイとケースに入れてポータブルなコンピューター作る時に邪魔なケーブル使わず直付け出来るように、あとOLEDを少し内側に移動しておいた。
ポケコン BC-328Pでパルスオキシメーター
以前に興味が有りAmazonで購入してあった、MAX30102心拍センサーモジュールを試してみたいと検索していたところ下記のプロジェクトを見つけました。
ATtiny85 Pulse Oximeter and Photoplethysmograph
Arduino Nanoでも動作するようなので、OLEDとI2Cコネクタが付いているポケコンBC-328Pを使い、センサーケーブルを作り公開されているファームを焼けばパルスオキシメーターになります。※BASICポケコンとしては使えなくなりますが。
センサー部分は反射タイプなのでクリップで挟む必要は無いと思われますが、指先を動かさず固定するのが難しい場合もあるので3Dプリンターでクリップを作成しました。
●使用した物
・ポケコンBC-328P
・MAX30102心拍センサーモジュール
・GROVE - 4ピンケーブル(半分)
・100均MicroUSBケーブル(線材部分を使用、コネクタ部分はカット)
・指先クリップ ※3Dプリンター用データ MAX30102_module - Google ドライブ
・バネ Φ6からΦ7mm、全長は挟み具合で調整
・タッピングネジ M3 x 10mm 2本
・熱収縮チューブ
・ポリイミドテープ センサー周囲の絶縁用
・接着剤 センサーモジュール、線の固定用
●センサーモジュールとGROVE - 4ピンケーブルの接続
MAX30102モジュール ー GROVE - 4ピン
VIN ー 赤
SDA ー 白
SCL ー 黄
GND ー 黒
※モジュール裏面の1V8■ ■ ■3V3パターンは、3V3側にはんだでショートしておきました。
●動画
https://www.youtube.com/watch?v=uW5WRs9dclg
クリップで挟んでいますので測定値は安定しています。
そのままのプログラムでは指先を挟んでない状態が続くとスリープモードになりますので、”X”キーで解除出来るように少し変更しています。※電源スイッチを入れなおせば良いだけなのでそのままでも問題ないですが。
医療機器としては使えませんが脈波が見れたりするので中々面白いです。
ORANGE pico PocketをIchigoJamポケコンに
IchigoJamのILI9341液晶対応βファームウェアが公開されています。
ORANGE pico Pocketに使用している液晶も同じILI9341ということで、Ichigojamを動かす為のアダプターを作ってみることにしました。
ちょうど以前にaitendoで購入した小型IchigoJam基板を発見、これを使うと簡単です(現在は販売されてないようです)。この基板にIchigoJamチップと水晶、チップ部品を取り付けます。
あとはORANGE pico Pocket基板のICソケットに取り付けられるようにICソケットからポリウレタン銅線で配線を出しIchigojam基板にはんだ付けしていきます。
・配線図
使用できるポートをORANGE pico Pocketのポートと接続しましたがBTNピンは空きが無いので未接続です。最初OUT6を引き出していたのですが、NeoPixel LED WS2812BをコントロールしてみたかったのでLEDピンに変更しています。
・VIDEO 3の拡大モード表示
●動画
使用上の問題点として、
・ORANGE pico Pocket V1.1a以外の物は[ ]キーが無い為、配列変数が使えない。
・カタカナ、拡張文字の入力が出来ない。
・マイコンチップを変えた場合、EEPROMに保存された内容がどうなるか分からない。
他にもあるかもしれませんが
今回のアダプターでIchigoJamモバイルになり、元のマイコンチップに戻せばORANGE pico Pocketにということで1台で2台分楽しめるようになりました。
ポケコン BC-644P+ 組み立てキット(上級者向け)
久しぶりに書き込みます
結局、あれからBC-644Pの改良版BC-644P+(プラス)をすぐに作ってみました。
これである程度I/Oピンを有効に使えるようになったと思います。
今回はBC-644P+、表面実装部品のハンダ付けからファームウェア書き込みまでユーザー側で行ってもらうフルキットというのを考えてみました。
本来ならCPUにファームを書き込んだ物を用意出来ればもう少し楽に組み立てられるのですが、CPUが表面実装タイプなので簡単には書き込めません。
書き込みアダプターという物も販売されていますが金銭的に余裕が有りませんので今回のようなキットになってしまいました。
とりあえず商品ページを作りましたが、あとはどの程度興味のある方がいるのかですね。
完成品も用意してあるのですが、現BASICファームの状態でいいのか迷っている状態です。とりあえずは使えない事もない状態なのですが、グラフィックキャラクタ表示なども欲しいところです。USBシリアル変換アダプターでファームウェアを書き換え出来るのでBC-328Pよりは楽に後々でもなんとかなりそうですが
まーぼちぼち考えて行きます。
BOOTHのリンクを貼っておきます
BC-644P+ ポケコン組み立てキット(上級者向け)
https://mobi-electronik.booth.pm/items/1795143
ポケットコンピューター BC-644P+ Type-A 完成品
https://mobi-electronik.booth.pm/items/1585310
ポケットコンピューター BC-644P 試作機
ポケットコンピューターBC-644Pの試作機が完成。
BC-328PからBASICインタープリターを移植してBASICの基本的な部分と増えたI/Oピンの動作確認はできました。
BC-328PではBASICインタープリターにFLASHメモリの88%を使用していましたが、BC-644Pでは44%とかなりの余裕が出来ています。BASICの機能追加なども色々出来そうです。
今回のハードウェアはBC-328PからのBASIC移植を簡単にする為に2本もあるシリアルポートをキーボードに割り当ててしまいましたが、よく考えてみるとA/Dポートの半分をキーボードに割り当てればシリアルポートを有効に出来るという事がわかりました。また設計し直しですが、シリアルポートが使える基板を作るかどうか迷うところです。
BOOTHにBC-644Pを追加してますが、まだどうするか決めていません。
ばら部品と基板でBASICインタープリターも書き込んでもらうキットもいいかな
容量倍増、ポケットコンピューター BC-644P
ポケットコンピューターBC-328Pではメモリ容量、I/Oポートの本数が少なく今後の拡張が厳しい状態でしたのでマイコンチップをメモリ容量倍のATmega644PAに変更した物を設計してみました。
・BASICポケットコンピュータ BC-644Pの仕様 ()内はBC-328P
サイズ:10cm x 6.5cm (10cm x 6cm)
電源:単4電池 x 1本
8ビットマイクロコントローラ ATmega644PA 内蔵RCクロックか外部水晶8MHz (ATmega328P 内蔵RCクロック8MHz)
フラッシュ メモリ容量 64K (32K)
SRAM容量 4K (2K)
EEPROM容量 2K (1K)
デジタル入出力 x 11 、うちアナログ入力兼用 x 8 (デジタル入出力 x 1、アナログ入力 x 2)
・どうしてもキースキャン用に連続したポート使うので、残すポートをシリアルポートにするかアナログポートにするか悩みましたがアナログ入力を残す事にしました。
・CADの3D表示をみると5㎜の差ですが少しバランスが悪くなったような感じがしますね。
BASIC ポケットコンピュータ BC-328P
小型タクタイルスイッチとOLEDスクリーンを使用した、Arduinoで動作する様に作られたBASICインタープリターが使えるポケットコンピューターを作ってみました。
BOOTHの商品ページ
https://mobi-electronik.booth.pm/items/1520931
元にしたのはこちらです(今回、数か所の回路変更とそれに対応したソフトウェアに変更しました。使いやすいように基板を作り直しただけで元とほぼ同じですが(^_^;))
CardKeyBoardでArduino用のBasicが動作する自作ポケコン
https://github.com/KeiTakagi/ArduinoBasic_cardKB
Arduino用BASIC
https://github.com/robinhedwards/ArduinoBASIC
・BASICポケットコンピュータ BC-328Pの仕様
サイズ:10cm x 6cm
電源:単4電池 x 1本
消費電力: 約45mW
8ビットマイクロコントローラ ATmega328P 8MHz
50キー (一部キーは未対応)
OLED 21文字 x 4行表示 ※テキスト表示のみ
プログラムと変数エリア 1kバイト
内部プログラム保存エリア 1kバイト (オートラン可)
外部プログラム保存エリア 32kバイト
デジタル入出力D13(基板上にLED有り)、アナログ入力A6、A7使用可能
以下Arduino 用BASICのページより翻訳、編集
BASICプログラムと変数には約1kのRAMが利用できるため、80年代のホームコンピューター(Sinclair ZX81)とほぼ同等です。
BASICは、フロート変数と文字列変数、多次元配列、FOR-NEXT、GOSUB-RETURNなど、ほぼすべての通常の機能をサポートします。
EEPROMへの保存と読み込みがサポートされ、電源投入時にプログラムを自動実行することも出来ます。
アナログピンとデジタルピンからの読み書きも可能です。(アナログA6,A7 デジタルD13ポートのみ)
・ベーシック言語
変数名には最大8文字の英数字a、bob32など使用できますが、文字列変数名は、たとえばa$、bob32$で終わる必要があります。(大文字と小文字は無視されます。BOB32はBob32と同じです。printはPRINTと同じです)
配列変数は通常の変数から独立しています。したがって、両方を使用できます。
LET a = 5
DIM a(10)
aはそれ自体が単純変数「a」を参照し、a(n)は「a」配列の要素を参照します。
算術演算子: + - * / MOD
比較演算子: <> (not equals) > >= < <=
論理演算子: AND, OR, NOT
式は、5 *(3 + 2)などの数値、また文字列は "Hello" + "world"など加算演算子のみが文字列でサポートされます(および以下の関数)。
・コマンド
PRINT <expr>;<expr>... e.g. PRINT "A=";a
LET variable = <expr> e.g. LET A$="Hello".
variable = <expr> e.g. A=5
LIST [start],[end] e.g. LIST or LIST 10,100 ※1行づつ表示します。"Fn"キーで次行を表示
RUN [lineNumber] "Esc"キーでプログラムの実行を停止
GOTO lineNumber
REM <comment> e.g. REM ** My Program ***
STOP
CONT (continue from a STOP)
INPUT variable e.g. INPUT a$ or INPUT a(5,3)
IF <expr> THEN cmd e.g. IF a>10 THEN a = 0: GOTO 20
FOR variable = start TO end STEP step
NEXT variable
NEW
GOSUB lineNumber
RETURN
DIM variable(n1,n2...)
CLS
PAUSE milliseconds
POSITION x,y sets the cursor
PIN pinNum, value (0 = low, non-zero = high)
PINMODE pinNum, mode ( 0 = input, 1 = output)
LOAD (from internal EEPROM)
SAVE (to internal EEPROM) e.g. use SAVE + to set auto-run on boot flag(internal EEPROM only)
LOAD "filename", SAVE "filename, DIR, DELETE "filename" if using with external EEPROM.
DIR - EEPROMに保存されているファイルリストを表示
INKEY$ - (現在のバージョンでは未対応)
RND - random number betweeen 0 and 1. e.g. LET a = RND
? - フリーエリア表示
・関数
LEN(string) e.g. PRINT LEN("Hello") -> 5
VAL(string) e.g. PRINT VAL("1+2")
INT(number) e.g. INT(1.5)-> 1
STR$(number) e.g. STR$(2) -> "2"
LEFT$(string,n)
RIGHT$(string,n)
MID$(string,start,n)
PINREAD(pin) - see Arduino digitalRead()
ANALOGRD(pin) - see Arduino analogRead()
SIN(n)三角関数はラジアン
COS(n)
TAN(n)
EXP(n)
SQRT(n)
・外観
・動画
https://www.youtube.com/watch?v=o2Vc1l_HEts
※追記)オリジナルサイトではArduinoBASICになってますが、Arduinoは登録商標なのでArduino用という表現にしています。