2023年12月 2日 (土)

WCH-LinkE とWCH-Link は別モノである

20231202img1082
 2週間前にAliExpressで買ったプログラマ・デバッガが意外に早く中国から届いたので,さっそく先に届いていたCH32V003ボードに接続してみました。先人の教えに従って環境を整え,Arduino IDEでLチカのスケッチを書き込もうとしたら,次のようなエラーが出ました。

Error: if your chip is CH32V00X,WCH-Link-CH549 does not support this chip, please use WCH-LinkE

「どういうこと?コレ,WCH-LinkEじゃないの?」と,老眼でよく見えないから虫眼鏡を使って見てみると・・・
20231202img1083
うむ,確かに WCH-Linkと書いてあるようだが,「E」がついてるのとついてないのは何か違うのか?
WVH-LinkE の画像検索をしてみると,コレ↓ がそうらしい。
20231202wchlinke
 こっちはWCH-LinkEと書いてあるな。どっちも透明プラケースに入ったUSBドングルで そっくりだけど これはタクトスイッチが2個ついてるし(プラケースに入ってるから押せないよなあw),確かに別モノっぽい。
さらに検索したらこんな表を見つけた。
Supportedchip

 おいおい,やっぱり「E無し」の WCH-Linkは,CH32V003をサポートしてないんだ・・・。しかし,名前も見た目もソックリすぎるだろ,これ。多くの人が僕と同じ失敗をしてるんじゃないの?
くやしいけど,別のセラーに「E付き」のWCH-LinkE注文しました。また,2~3週間待たないとねw

| |

2023年12月 1日 (金)

Arduinoで作ろう(63) UNO R4 WiFiでスクロールNTP時計

 Arduino UNO R4 WiFi を手に入れました。
2773981_2
 なんと言っても目を引くのはオンボードの 12×8 LEDマトリクスじゃないでしょうか。あと,ESP32-S3モジュールね。なんだか夢が広がりますなあ(^^)
 pinoutはこんな感じ ↓
Abx00087pinout

 せっかくESP32モジュールとLEDマトリクスを積んでるんだから,WiFiでネット接続してNTPサーバから時刻を取得してLEDマトリクスでスクロールする時計を作らないとね。( また時計かw )
んで,とりあえずできました。ライブラリは新たに2つくらい入れたんだったかな。NTPClientライブラリArduinoGraphicsライブラリです。たぶん。
Shotcut_00_01_54_087

// Arduino UNO R4 WiFi スクロールNTP時計
// NTPClient library (https://github.com/arduino-libraries/NTPClient)
// ArduinoGraphics library (https://github.com/arduino-libraries/ArduinoGraphics)


#include "RTC.h"
#include "NTPClient.h"
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
#include "WiFiS3.h"
#include "WiFiUdp.h"
char ssid[] = "ここに無線LANのSSIDを書く" ;
char pass[] = "ここにパスワードを書く" ; // 
int wifiStatus = WL_IDLE_STATUS;
WiFiUDP Udp;
NTPClient timeClient(Udp);
ArduinoLEDMatrix matrix;

void printWifiStatus() {
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
}

void connectToWiFi(){
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
while (true);
}

while (wifiStatus != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
wifiStatus = WiFi.begin(ssid, pass);
delay(10000);
}

Serial.println("Connected to WiFi");
printWifiStatus();
}

void setup(){
Serial.begin(9600);
while (!Serial);

connectToWiFi();
RTC.begin();
matrix.begin();
Serial.println("\nStarting connection to server...");
timeClient.begin();
timeClient.update();
auto timeZoneOffsetHours = 9;
auto unixTime = timeClient.getEpochTime() + (timeZoneOffsetHours * 3600);
Serial.print("Unix time = ");
Serial.println(unixTime);
RTCTime timeToSet = RTCTime(unixTime);
RTC.setTime(timeToSet);
RTCTime currentTime;
RTC.getTime(currentTime);
Serial.println("The RTC was just set to: " + String(currentTime));
}

