ご存じの通り冷却カメラを頑張って制作しているわけですが電子工学っちゅうのですか?(^^;
電流、電圧、V(ボルト)、A(アンペア)、Ω、抵抗、配線、GND。。。。。。そう言うの苦手で(^^;
かと言って何もやらないと知識が身に付かないし。。。。。。
と言うわけで
Arduino(アルドゥイーノと読むらしい(^^;)を買って面白おかしくお勉強する事にしました。
なんだか随分路線がずれてしまいましたが気にしないで下さい。
こちらは私の完全な備忘録ですので興味が無い人は無視して下さい!!(^^)/~
このArduinoってやつ使い方によっては色々面白い事が出来るらしいのですが今のところ使い道すら全く想像もつかない(笑)
まぁ難しい事は考えないで触って見る事にします。
導入、開発、実行までの手順
Getting Started with Arduino on Windows
まずはこちらのサイトから
https://www.arduino.cc/en/Guide/Windows#toc2
開発導入手順はここに全て記載してあります!但し英語ですけどね(^^;
Get an Arduino board and USB cable Download the Arduino Software (IDE) Connect the board Install the drivers Launch the Arduino application Open the blink example Select your board Select your serial port Upload the program
訳するとこんな感じ
これぐらいの英語なら流石にわかりますね。
ArduinoとUSBケーブルを入手しろ Arduinoのソフトウェア(IDE)をダウンロード ボードに接続しろ ドライバをインストールしろ Arduinoのアプリケーションを起動しろ 点滅のサンプルを開け ボードを選択しろ シリアルポートを選択しろ プログラムをアップロードしろ
早速この手順通りに作業を進めて行きます。
1.Arduinoを入手
秋月電子で購入してきました。
様々なタイプのArduinoがあるようだけどなんだかよく分からないのでスタンダード?的なものをチョイス
Arduino Unoお値段2,940円!安い!
何が出来るか分からない癖に安いと言うのも変だけどとにかく安い(^^;
ジャンパワイヤ、ブレッドボードがあると便利。
実はこれらの部品は初めて聞く名前(^^;ハンダを使わずに簡単に配線、テストが出来るものらしいよ。
ってこんなレベルで本当に大丈夫かい?www。。。。。。。
工作キット見たいなものがあるので最初からそれを購入すると良いですね!
今回は単品で買ってしまいました少し後悔です。
例えばこんなやつ!いっぱい部品が入ってて色々試せそうですね。
2.Arduino Software (IDE)インストール
※IDE:開発の統合環境
ソウフトウェアのダウンロードはこちらから
https://www.arduino.cc/en/Main/Software
Download the Arduino Software
このボタン「just download」から無料でダウンロードできますね
ダウンロードしたファイルarduino-1.6.6-windows.exeを実行してインストール開始
全てデフォルトでインストール(^^)
3.Arduino USBケーブル接続
ソフトウェアのインストールが終わったのでUSBケーブルでArduinoとPCを接続
緑のランプ点灯!(^^)
USBから電源を供給できるのですね。となりのジャックからもきっと電源供給出来るのでしょう。
4.ドライバーのインストール
5.arduino IDE起動
いよいよArduinoのアプリケーションを起動します
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
こちらが初期画面です。
setup()とloop()のサブルーチンがデフォルトで表示されてます。
ちなみにsetup()は起動時に一回走るイベント、loop()に主要なプログラムを書くようです。
自力でプログラミングする時はこちらにコーディングして行きます。
6.サンプル(BlinkWithoutDelay)を開く
ArduinoのアプリケーションIDEを使ってプログラミング、コンパイル、ボードに書きまで一連の流れをテスト
Hello!VisualBasic的な作業開始です
メニューバーの「 File 」→「 Examples」のからサンプルプログラムがあるようです。
手順通りLED点滅のサンプルを開きます
メニューバーの「 File 」→「 Examples 」→「2.Digital」→「BlinkWithoutDelay」を選択
自動でプログラムが表示されます
なにやらC言語らしきコーディング(^^;
ちなみにArduinoの世界ではプログラム、コーディングをスケッチと言うらしいです。
/* Blink without Delay Turns on and off a light emitting diode (LED) connected to a digital pin, without using the delay() function. This means that other code can run at the same time without being interrupted by the LED code. The circuit: * LED attached from pin 13 to ground. * Note: on most Arduinos, there is already an LED on the board that's attached to pin 13, so no hardware is needed for this example. created 2005 by David A. Mellis modified 8 Feb 2010 by Paul Stoffregen modified 11 Nov 2013 by Scott Fitzgerald This example code is in the public domain. http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay */ // constants won't change. Used here to set a pin number : const int ledPin = 13; // the number of the LED pin // Variables will change : int ledState = LOW; // ledState used to set the LED // Generally, you should use "unsigned long" for variables that hold time // The value will quickly become too large for an int to store unsigned long previousMillis = 0; // will store last time LED was updated // constants won't change : const long interval = 2000; // interval at which to blink (milliseconds) void setup() { // set the digital pin as output: pinMode(ledPin, OUTPUT); } void loop() { // here is where you'd put code that needs to be running all the time. // check to see if it's time to blink the LED; that is, if the // difference between the current time and last time you blinked // the LED is bigger than the interval at which you want to // blink the LED. unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // save the last time you blinked the LED previousMillis = currentMillis; // if the LED is off turn it on and vice-versa: if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } // set the LED with the ledState of the variable: digitalWrite(ledPin, ledState); } }
7.ツールからボード設定を確認、ツールからポートなどの接続設定を確認く
正しく設定しないとエラーが出ます。
ちなみに初めての接続直後はポート番号は違ってましたので確認が必要ですね。
9.マイコンボードに書き込みく
サンプル(BlinkWithoutDelay)のスケッチをコンパイルしてマイコンボードに書き込みます
左から検証 - マイコンボードに書き込む - 新規 - ファイル - 保存
検証(コンパイル)を押してプログラムあっ違ったスケッチ?(^^;のコンパイル
マイコンボードに書き込む
数字13付近のオレンジランプがゆっくり点滅してます(^^)
これでプログラムあっ違ったスケッチ?(^^;のコンパイル、マイコンボードへの書き込みと言った一連の検証終わり
せっかくなので
定数intervalの値を変更して(2000->50)再度マイコンボードに書き込み
点滅のスピードが速くなった!(^^)/
段々と面白くなって来ましたよ~
とまぁこんな感じで一連の流れ基本操作は終わりです
————————————————————————————————————
A.arduinoシリアル通信
一連の流れはつかめたので早速他のサンプルを試してみる
Arduinoのアプリケーションにあるシリアルモニタを使ってシリアル通信の検証です。
マイコンボードのシリアル通信をインプット、アウトプットのテストです。
マイコンボードにPC上のシリアルモニタから「o」と「p」の文字を受信(インプット) arduinoが「o」を受けった時はLEDを点灯させ「LED ON - DRAGONDEMAND」の文字をPCに送信する PCのシリアルモニタには「LED ON - DRAGONDEMAND」の文字が表示されます arduinoが「p」を受けった時はLEDを消灯させ「LED OFF - DRAGONDEMAND」の文字をPCに送信する PCのシリアルモニタには「LED OFF - DRAGONDEMAND」の文字が表示されます
プログラムあっ違ったスケッチ?(^^;してのコンパイルそしてマイコンボードに書き込む
ソースコード
// 変数の定義 #define LED_PIN 13 // 初期化 void setup(){ pinMode(LED_PIN, OUTPUT); // シリアルポートを9600 bps[ビット/秒]で初期化 Serial.begin(9600); } // 繰り返し処理 void loop(){ int inputchar; // シリアルポートより1文字読み込む inputchar = Serial.read(); if(inputchar != -1 ){ // 読み込んだデータが -1 以外の場合 以下の処理を行う switch(inputchar){ case 'o': // 読み込みデータが o の場合 Serial.print("LED ON - DRAGONDEMAND\n"); digitalWrite(LED_PIN, HIGH); break; case 'p': // 読み込みデータが p の場合 Serial.print("LED OFF - DRAGONDEMAND\n"); digitalWrite(LED_PIN, LOW); break; } } else { // 読み込むデータが無い場合は何もしない } }
B.Arduinoシリアルモニターで検証
[o],[p]の文字を入れて送信!
おおおぉぉぉシリアル通信が出来ましたよ~(^^)更に面白くなって来た!
C.Windows.NETのGUIでシリアル通信の検証
準備されてるインターフェース(シリアルモニタ)じゃつまらないので
当然出来るであろう!(^^)
他の開発言語でシリアルモニタ、通信プログラミングを作成
今回はVisualStudio2015で開発
ソースコード
Public Class Form1 Const CNST_srtCOM As String = "COM3" 'デリゲートの宣言 Delegate Sub DataDelegate(ByVal sdata As String) Private Sub PrintData(ByVal sdata As String) txtMessage.Text = sdata End Sub Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Dim ReceivedData As String = " " '受信データ用変数を宣言します Try 'txtMessage.Text = ReceivedData ReceivedData = SerialPort1.ReadLine 'データを受信します 'txtMessage.Text = ReceivedData.ToString Catch ex As Exception 'ReceivedData = ex.Message '例外処理を行います End Try 'Invokeメソッドにより実行されるメソッドへのデリゲートの宣言を行い、受信データを表示します Dim adre As New DataDelegate(AddressOf PrintData) Me.Invoke(adre, ReceivedData) End Sub Private Sub btnON_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnON.Click, btnOFF.Click Dim strSend As String 'NewLine格納用文字列変数 Select Case sender.text Case "ON" strSend = "o" Case "OFF" strSend = "p" End Select Try SerialPort1.WriteLine(strSend) '送信バッファにデータ書き込み Catch ex As Exception '例外処理 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click If SerialPort1.IsOpen = True Then 'ポートオープン済み SerialPort1.Close() 'ポートクローズ txtMessage.Text = CNST_srtCOM & " - CLOSE" End If End Sub Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click SerialPort1.PortName = CNST_srtCOM 'オープンするポート名を格納 SerialPort1.Open() 'ポートオープン txtMessage.Text = CNST_srtCOM & " - OPEN" End Sub End Class
OPEN、CLOSEボタンはCOMポートのオープン、クローズ
ON、OFFボタンはLEDの点灯、消灯の切替ボタン
当たり前だけど.NETによるテストが無事に完了。
————————————————————————————————————
さらにアプリのインターフェースをもう少しいじりました。
そしてちょっとだけ難しい事に挑戦。
アナログピン0,1,2にそれぞれ温度センサー(LM61BIZ)を接続してグラフをリアルタイムで表示して見る事に
この子たちが温度センサー(LM61BIZ)一個あたりの単価60円ぐらい
ジャンパワイヤ、ブレッドボードで配線(^^;
なるほどハンダ要らずで簡単にテスト出来る!これは便利
こんな感じでアナログピン0,1,2から三つセンサーを繋げてます。
それぞれしっかり動いてるぅ~感動、面白い。
これで少しは電子工学に対する免疫力がついたかな(笑)
えっ!甘いってか?!(^^;