写真のように細いワイヤを専用の工具でピンに巻きつけて配線します。工具がよくツールボックスに残っていたと感心しています。長年使っていなかったので少々錆びついていましたが、軽く拭き取ったら使えました。
2020年8月23日日曜日
久しぶりにワイヤラッピングで遊ぶ
写真のように細いワイヤを専用の工具でピンに巻きつけて配線します。工具がよくツールボックスに残っていたと感心しています。長年使っていなかったので少々錆びついていましたが、軽く拭き取ったら使えました。
2020年8月20日木曜日
XIAOにはEEPROMが無かった
こんな感じでブレッドボードに挿して、写真送りや戻り、自動送り時の時間設定、ファイル名でのソートなどの設定ができるようにしてみました。タクトスイッチと大差無い値段なので気軽に使えます。チャタリングもありません。まぁ、余っていたから使ってみたのですが。
設定した情報をEEPROMに格納しようと思い、#include <EEPROM.h> したら無いよと言われてしまいました。調べたらSeeeduino XIAOには EEPROM が載って無かったと言うオチ。前にもこんな事があった ことを思い出しました。
2020年8月15日土曜日
XIAOと1.8インチ小型液晶で小型フォトフレーム
10連休もあっという間に過ぎて、明日は最終日です。毎日の猛暑で家の雑用ToDoリストは、半分くらいしかこなせませんでした。毎日、午前中の作業でヘタバッテしまい午後は昼寝でした。昼食をとると条件反射のように昼寝してしまいます。こんなことで来週から仕事に復帰できるのか心配になってきました。
あまりの暑さのため物理的な工作はできず、エアコンの効いた部屋でプログラム書きをするのが精いっぱい。前回の記事 で書きましたが、少しだけ大きな1.8インチカラー液晶(160x128)にSDカードスロットが付いていたので、小さなフォトフレーム(デジタルサイネージ)を作ってみました。
SDカードに格納した bmpファイルを順次表示するという単純なものです。制御は Seeeduino XIAO です。使う部品は液晶モジュールとXIAO、SDメモリカードだけ(他にブレッドボードとジャンパワイヤは必要ですが)。手持ちのSDカードを探したら16MBという骨董品のようなカードが見つかりました。Canonのラベルが付いていたので、その昔キヤノンのデジカメに付いてきたものだと思います。撮影のために液晶モジュールをブレッドボードから外してありますが、ブレッドボードに挿したまま、SDカードの抜き差しができます。SDカードはスロットから結構出っ張る。短いSDカードってあるのかな? microSDカードのアダプタなら短いものがあった。
処理は、SDカードのルートディレクトリに置いてある拡張子がbmpのファイルを順次読んで表示しています。XIAOはRAMが32KBしかないので、画像1枚をRAMに置いておくことができません。SDカードから読みながら順次液晶モジュールに転送して表示します。下の写真は空がモアレがかっていますが、撮影したiPhoneのカメラとの相性のように思います。肉眼だともう少しキレイ。
表示するファイル名の長さは拡張子を含めて31文字までにしています。また、ディレクトリを順次読んでいますので、表示順序はディレクトリへの格納順かと思います。ファイル数が少なければディレクトリを丸ごと読んで、ファイル名でのソート表示などもできます(プログラムを書けば)。
bmpファイルのサイズは液晶画面と同じ160x128pixelで、フォーマットはWindows形式の24ビットカラーです。16ビットカラーだとライブラリが対応していないようで読めませんでした。bmp拡張子でも読めないファイル形式の場合は、以下のようなメッセージを出すようにしています。表示されている画像は、ひとつ前の画像です。
// 2020.08.15 naka
// Small Digital Photo frame (Signage)
//
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SdFat.h> // SD card & FAT filesystem library
#include <Adafruit_ImageReader.h> // Image-reading functions
#define SD_CS 7 // SD card chip select
#define TFT_CS 4 // TFT select pin
#define TFT_DC 6 // TFT data/command pin
#define TFT_RST 5 // Or set to -1 and connect TFT RST to Arduino reset pin
#define FILENAME_SIZE 32
#define B_SIZE 32
SdFat SD; // SD card filesystem
Adafruit_ImageReader reader(SD); // Image-reader object, pass in SD filesys
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
File root;
void setup(void) {
tft.initR(INITR_BLACKTAB); // Initialize screen
tft.fillScreen(ST77XX_WHITE);
tft.setRotation(3);
if(!SD.begin(SD_CS, SD_SCK_MHZ(10))) {
message("SD card error");
while(1);
}
root = SD.open("/"); // rootにあるファイルのみ表示対象
}
void loop() {
char filename[FILENAME_SIZE];
char buff[B_SIZE];
if (get_next_file_name(root,filename,FILENAME_SIZE)) {
ImageReturnCode stat = reader.drawBMP(filename, tft, 0, 0);
if (stat) { // 読めないbmpファイルフォーマット
sprintf(buff,"Not support %s",filename);
message(buff);
}
}
else {
root.rewind(); // 最後のファイルまで読んだので最初に戻る
}
delay(3000); // 3秒表示
}
int get_next_file_name(File dir,char *buff,int size) {
File entry;
while(1) {
entry = root.openNextFile();
if (!entry) { // お終い
return(0);
}
if (!entry.isDirectory()) { // ファイルなら拡張子を確認してbmpならbreak
entry.getName(buff,size);
String fileName = String(buff);
String ext = fileName.substring(fileName.lastIndexOf('.'));
if (ext==".bmp" || ext==".BMP") {
break;
}
}
else { // dirならクローズして次のエントリ
entry.close();
}
}
entry.close();
return (1);
}
void message(char* text) {
tft.fillRect(0,tft.height()-71, 159,10, ST77XX_WHITE); // 消去
tft.setCursor(3,tft.height()-70);
tft.setTextColor(ST77XX_RED);
tft.setTextWrap(true);
tft.setTextSize(1);
tft.print(text);
} 100均で買える小さな写真立てに組み込んだら見栄えもよさげですね。液晶モジュール(Aliexpress)とXIAO(秋月電子)、写真立てを合わせて1,000円以下で作れる工作です。夏休みの工作に如何ですか、といってもAliexpressは注文してから1か月くらいかかるので夏休み中には間に合わないか。
2020年8月12日水曜日
温度コントローラ苦戦中
1.8インチ 128x160 Pixelで、載っているチップやピン配は以前の1.44インチと同じでした。裏面にはSDカードスロットも付いていますので、これ1枚とArduinoで、デジタルフォトフレームが作れます。ちょっと画面が小さいけど。今度試してみます。
Arduino のライブラリは、Adafruit_ST7735 と Adafruit_GFXで1.44インチのときと同じものです。初期化の引数を変えて、LCDの向きを変えたら差し替え完了です。160pixel側を時間軸に使いましたので、多少微調整。
いよいよSSRを繋いで、温度制御の確認です。このSSRの制御側はArduinoのピンで直接制御できました。測ってませんが仕様だと10mA程度のようです。
オーブントースタの庫内温度を測って制御しようとしましたが上手くいきません。センサの温度上昇が(下降も)、実際の温度に全く追従しません。以下のグラフの赤い線がセンサ測定温度です。
こうなる事はヒートガンで温めた実験から薄々気付いていたのですが、こんなに追従しないとは思いませんでした。原因は今回使っている熱電対がケースに収められていて熱電対本体(2つの合金が溶着している部分)に中々熱が伝わらないためだと思います。熱容量が大きいため温まり難く冷めにくい状況ですね。
そこで、先ほどAliexpressで熱電対が剥き出しのものを注文しました。送料込みで60円程度です。どうやって利益を出しているのか? 安かったので念のため2つのショップに注文。両方届かない可能性は低いと思うので。
2020年8月7日金曜日
久しぶりにベンジャミンの実
実がなるということは、根詰まりしているのかもしれない。そういえばしばらく植え替えていません。夏休み中になんとかしましょう。ToDoリストに追加しておきました。
2020年8月4日火曜日
無線LAN中継機が50℃越え
ちょっとヤバイ状況ですね。樹脂の筐体を通してこれだけ熱が伝わってくるのだから、内部はどれだけ高温なのか? ヒートシンクを付けてなかったら熱暴走しているかもしれない。
仕事で使っているMacBookProは外部ディスプレイを繋ぐとパームレストが熱くなります。一応、風通しのために、ツーバイフォーの切れ端を噛ませて斜めにしていますが熱いです。でも測ってみたら38℃と体温より少し高いだけ。体温より2℃位高いだけで熱く感じるのだからヒトの指先センサは大したものだ。
タッチバーの温度が高いです。外付けキーボードを使っているので、タッチバーは使えないのですがオフにできるのかな? 今、思いついた。
明日はもっと気温が上がる予報が出ています。中継機が持ち堪えるか心配です。もし、これで熱暴走したら電動ファンで冷やすことを考えます。
2020年8月2日日曜日
温度コントローラのUI
UIがほぼできたので次は温度制御です。単純オンオフ制御でいけるか、PI制御が必要か、カットアンドトライです。多分D制御はいらないと思っていますが、どうなるか。
お盆休みは9連休ですが、帰省も旅行もしない(できない)予定なので工作が進むかと期待しています。