void loop(){
char buff[16] ;
const char *wd[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
RTCTime currentTime;
RTC.getTime(currentTime);
sprintf(buff, " %04u/%02u/%02u(%s) ", currentTime.getYear(), Month2int(currentTime.getMonth()), currentTime.getDayOfMonth(),wd[(int)currentTime.getDayOfWeek()]) ;
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(50);
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(buff);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();

sprintf(buff, " %02u:%02u:%02u ", currentTime.getHour(), currentTime.getMinutes(), currentTime.getSeconds()) ;
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(50);
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(buff);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();
}

 サンプルスケッチを参考にして,ツギハギで作ったので あんまり美しいコードではないですが,とりあえず動いてます。Arduino IDE のシリアルモニタで,無線LANアクセスポイントに接続したことを確認できるようになってます。まあ確認しなくても大丈夫ですが。

  

| |

2023年11月28日 (火)

ドライアイス不要の霧箱 (4)

Shotcut_00_02_12_267
 ダイソーで売ってる保冷剤(税込110円)を使って霧箱を作ってみました。
東京学芸大の窪田美紀先生・鎌田正裕先生がご考案になったもののようですが,参考にしたのはこのPDF
今まで作ってきた「ドライアイス不要の霧箱」のうちで最も安価なものです。これはオススメ。
Shotcut_00_00_01_867
Shotcut_00_00_29_333
 アルミ板は片面を黒く塗装し,大型のダブルクリップを使って保冷材に固定します。これを冷凍庫に入れて,しっかり凍らせます。うちの冷蔵庫はPanasonicの普通のものですが,冷凍庫は-18℃まで冷やせます。
Shotcut_00_01_35_067
 ダイソーのコレクションケースで作ったチャンバの内側にフェルト布を貼って,エタノールで濡らします。
Shotcut_00_02_53_900
 凍らせた保冷剤上のアルミ板に線源を乗せてチャンバをかぶせ,チャンバの上面をお湯で温めて2~3分待ちます。チャンバ内のエタノール気体が過飽和状態になると,放射線の飛跡が見えるようになります。

ドライアイス不要の霧箱(1)
ドライアイス不要の霧箱(2)
ドライアイス不要の霧箱(3)

  

| |

2023年11月18日 (土)

Arduinoで作ろう(62) ESP8266+SSD1306でNTP時計

Esp8266ssd1306

 昨日AliExpressから届いたマイコンボードのうち,OLEDディスプレイ付きのESP8266開発ボードでNTP時計を作ってみました。
OLEDはSSD1306なので,以前も使ったことのあるこのライブラリでいきます。
SSD1306はI2Cでつながってるのですが,よくある接続とは違っててSDAがGPIO14,SCLがGPIO12につながってるので,明示的に指定してやります。あとは,以前作ったNTP時計のスケッチをちょいと書き換えたら完成です。

Cimg8446

スケッチはコレ ↓ です。

//ESP8266+SSD1306(OLED display) NTP時計

 

#include "SSD1306Wire.h" //https://github.com/ThingPulse/esp8266-oled-ssd1306
#include "ESP8266WiFi.h"
#define SDA 14 //SDA-GPIO14
#define SCL 12 //SCL-GPIO12
#define JST 3600 * 9
SSD1306Wire display(0x3c, SDA, SCL);
const char* ssid = "無線LANのSSID";
const char* password = "パスワード";

 

void setup() {
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(0, 0, "Wi-Fi connecting..." );
display.display();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(10);
}
display.clear();
display.drawString(0, 0, "Connected to ");
display.drawString(0, 13, "SSID: " + WiFi.SSID());
display.drawString(0, 24,"IP address: " + WiFi.localIP().toString());
display.display();
configTime(JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
delay(5000);
}

 

void loop() {
display.clear();
static const char *wd[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t t = time(NULL);
struct tm *tm = localtime(&t);
char buff[16];
sprintf( buff, "%04d/%02d/%02d(%s)",tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,wd[tm->tm_wday] );
display.setFont(ArialMT_Plain_16);
display.drawString(0,0,buff);
sprintf( buff, "%02d:%02d:%02d",tm->tm_hour,tm->tm_min,tm->tm_sec );
display.setFont(ArialMT_Plain_24);
display.drawString(12,24,buff);
display.display();
}

  

| |

2023年11月17日 (金)

【独身の日】AliExpressで散財(?)

 中国では,11月11日は『独身の日』と呼ばれていて,毎年ネット通販各社による大規模なセールが開催されています。
中国版楽天市場みたいなAliExpressでも独身の日セールが行われていたので,通常より安くなってるマイコンボード等の電子パーツを買ってみました。(下の写真,赤字は送料込みの値段です)
そしたらなんと,11日に買った上から3つが今日届きました。中国 深圳市から送られてきてるんだけど,いつもより断然早くてびっくり。

20231117

 ところが,今日届いたマイコンボードCH32V003は,別売のプログラマ・デバッガWCH-LinkEが必要なことに気づいて追加注文。でも,残念なことに今度は到着予定日が年末~年始になってました。秋月で買えばよかったかなあw

| |

2023年10月26日 (木)

レンツの法則のデモンストレーション

 ぼんやりAliexpressを見てたら,こんなものを発見しました。
「Lentzの爪のデモ」なんて わけの分からないことが書いてありますが,どういうことなんでしょうなw
law → claw → 爪 という順序で間違って翻訳されたような気がしますが,まあそんなことはどうでもよろしい。
これはレンツの法則のデモンストレーションとしてシンプルですぐれた教材ですよね。Aliexpressで買うと高いので,うちにある材料で作ってみました。

Img0980
ホームセンターで売ってる幅10mmのアルミ平棒を曲げて,こんな具合にでっちあげました。真ん中の軸受けは,アルミ製の鉛筆キャップで作ってあります。

Img0982
一方はちゃんと輪にして,

Img0981
もう一方は輪の一部が切れています。ねじ類は磁石にくっつかないように真鍮製を選びました。

ネオジム磁石のような強力な磁石を近づけてやると,ちゃんと輪になってる方は外から入ってくる磁場の変化を妨げる向きに誘導電流が流れて動きますが,輪が切れてる方は反応しません。カンタンな構造だけど,こういうのが高校物理の授業に必要なんですよね。

  

| |

«100均セリアの「3D投影機工作キット」を作ってみた