thunderbolt!

thunderbolt!

PR

×

カレンダー

キーワードサーチ

▼キーワード検索

2026.04.11
XML
テーマ: 私のPC生活(7578)
カテゴリ: PC関係
昨日の続き。
Arduino+MCP4922+LM358でPC制御できる0-10V電源(6系統)を作っています。
ハードウェアとArduinoのスケッチが出来たので、後はパソコンで使いやすいようにコマンドプロンプト形式で使えるようにしておきます。


Arduino Nano アルドゥイーノ ナノ マイクロコントローラー

Arduinoは仮想COMポートなので、パソコンによってはCOMポート番号が変わります。
そこで、引数にCOMポート番号、MCP4922の出力ポート、出力電圧をカンマ区切りで指定するようにしました。
プログラム名をVOUT.exeとすると、コマンドプロンプトから

c:\>VOUT 5,1B,1.4

などとすると、仮想COM番号5番に繋いだArduinoで、1番のMCP4922のポートBから1.4Vが出力されるようになってます。


下準備として、VisualStudioのフォームにSerialPortのコントロールを一つ貼り付けておくのと、DOS窓で実行するためにソリューションのエクスプローラ → プロジェクトのプロパティ → アプリケーションタブ → アプリケーションの種類をコンソールアプリケーションに変更しておく必要があります。
VsiualStudio2022で作りましたが、まあ2026とか2019とかでも動くでしょう。
ついでなので、Zを引数にすると出力オフ(全部0V)、RならVccを読むようにしました。



Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

'コマンドライン引数を取得
Dim cmds As String() = System.Environment.GetCommandLineArgs()
Dim cmdArray() As String
Try
cmdArray = cmds(1).Trim.Split(",")
Catch
Console.WriteLine("引数を正しく指定してください。" & vbCrLf & "カンマ区切りで、(COMポート番号),(電圧出力ポート),(出力電圧)" &
vbCrLf & "Zを指定すると全出力を0Vにします。 " & vbCrLf & "Rを指定するとArduinoのVref読み出し。") :
End Try


'ポート開く
SerialPort1.PortName = "COM" & cmdArray(0)
Try
SerialPort1.Open()
System.Threading.Thread.Sleep(200) '少し待つ
Catch
Console.WriteLine("Arduinoに接続できませんでした。デバイスマネージャでポート番号を確認してください") : End
E nd Try

'入力ポート名のチェック
Dim PortName() As String = {"1A", "1B", "2A", "2B", "3A", "3B", "R", "Z"}
cmdArray(1)= cmdArray(1).ToUpper '大文字に変換
If Array.IndexOf(PortName, cmdArray(1)) < 0 Then
Console.WriteLine("有効なポート名またはコマンドを指定してください")
End
End if


’コマンドを解釈して実行
Select Case cmdArray(1)
Case "R" 'Vcc読み出し Rコマンド
SerialPort1.WriteLine("R")
System.Threading.Thread.Sleep(200) '少し待つ
Console.WriteLine("Arduino Vref = " & SerialPort1.ReadLine())


Case "Z" '全部ゼロにする Zコマンド
For iii = 0 To 5
SerialPort1.WriteLine(PortName(iii) & "_0")
Next iii


Case else '電圧を出力
'指示値のチェック
Dim V oltValue As Double
Try
VoltValue = CDbl(cmdArray(2))
Catch
Console.WriteLine("出力電圧を正しく指定してください") : End
End Try

If VoltValue < 0 Then Console.WriteLine("設定値の下限は0Vです") : End
If VoltValue > 5 Then C onsole.WriteLine("設定値の上限は5Vです(実際には電源電圧Vccが最大値になります)") : End

'Arduinoにコマンド文字を送る
SerialPort1.WriteLine(cmdArray(1) & "_" & VoltValue)

End Select

SerialPort1.Close()
End 'コマンドプロンプトに戻る

End Sub

End Class







コマンドプロンプトで実行すると、ちゃんと電圧出てます。


昨日も書いたように、私の環境ではVccが4.4Vなので、最大電圧は8.8Vしか出ません。タイトルに偽りありですね。
ちなみにLM358にかける電圧を上げても変わりません。12Vもかけておけば変動はしません。

別途ACアダプタを用意してMCP4922に5V掛けてやれば良いのですが、面倒くさい(もしくはもっと高い電圧が欲しい)なら、LM358の反転増幅回路の抵抗値を変えるという手もあります。

【送料無料】【4個入】2回路入汎用 オペアンプ LM358N LM358


入力電圧Einに対し、抵抗R1とR2で形成される反転増幅回路で増幅される電圧Eoutは

ですので、Ein=4.4VのときEout=10Vにするなら、R2 = (10/4.4-1)×R1 にしたら良いですね。
今回R1は4.7kΩを使いましたので、6kΩの抵抗があれば良いんですが、そんなに都合良くピッタリの抵抗値があるわけではないので、多少余裕を見て大きめの抵抗にするんですかね。

ちなみにLM358は32Vまで耐えられるはずなので、オペアンプの入力電圧を30Vにしてゲイン6倍(R2=5×R1)にしてやれば、0-30Vで出力できるはずです。スペック上は。

----

さて、今回欲張って6系統も作ったので


MCP4922 @440円 x3個 = 1320円
LM358N @40円 x3個 = 120円
抵抗12本 30円ぐらい 
15Vぐらいの電源 (今回はUSB-DCコンバータ) 300円
ブレッドボード基板 150円ぐらい
合計 2600円ぐらい

1系統あたりだと440円ぐらいです。

2万円も出せばもっとハイスペックで使いやすい製品が買えますが、1chですからね。

OWON OWONプログラマブルDC電源60V/5A1CH SPE6053 入数:1台


Arduinoにはまだ4本のCSピンが余っていますので、最大で7石×2系統=14系統の制御が取れます。
その場合でもたぶん3000円もしないと思うので、多出力が欲しい場合は自作したほうが圧倒的に安いですね。


ではごきげんよう。









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

最終更新日  2026.04.21 23:19:54
コメント(0) | コメントを書く


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

コメント新着

quanta511 @ Re[1]:柿の種も高級品になるのか(11/20) まーっさんへ コメントありがとうござい…
まーっ@ Re:柿の種も高級品になるのか(11/20) 更新を楽しみに拝見してます。 古い記事へ…
私はイスラム教徒です@ Re:美大あるある 工学部も同じ(05/07) 神神は言った: コーランで 『 (21) 人…
聖書預言@ Re:どんど焼き(01/14) 神の御子イエス・キリストを信じる者は永…
aki@ この様な書き込み大変失礼致します 日本も当事国となる台湾有事を前に反日メ…

© Rakuten Group, Inc.
X

Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: