UEW(ポリウレタン線)の許容電流

UEW(ポリウレタン線)に流せる電流について、とくに規格があるわけでもないようですが、一般的にだいたい φ0.2mmで100mAφ0.5mmで600mA 程度とされていることが多いようです。ここから逆算すると、1mm² あたり3A くらいが目安ということになります。

線径、AWG線号と許容電流の目安を下表に示します。
(あくまで根拠レスの参考値と考えてください。)

線径 AWG 許容電流
0.2mm 32 100mA
0.26mm 30 150mA
0.29mm 29 200mA
0.32mm 28 240mA
0.4mm 26 380mA
0.5mm 24 600mA

パソコン版Googleドライブのキャッシュファイルをクリーンアップ

やりたいこと

パソコン版Googleドライブ(Googleドライブがローカルドライブのように見えるやつ。利用には Google Workspace (GWS) 導入が必要。)は便利だけど、キャッシュファイルがCドライブを圧迫しがち。これをクリーンアップしたい。

キャッシュファイルはどこにあるか?

下記のような場所にある。

C:\Users\ユーザー名\AppData\Local\Google\DriveFS

クリーンアップの手順

  • まず、Googleドライブの同期が完了していることを確認する。
    (ファイルのアイコンに雲マークが付いていること)

  • Googleドライブのアプリを終了する。
    (通知領域のGoogleドライブのアイコンをクリック→歯車のアイコンをクリック→終了)

  • 上記のキャッシュファイルのフォルダ(DriveFS)を削除
  • Googleドライブのアプリを起動する。
    (タスクバーの検索ボックスで google drive と入力すれば見つかる)

  • 起動時にログインを求められたらブラウザからログインする。

(備忘) 箱の折り方

よく忘れるのでメモ。
箱の折り方はいろいろあるけど、いちばん分かりやすいタブ付きのやつ。

  1. 4つ折りにする。
  2. つぶし折りにして5角形にする。(頂点を下向きに)
  3. 両サイドを内向きに折り込む。(側面になる)
  4. 上辺を下向きに折り込む。 (タブになる)
  5. 下部の三角形を上向きに折って折り目をつける。(底面になる)
  6. 開く。 (完成)

【参考】

チェス盤風の将棋盤になるタオル

チェス盤風の将棋盤になるタオルをデザインしてみました。
符号と角の利きが見やすくなってます。(写真は後手番目線)


特長

  • 市松模様なので角の利き(斜めのライン)が見やすい。
  • 先手側からも後手側からも符号(座標)が見やすい。
  • タオル地なのでシワになりにくく、駒が拾いやすい。


pixivFACTORYで制作

タオルはpixivFACTORYで制作しました。

サイズ大のタオルで 37 cm x 40cm。標準的な将棋盤の寸法は 33.3cm × 36.4cm なのでそれより大きいのですが、印刷の誤差の都合で余白を取る必要があり、また上下左右に符号を入れたため、マス目のサイズは標準的な将棋盤より少し小さめになりました。そのため上の写真のようにややタイトな感じはありますが普通サイズの駒でも使えます。

データ

符号の文字のフォントには、やさしさゴシックボールドを使用しました。

Seeed XIAO BLE nRF52840を試す

1. Seeed XIAO BLE nRF52840とは

BLEタイプのXIAO。


2. Arduino開発環境

上記のSeeed Wikiにしたがってセットアップする。

2.1 ボードの追加
  • Arduino IDEの「ファイル」>「環境設定」>「追加のボードマネージャのURL」に下記URLを追加。
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
  • 「ツール」>「ボード」>「ボードマネージャ」で 「seeed nrf52」を検索。
  • 「Seeed nRF52 Boards」と「Seeed nRF52 mbed-enabled Boards」が見つかる。ここでは後者を選択。
  • ボードとシリアルポートを選択。

※ シリアルポートが認識しないときは、USBコネクタの横の小さなリセットボタン(RSTのシルクあり)をダブルクリックする。

