Changes between Initial Version and Version 1 of epics/arduino/simpleRead


Ignore:
Timestamp:
09/25/18 16:23:49 (14 months ago)
Author:
obina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/arduino/simpleRead

    v1 v1  
     1= Arduino と EPICS を使った簡単な例 = 
     2家庭でも遊べるように、簡単なサンプルをつくる。 
     3 
     4== 準備 == 
     5 * Arduino Uno 
     6 * PC 
     7   * Arduino 統合開発環境(IDE)を公式サイト( https://www.arduino.cc/en/Main/Software )からダウンロード・インストールする 
     8   * 今回は Windows / ver 1.8.7 を使用した 
     9 * Raspberry Pi 
     10   * 今回はRaspberry Pi2 Model Bを使用した(Pi3でも可能のはず) 
     11   * EPICSインストールについては[wiki:epics/raspberrypi 別の記事を参照] 
     12 * USB ケーブル 
     13 * ブレッドボード、ジャンパー系ブル 
     14 * 半固定抵抗と固定抵抗(今回は手元にあった 1kΩのモノを使用) 
     15 
     16== 方針 == 
     17[!RasPi (epics IOC)] --[USB]--[Arduino]--AnalogIN--register [[br]] 
     18 
     19* アナログ入力を読み込み、シリアル経由でホストに通信。最初はPCを使って動作検証し、その後EPICS化する。 
     20* Arduino Uno の場合、0-5Vを 10bit(0-1024)で読み込むことが可能 
     21* 5V 電圧+可変抵抗+固定抵抗(破損防止)で 
     22  * 今回は手元にあった 1kΩの可変抵抗+1kΩの固定抵抗 
     23* ブレッドボードに配線[図] 
     24 
     25 
     26== PCにてスケッチの検証 == 
     27構成としては 
     28[PC] --[USB]--[Arduino]--AnalogIN 
     29という単純な構成。[[br]] 
     30 
     311秒に1回、ADCの値をシリアル経由でホストPCに送るスケッチを作成する。 
     32{{{ 
     33int analogPin = 0; 
     34int val = 0; 
     35 
     36void setup() { 
     37  Serial.begin(19200); 
     38} 
     39 
     40void loop() { 
     41  val = analogRead(analogPin); 
     42  Serial.println(val); 
     43  delay(1000); 
     44} 
     45}}} 
     46Arduinoにダウンロードし、IDEで「シリアルモニター」を開くと、1秒に1回ADCのカウント値が表示される。[[br]] 
     47この状態で可変抵抗を動かすと、カウント値が変わることを確認する。 
     48 
     49 
     50== Raspberry Pi に接続 == 
     51次にUSBケーブルをPCから抜いて、Raspberry Pi に Arduino を接続する。[[br]] 
     52まずは dmesg を確認 
     53{{{ 
     54[ 3433.753691] usb 1-1.2: new full-speed USB device number 6 using dwc_otg 
     55[ 3433.898077] usb 1-1.2: New USB device found, idVendor=2a03, idProduct=0043 
     56[ 3433.898099] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=220 
     57[ 3433.898109] usb 1-1.2: Product: Arduino Uno 
     58[ 3433.898120] usb 1-1.2: Manufacturer: Arduino Srl 
     59[ 3433.898129] usb 1-1.2: SerialNumber:  
     60[ 3433.938398] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device 
     61[ 3433.939634] usbcore: registered new interface driver cdc_acm 
     62[ 3433.939644] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters 
     63}}} 
     64のように、ttyACM0 として認識されている。となればあとは簡単で、rootになってから適当なターミナルプロ 
     65ラムで接続すれば良い。ここでは使いなれた GNU Screen を使って、デバイス名と通信速度を指定する 
     66{{{ 
     67pi@raspberrypi:~ $ sudo su - 
     68root@raspberrypi:~# screen /dev/ttyACM0 19200 
     69}}} 
     70正常に接続できれば、1秒ごとにターミナル上にADCカウント値が表示される。[[br]] 
     71GNU Screenを終了するにはホットキー(デフォルトではCTRL-a)を押してから、kを押せば良い(killコマンド)。 
     72※分からなければgoogleで 「GNU Screen の使い方」を検索 
     73 
     74 
     75== EPICS IOC 作成 == 
     76ここまでくれば、あとはEPICSのIOCを書く。 
     77単純に Stream Device で読み込むだけで良いので、 
     78simpleReadという名前でapplicationを作る。 
     79{{{ 
     80pi@raspberrypi:~/epics/app/arduino $ makeBaseApp.pl -t ioc simpleRead 
     81pi@raspberrypi:~/epics/app/arduino $ makeBaseApp.pl -i -t ioc simpleRead 
     82Using target architecture linux-arm (only one available) 
     83The following applications are available: 
     84    simpleRead 
     85What application should the IOC(s) boot? 
     86The default uses the IOC's name, even if not listed above. 
     87Application name? 
     88pi@raspberrypi:~/epics/app/arduino $ 
     89}}} 
     90configure/RELEASEを編集 
     91{{{ 
     92pi@raspberrypi:~/epics/app/arduino $ vi configure/RELEASE 
     93 
     94ASYN=/opt/epics/R315.5/modules/soft/asyn/4-31 
     95STREAM=/opt/epics/R315.5/modules/soft/stream/2-7-7 
     96}}} 
     97 
     98srcディレクトリで、MakefileにstreamDeviceの 
     99 * SerialPortドライバーを追加 
     100 * asyn ライブラリを追加 
     101の2つを追記 
     102{{{ 
     103pi@raspberrypi:~/epics/app/arduino/simpleReadApp/src $ vi Makefile 
     104 
     105# simpleRead.dbd will be made up from these files: 
     106simpleRead_DBD += base.dbd 
     107 
     108# Include dbd files from all support applications: 
     109simpleRead_DBD += asyn.dbd 
     110simpleRead_DBD += stream.dbd 
     111simpleRead_DBD += drvAsynSerialPort.dbd 
     112 
     113# Add all the support libraries needed by this IOC 
     114simpleRead_LIBS += asyn 
     115simpleRead_LIBS += stream 
     116 
     117}}} 
     118 
     119Dbディレクトリでdatabaseファイルを追加 
     120{{{ 
     121vi read1.db 
     122 
     123record(longin, "TEST:READ_INT") { 
     124  field(DESC, "adc raw input") 
     125  field(DTYP, "stream") 
     126  field(INP,  "@simple.proto getval PS1") 
     127  field(SCAN, "I/O Intr") 
     128} 
     129}}} 
     130 
     131Dbディレクトリの Makefile に db ファイルを追加 
     132{{{ 
     133pi@raspberrypi:~/epics/app/arduino/simpleReadApp/Db $ vi Makefile 
     134 
     135DB += read1.db 
     136}}} 
     137 
     138Dbディレクトリに protocol file を作成 
     139{{{ 
     140vi simple.proto 
     141 
     142Terminator = CR LF; 
     143getval { 
     144 in "%d"; 
     145} 
     146 
     147}}} 
     148 
     149make すると、とても遅い。セルフコンパイルなので仕方ないのだが.....クロスコンパイル環境を整えねば。 
     150stream device のサイト http://epics.web.psi.ch/software/streamdevice/ も参照。 
     151 
     152startupディレクトリで st.cmd コマンド編集 
     153{{{ 
     154pi@raspberrypi:~/epics/app/arduino/iocBoot/iocsimpleRead $ vi st.cmd 
     155 
     156dbLoadRecords("db/read1.db") 
     157epicsEnvSet("STREAM_PROTOCOL_PATH", ".:../../simpleReadApp/Db") 
     158drvAsynSerialPortConfigure ("PS1","/dev/ttyACM0") 
     159asynSetOption ("PS1", 0, "baud", "19200") 
     160 
     161}}} 
     162 
     163{{{ 
     164pi@raspberrypi:~/epics/app/arduino/iocBoot/iocsimpleRead $ chmod +x st.cmd 
     165pi@raspberrypi:~/epics/app/arduino/iocBoot/iocsimpleRead $ sudo ./st.cmd 
     166}}} 
     167 
     168エラーが出ていないことを確認すること。[[br]] 
     169別ターミナルを開いて、 
     170{{{ 
     171camonitor TEST:READ_INT 
     172}}} 
     173とする。 
     174あるいは、PC上でCSSを実行して、このレコードをモニター・グラフ表示する。 
     175