8251561 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

thunderbolt!

thunderbolt!

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

カレンダー

バックナンバー

キーワードサーチ

▼キーワード検索

2025.05.13
XML
テーマ:私のPC生活(7488)
カテゴリ:家電
昨日の続き。

パソコンでアナログ電圧測定をしたい。VB.netでデータ取り込み・処理をしたい。格安で。
ということでArduinoを使ってアナログ入力をすることにしました。


アルドゥイノ Arduino をはじめよう第3版対応 電子工作 プログラミング スターターキット PDF教本ダウンロード特典付き アルデュイーノ UNO R3 初心者の方のための学習キット 知育玩具 STEM教育 大量注文可

とりあえず動くようになったので、コードを書いていきます。

アナログ入力で良く見かけるスケッチ(Arduinoのプログラム)はこんな感じ。
----
void setup(){
Serial.begin(9600);
}

void loop(){
Serial.println(analogRead(A0));
delay(1000);
}

----
え?これだけ? 超簡単じゃんArduinoすげえな!

void setup()とvoid loop()は必須の関数で、setupで電源投入時の初期設定をしたのち、loop内の処理が延々と繰り返されます。
つまり上のコードが意味するのは、電源投入時にシリアル通信を設定したあと、A0ピンからアナログ入力を読み、値をシリアルポートに書き出し、1秒待つ、というのを電源オフまで延々と繰り返す、ということです。
ArduinoはA0~A7まで8本のアナログ入力を使うことができます。

実行すると、A0ピンの読み値が1秒毎にシリアルポートに書き出されます。
IDEのツール → シリアルモニタを立ち上げておくと読み値がどんどん表示されていきます。
おもしれー


ただ、私がやりたいのは、こういう連続データ転送じゃないんですよ。
これだとシリアルポートの受信バッファが埋まってしまいますし、いつのデータかわからない(Arduinoに時計はない)です。
VB.netで、自分の好きな任意のタイミングで測定をしたいわけです。


解決方法は非常に簡単で、「PC側からコマンドを送ったときだけデータを返す(それ以外は待機)」ようにするだけです。
まずはArduinoのスケッチ

----
void setup(void){
Serial.begin(9600);
}
void loop(void){
while(Serial.available()>0){
String cmds = Serial.readStringUntil('\n');
if(cmds =="R"){
Serial.println(analogRead(A0));
}
}
}

----
シリアルポートになにか文字が入ってきた(Arduinoの受信バッファになにかある)とき、その文字が"R"ならアナログ入力A0の読み値を書き出す
ということです。


制御するvb.net側はこんな感じですかね。
SerialPort1.Open()
        SerialPort1.WriteLine("R") 'コマンドを送る
        System.Threading.Thread.Sleep(100) 'ちょっと待つ
        label1.Text = SerialPort1.ReadLine()
SerialPort1.Close()


Ardino側ではprintlnを使っているので改行コード付きで送信されており、ReadLineで読めば改行文字までの文字列が取得されます。
超簡単じゃね?



ちょっとひねって、Arduino側を
if(cmds =="0"){
Serial.println(analogRead(A0));
}else if(cmds =="1"){
Serial.println(analogRead(A1));
  }

みたいにしておけば、vb.net側で"0"や"1"を送出することで出力チャンネルを指定することもできます。

また
Serial.print(5000.0*analogRead(A0)/1023);
としておけば、電圧(mV単位)に変換したものを返すこともできます。
ちなみにArduinoは10ビット分解能で、入力レンジは0~5Vです。

いままでArduino面倒くさそうだなーと思ってたけど、とんだ食わず嫌いでしたね。

市販品でもAD変換ユニットは売られていますが、数万円と高価な上、専用ドライバのインストールが必要だったりします。
Arduinoならシリアル通信さえできればどんな機械でも動きますし、何より安価です。

Arduino用(もしくはラズパイ用)にセンサーやモータ、表示装置など、いろんな入出力デバイスが売られています。
今まで「別体で5V用意するのめんどくえな」と思っていたようなセンサーでも、Arduinoに5V出力あるので簡単につなげます。


あーなんか
面白いおもちゃを手に入れてしまった・・・

「大丈夫かいな」と思うぐらい安いよね

Arduino NANO 3.0と互換 CH340G+ATMEGA328Pコントロールボード




参考文献
電圧を計測してパソコンに記録する簡単な方法
https://kesoku-blog.com/?p=2508

Arduino入門 一番簡単なプログラミングは電圧測定
https://kesoku-blog.com/?p=59

C#外部機器との通信1 シリアル通信
https://kesoku-blog.com/?p=291

Arduino IDEで「シリアルポートが選択できない」「USBを認識しないとき」はドライバをインストールしよう
https://www.ekit-tech.com/?p=1506

https://deviceplus.jp/arduino/arduino_f07/

Arduino UNO R4 MinimaのADコンバータの入力インピーダンスは低い
https://www.jh4vaj.com/archives/40883

【電子工作】Arduino Nanoの基本仕様・ピン配列まとめ!
https://burariweb.info/electronic-work/arduino-nano-specification-summary.html#i

https://burariweb.info/electronic-work/arduino-learning/digital-input-pullup-pulldown.html

arduino温度センサーの値をシリアル通信してvb.netアプリで受信する方法
https://アイシステム.com/blog/arduinotovbnet/


【VB.Net】Arduinoとシリアル通信してみた~ArduinoProMini互換機~
https://dreamparadaisu.com/visualbasic_54/

●第30回 UARTシリアル通信②:ArduinoとWindows PCの通信
https://ameblo.jp/geotechlab-workshop/entry-12626084235.html
空の制御文字を受信したときだけデータを送出させる




ではごきげんよう。










お気に入りの記事を「いいね!」で応援しよう

最終更新日  2025.05.27 23:59:55
コメント(0) | コメントを書く
[家電] カテゴリの最新記事


コメント新着

r1m@ Re:windows11カスタマイズまとめ(11/15) はじめまして ShellFolderFix エクスプロ…
身近な人@ Re:今年の正月はのんびりと・・できない?(01/01) 仕事割り振ればいいのに。 年末はいても役…
にっしぃ5627@ Re:全く使ってない半角/全角キーを活用する(05/29) ちなみに、二通りあることはどうやってお…
にっしぃ5627@ Re:全く使ってない半角/全角キーを活用する(05/29) 一つ注意点があります。 それは、半角/全…

お気に入りブログ

りきりき元気です! りきとママ922さん

フリーページ

カテゴリ


© Rakuten Group, Inc.
X

OSZAR »