2.2 ライブラリの追加
  • 「スケッチ」>「ライブラリをインクルード」>「ライブラリを管理」で「ArduinoBLE」を検索してインストール。
2.3 (捕捉) ボードとライブラリについて

ボードの選択が Seeed nRF52 Boards か Seeed nRF52 mbed-enabled Boards かで利用できるBLEライブラリが異なる。 Seeed nRF52 Boards では Adafruit Bluefruit nRF52 Libraries が、Seeed nRF52 mbed-enabled Boards では ArduinoBLE が利用できる。前者のほうがサンプルが豊富だが、ここではシンプルで分かりやすかった後者をまず使ってみる。

ボード BLEライブラリ
Seeed nRF52 Boards Adafruit Bluefruit nRF52 Libraries
Seeed nRF52 mbed-enabled Boards ArduinoBLE

3. Lチカ

3.1 オンボードのLED

基板上に3色LEDがある。

void setup() {
}
void loop() {
  digitalWrite(LEDB, HIGH);
  digitalWrite(LEDR, LOW);
  delay(500);
  digitalWrite(LEDR, HIGH);
  digitalWrite(LEDG, LOW);
  delay(500);
  digitalWrite(LEDG, HIGH);
  digitalWrite(LEDB, LOW);
  delay(500);
}
3.2 NeoPixel

NeoPixel(WS2812B)のドライブにはAdafruitのライブラリが利用できる。
「スケッチ」>「ライブラリをインクルード」>「ライブラリを管理」で「Adafruit NeoPixel」を検索してインストール。
下記は、D0ピンで12個のNeoPixelを制御するスケッチ。

#include <Adafruit_NeoPixel.h>
#define PIN D0 
#define NUMPIXELS 12

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
uint16_t colorH = 0; // 色相(HSVのH)

void setup() {
  pixels.begin(); 
}

void loop() {
  colorH = colorH + 1;
  for (int i = 0; i < NUMPIXELS; ++i) {
    // H(色相), S(彩度), V(明度)を制御
    pixels.setPixelColor(i, pixels.ColorHSV(colorH, 255, 255));
  }  
  pixels.show();
  delay(5);
}


4. BLE

4.1 スケッチ

BLEで基板上の赤色LEDをON/OFFするサンプルを試す。
「スケッチ例」>「ArduinoBLE」>「Peripheral」>「LED」を開く。
ただし、LEDのON/OFFが逆なので下記のように修正する。
また、ターミナルでシリアルポートを開かないと動作が始まらないことにも注意。

        if (switchCharacteristic.value()) { 
          Serial.println("LED on");
          digitalWrite(ledPin, LOW);     // LOWでON
        } else {
          Serial.println(F("LED off"));
          digitalWrite(ledPin, HIGH);    // HIGHでOFF
        }
4.2 スマホで動作確認

nRF ConnectやLightBlue等の汎用のBLEツールで動作確認する。ここではnRF Connectを使用した。
まずデバイスをスキャンする。このサンプルではデバイス名は「LED」と表示される。見つかったら接続する。

次にサービスを選択する。サービスのUUIDはスケッチの20行目で "19B10000-E8F2-537E-4F6C-D104768A1214" と定義している。表示名は「Unknown Service」となる。

するとキャラクタリスティックが表示される。キャラクタリスティックのUUIDはスケッチの23行目で "19B10001-E8F2-537E-4F6C-D104768A1214" と定義している。表示名は「Unknown Characteristick」となる。

「↑」のボタンを押すと Write value の画面になる。0x01 を SENDすると赤色LEDが点灯する。0x00 を SENDすると消灯する。またシリアルポートにもログが出力される。

VB6のプロジェクトをVB.NETに変換

はじめに

Visual Studio 2005/2008 にはVB6のプロジェクトをVB.NETに変換する機能 (「アップグレード」と称する) があったが、現在のVisual Studio 2019 にはない。
そこで、VS2008をインストールし、いったんVB6のプロジェクトをVS2008で開いてアップグレードしてから現行のVS2019で開いてアップグレードするという2段階の手順を踏む。VS2008→VS2019に関しては特に大きな問題はない。VB6→VS2008のアップグレードについて次に述べる。

環境の準備

(1) Visual Studio 2008 Expressのインストール

2022年9月現在、すでにVisual Studio 2008 ExpressのダウンロードはMicrosoftのサイトからはできなくなっている。(たぶん)
ただし、Visual Studio サブスクリプションからダウンロードすることができる。無償の「Dev Essentials」に登録すればダウンロードできた。下記ページで「Visual Studio Express 2008」と検索すれば「Visual Studio Express 2008 with Service Pack 1」が見つかる。

https://my.visualstudio.com/Downloads

(2) VB6またはVB6ランタイムのインストール

アップグレードを実行するPCにはVB6のランタイム(DLLやOCX)がインストールされている必要がある。ランタイムがないと、プロジェクトのアップグレード時にエラーが発生する。
もしもVB6がインストールされていても「MSCOMCTL.OCXが見つからない」などエラーが出る場合にはランタイムのバージョンが古いので最新のものに更新する。下記の更新プログラムをインストールすると MXCOMCTL.OCX および COMCTL32.OCX が更新される。ただし、VB6SP6がインストールされている必要がある。

VB6ラインタイムのみをインストールする場合は、Vectorなどで配布されているものをインストールする。いくつか見つかるが、下記一つ目の XTRM Runtime がおすすめ。

VB6からVB.NETへの変換

  • VS2008 (VIsual Basic 2008) を起動する。
  • [ファイル]>[プロジェクトを開く] からVB6のプロジェクトファイル(.vbp)を開く。
  • [Visual Basic アップグレード ウィザード] が起動してプロジェクトとソースの変換がおこなわれる。
  • VS2008を閉じて、変換されたプロジェクトのソリューション(.sln)をVS2019で開く。
  • プロジェクトをビルドするとたいてい大量のエラーが出る。

ソースの修正

エラーが出やすいのは主にUI関連である。特に下記の2つは大きく書き直さないといけない。

  • コントロール配列がVB.NETでは廃止になった
  • PictureBoxの互換性が無い

また、Asなしの変数宣言で型があいまいだと大量の警告コメントがソース中に書きこまれる。変換前のVB6のソースを修正してなるべく適切な型で変数を宣言したほうが良いかも。
詳しくは下記の記事を参照。

参考記事



VB.NET → C# 移植メモ

C#への自動変換

方法1はソースレベルでの変換のため可読性は高い(コメントも保持される)が、ビルドエラーが多発する。On Error Goto文やLike演算子などC#がサポートしない文法を用いている箇所はエラーになる。VBでは許される明示的でない型変換などもエラーになるので修正が必要になる。フォームデザイナによるフォームのデザイン編集はいちおう維持されるが、かなり修正が必要 (後述)

方法2は逆コンパイルのため等価なソースにはなるが可読性は低い。当然ながらコメントは消える。ILからの逆コンパイルのため、変数名などは維持される。フォームデザイナでフォームのデザインを編集できなくなる。またリソースの参照情報も失われる。

いずれも一長一短であり、完璧な変換にはならない。

SharpDevelopでプロジェクトをコンバート

  • SharpDevelopオープンソースの.NETのIDE
  • VBからC#へのコンバート機能がある(あった)。
  • ただし最新版ではコンバート機能がなくなっているので、バージョン4.4を用いる。
  • バージョン4.4を下記からダウンロードしてインストールする。

  • 変換元のソリューションファイルとプロジェクトファイルのバージョン番号を改竄する。(古いソフトのため最新のVisualStudioで作成されたソリューション/プロジェクトを開くとエラーになる)

ソリューションファイル

VisualStudioVersion = 16.0.29409.12  ← 16を12に改竄する

プロジェクトファイル

<Project ToolsVersion="15.0" …  ← 15を4に改竄する
  • SharpDevelop 4.4 でソリューションを開き、[Project]→[Convert]→[From VB.NET to C#]
  • 同じソリューション内にC#のプロジェクトが生成される。
  • SharpDevelopを終了し、ソリューションと変換前後のプロジェクトの改竄を元に戻す。
  • VisualStuduoでソリューションを開き、ビルドしてみる。(たぶんエラーが多発する。)
  • あとは手動で修正する。

【参考記事】

コンバートの前に

VB.NETのコードに Option Explicit On を追加して、曖昧な型を使用している箇所をチェックしてあらかじめ修正して動作確認しておいたほうがコンバート後の修正が減ってラクかもしれない。

コードの修正

型変換
  • VBでは数値型⇔文字列型の暗黙の変換が許されるが、C#ではエラーになる。
  • long型⇔int型の暗黙の変換すらC#ではエラーになるので、明示的にキャストする。
  • 代入文だけでなく、比較演算子でも型の不一致はエラーになる。
動的型
  • VBのObject型は動的型のような呼び出しができるが、C#のobject型ではエラーになる。
    • 動的な呼び出しが必要ならobject型のかわりにdynamic型を用いる。
    • そうでないなら適切な型宣言をするか、var(型推論)で宣言する。
    • VBでは変数の宣言時に型を省略するとObject型になることにも注意。
    • Option Strict OnであればVBでもエラーになる。
ループ変数の型
  • VBではfor文やforeach文のループ変数の型を省略できるがC#では明示しなければならない。
Exit ForとExit Do, Continue ForとContinue Do
  • VBではループが入れ子のとき、 Exit ForとExit Doはそれぞれ独立。
  • C#ではループが入れ子のとき、breakはループの種類によらずいちばん内側のループから脱出。
  • VBのContinue For, Continue Do と、C#のcontinueについても同様。
On Error GoTo文
  • On Error GoTo文を用いたエラー処理は try / catch文による構造化例外処理に書き換える。
引数の省略
  • VBでは Hoge(a, ,b) のように省略可能な引数は途中の引数であっても省略できる。
  • C#では通常の引数(位置引数)は途中の引数を省略できない。
  • 途中の引数を省略したい場合は名前付き引数を用いる。 Hoge(A:a, B:b)
論理演算子と ビット演算子
Like演算子
配列の宣言
  • VBでは添字の最大値を指定して宣言する。
  • C#では要素の数を指定して new する。 (移植するには+1する)
ラベル
  • C#ではラベルの後に何も文がないとエラーになる。
  • ラベルのあと何もしない場合はセミコロンだけの空文を入れる。
エスケープシーケンス
  • VBの文字列リテラルにはエスケープシーケンスは無い。vbNewLineなどの定数を用いる。
My

フォームデザインの修正

フォームのソースは *.cs と *.Designer.cs に分けて変換されるが、変換に不具合があるのかフォームデザイナで開くと「データが失われる可能性を防ぐため、デザイナーの読み込み前に以下のエラーを解決する必要があります。 」と表示される。
*.Designer.cs をエディタで開いてみると、コントロールの宣言が奇妙なことになっているので修正する。以下に修正の例を示す。ただし修正をするとイベントハンドラの紐づけが失われるので、再設定する必要がある。
【修正前】

private System.Windows.Forms.Button withEventsField_btn_Cancel;
public System.Windows.Forms.Button btn_Cancel {
    get { return withEventsField_btn_Cancel; }
        set {
            if (withEventsField_btn_Cancel != null) {
                withEventsField_btn_Cancel.Click -= btn_Cancel_Click;
            }
        } …(中略)...
}

【修正後】

private System.Windows.Forms.Button btn_Cancel ;