ja-jp_products:mpino_16a16r
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| ja-jp_products:mpino_16a16r [2026/09/15 17:45] – 外部編集 127.0.0.1 | ja-jp_products:mpino_16a16r [2026/10/25 08:43] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== MPINO-16A16R ====== | ====== MPINO-16A16R ====== | ||
| - | MPINO-16A16Rは、デジタル入力16点とリレー出力16点を備えた一体型の産業用Arduinoです。 アナログ入力、温度センサ入力、PWM出力、高速入力、RS-485通信を1枚のPCBに搭載しています。 | + | MPINO-16A16Rは、デジタル入力16点とリレー出力16点を備えた一体型の産業用Arduinoです。アナログ入力、温度センサ入力、PWM出力、高速入力、RS-485通信を1枚のPCBに搭載しています。 |
| Arduino IDE(Arduino C/ | Arduino IDE(Arduino C/ | ||
| 行 42: | 行 42: | ||
| ==== プログラム例・デジタル入力 ==== | ==== プログラム例・デジタル入力 ==== | ||
| - | digitalRead()でD0~D15の入力状態を200msごとに表示します。 HIGHは1、LOWは0です。 | + | digitalRead()でD0~D15の入力状態を200msごとに表示します。HIGHは1、LOWは0です。 |
| <code cpp> | <code cpp> | ||
| 行 156: | 行 156: | ||
| </ | </ | ||
| + | |||
| + | ===== STATUS LED ===== | ||
| + | |||
| + | MPINO-16A16RのSTATUS LEDは、ボードに実装された状態表示灯です。ユーザープログラムの動作状態を表示するために使用できます。 | ||
| + | |||
| + | STATUS LEDはデジタルピンD20に接続されています。スケッチではD20の代わりに'' | ||
| + | |||
| + | **注意事項: | ||
| + | |||
| + | ==== 例・STATUS LEDの点滅 ==== | ||
| + | |||
| + | 次の例では、STATUS LEDを0.5秒間隔で点灯・消灯します。 | ||
| + | |||
| + | <code cpp> | ||
| + | void setup() { | ||
| + | pinMode(LED_BUILTIN, | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | digitalWrite(LED_BUILTIN, | ||
| + | delay(500); | ||
| + | digitalWrite(LED_BUILTIN, | ||
| + | delay(500); | ||
| + | } | ||
| + | </ | ||
| ===== リレー出力 ===== | ===== リレー出力 ===== | ||
| 行 166: | 行 191: | ||
| | COM5 | R(44)~R(47) | D44~D47 | AC 250VまたはDC 30V, 最大5A/ | | COM5 | R(44)~R(47) | D44~D47 | AC 250VまたはDC 30V, 最大5A/ | ||
| - | リレー出力は、各グループのCOM端子と出力端子が物理的に接続される無電圧接点です。 負荷電源を別途接続する必要があります。 | + | リレー出力は、各グループのCOM端子と出力端子が物理的に接続される無電圧接点です。負荷電源を別途接続する必要があります。 |
| ==== プログラム例・リレー出力 ==== | ==== プログラム例・リレー出力 ==== | ||
| - | 入力D0~D15を出力D32~D47に順番に対応させます。 入力がHIGHの場合、対応する出力がONになります。 | + | 入力D0~D15を出力D32~D47に順番に対応させます。入力がHIGHの場合、対応する出力がONになります。 |
| <code cpp> | <code cpp> | ||
| 行 193: | 行 218: | ||
| ==== プログラム例・アナログ入力 ==== | ==== プログラム例・アナログ入力 ==== | ||
| - | analogRead()でA0~A3のADC生値(0~1023)を表示します。 各チャンネルの電圧・電流モードは、実際の製品設定に従います。 | + | analogRead()でA0~A3のADC生値(0~1023)を表示します。各チャンネルの電圧・電流モードは、実際の製品設定に従います。 |
| <code cpp> | <code cpp> | ||
| 行 224: | 行 249: | ||
| </ | </ | ||
| - | A0を0~5V入力、A2を0(4)~20mA入力に設定した場合の例です。 両関数はADC入力を指定したmin~maxの範囲へ換算します。IanalogRead()は小数部を切り捨てた整数、IanalogReadf()は浮動小数点数を返します。A0の0~5V入力を0~100%と電圧で表示します。A2の0~20mA入力は、範囲を0~20に指定して実際の電流値として読み取ります。 | + | A0を0~5V入力、A2を0(4)~20mA入力に設定した場合の例です。両関数はADC入力を指定したmin~maxの範囲へ換算します。IanalogRead()は小数部を切り捨てた整数、IanalogReadf()は浮動小数点数を返します。A0の0~5V入力を0~100%と電圧で表示します。A2の0~20mA入力は、範囲を0~20に指定して実際の電流値として読み取ります。 |
| <code cpp> | <code cpp> | ||
| 行 255: | 行 280: | ||
| </ | </ | ||
| - | A0を0~5V入力、A2を0(4)~20mA入力に設定した場合の例です。 A2に接続した4~20mAセンサの入力を、指定範囲へ換算します。IanalogRead2(A2, | + | A0を0~5V入力、A2を0(4)~20mA入力に設定した場合の例です。A2に接続した4~20mAセンサの入力を、指定範囲へ換算します。IanalogRead2(A2, |
| <code cpp> | <code cpp> | ||
| 行 288: | 行 313: | ||
| </ | </ | ||
| - | A0を0~5V入力、A2を0(4)~20mA入力に設定した場合の例です。 analogReadAvg(A0, | + | A0を0~5V入力、A2を0(4)~20mA入力に設定した場合の例です。analogReadAvg(A0, |
| <code cpp> | <code cpp> | ||
| 行 313: | 行 338: | ||
| ==== プログラム例・温度センサ入力 ==== | ==== プログラム例・温度センサ入力 ==== | ||
| - | analogRead()でA4、A5の温度センサADC生値(0~1023)を表示します。 摂氏への換算は、以下の内蔵関数で説明します。 | + | analogRead()でA4、A5の温度センサADC生値(0~1023)を表示します。摂氏への換算は、以下の内蔵関数で説明します。 |
| <code cpp> | <code cpp> | ||
| 行 340: | 行 365: | ||
| </ | </ | ||
| - | NTC入力A4に接続したNTC 10kΩ(25℃)、B=3950Kセンサの温度を読み取ります。 ntcRead()は摂氏温度の10倍の整数(25.3℃ → 253)、ntcReadf()は摂氏温度の浮動小数点数(25.3)を返します。 分解能はどちらも0.1℃です。 変換範囲外の値は-40℃または120℃に制限されるため、断線・短絡の判定値として使用しないでください。 | + | NTC入力A4に接続したNTC 10kΩ(25℃)、B=3950Kセンサの温度を読み取ります。ntcRead()は摂氏温度の10倍の整数(25.3℃ → 253)、ntcReadf()は摂氏温度の浮動小数点数(25.3)を返します。分解能はどちらも0.1℃です。変換範囲外の値は-40℃または120℃に制限されるため、断線・短絡の判定値として使用しないでください。 |
| <code cpp> | <code cpp> | ||
| 行 395: | 行 420: | ||
| </ | </ | ||
| - | PWM(pin, val, onDutybit16)はデューティ値を指定します。 8ビットの範囲は0~255、第3引数をtrueにした16ビットの範囲は0~65535です。 D21に16ビットの中間値32768を出力します。 D21~D23はTimer3を共有するため、同じタイマでは同じ分解能を使用します。 PWM_RESET()を呼び出した後に開始します。 | + | PWM(pin, val, onDutybit16)はデューティ値を指定します。8ビットの範囲は0~255、第3引数をtrueにした16ビットの範囲は0~65535です。D21に16ビットの中間値32768を出力します。D21~D23はTimer3を共有するため、同じタイマでは同じ分解能を使用します。PWM_RESET()を呼び出した後に開始します。 |
| <code cpp> | <code cpp> | ||
| 行 415: | 行 440: | ||
| </ | </ | ||
| - | FDPWM(pin, intHz, Duty)は周波数(Hz)とデューティ比(%)を指定します。 D21に1kHz、50%のデューティ比で出力します。 D21~D23はTimer3を共有するため、同じタイマの出力には同じ周波数を指定します。 独立したFPWM()関数はありません。50%出力はFDPWM(pin, | + | FDPWM(pin, intHz, Duty)は周波数(Hz)とデューティ比(%)を指定します。D21に1kHz、50%のデューティ比で出力します。D21~D23はTimer3を共有するため、同じタイマの出力には同じ周波数を指定します。独立したFPWM()関数はありません。50%出力はFDPWM(pin, |
| <code cpp> | <code cpp> | ||
| 行 436: | 行 461: | ||
| </ | </ | ||
| - | NPWM_BEGIN()でD21に1kHz・50%のパルス100個を準備し、loop()ごとにNPWM()を実行して出力と完了処理を行います。 delay()は入れないでください。 D21~D23はTimer3を共有します。同じタイマの他の出力と併用しないでください。 | + | NPWM_BEGIN()でD21に1kHz・50%のパルス100個を準備し、loop()ごとにNPWM()を実行して出力と完了処理を行います。delay()は入れないでください。D21~D23はTimer3を共有します。同じタイマの他の出力と併用しないでください。 |
| <code cpp> | <code cpp> | ||
| 行 457: | 行 482: | ||
| </ | </ | ||
| - | PWMOFF(pin, true)はチャンネル停止フラグを設定し、falseは解除します。 設定直後にFDPWM()を呼び出し、出力接続に反映します。 D21を2秒間ON、2秒間OFFにし、停止後はdigitalWrite()でLOWを維持します。 この停止フラグはNPWM()には適用されません。 | + | PWMOFF(pin, true)はチャンネル停止フラグを設定し、falseは解除します。設定直後にFDPWM()を呼び出し、出力接続に反映します。D21を2秒間ON、2秒間OFFにし、停止後はdigitalWrite()でLOWを維持します。この停止フラグはNPWM()には適用されません。 |
| <code cpp> | <code cpp> | ||
| 行 484: | 行 509: | ||
| </ | </ | ||
| - | PWM_RESET()はTimer1・Timer3の制御レジスタとカウンタを初期化します。 D21に1kHzを2秒間出力した後、全タイマを停止します。 同じタイマのPWM・カウンタにも影響します。 PWMOFF()の停止フラグまでは解除しません。 | + | PWM_RESET()はTimer1・Timer3の制御レジスタとカウンタを初期化します。D21に1kHzを2秒間出力した後、全タイマを停止します。同じタイマのPWM・カウンタにも影響します。PWMOFF()の停止フラグまでは解除しません。 |
| <code cpp> | <code cpp> | ||
| 行 502: | 行 527: | ||
| ==== プログラム例・パルスカウント ==== | ==== プログラム例・パルスカウント ==== | ||
| - | CLK(D24)のRISINGエッジをカウントします。 入力には100kΩのプルダウンがあります。 32ビット値をATOMIC_BLOCKで読み取り、500msごとに表示するソフトウェア割り込みの例です。 最大入力周波数でカウントの取りこぼしがないことを保証するものではありません。 | + | CLK(D24)のRISINGエッジをカウントします。入力には100kΩのプルダウンがあります。32ビット値をATOMIC_BLOCKで読み取り、500msごとに表示するソフトウェア割り込みの例です。最大入力周波数でカウントの取りこぼしがないことを保証するものではありません。 |
| <code cpp> | <code cpp> | ||
| 行 535: | 行 560: | ||
| ==== プログラム例・エンコーダ入力 ==== | ==== プログラム例・エンコーダ入力 ==== | ||
| - | A相はCLK(D24)、B相はDIO(D25)に接続します。 100kΩのプルダウンを使用し、RISINGエッジでB相がHIGHなら増加する1逓倍カウントの例です。 実際の回転方向はA・B相の配線によって変わります。 | + | A相はCLK(D24)、B相はDIO(D25)に接続します。100kΩのプルダウンを使用し、RISINGエッジでB相がHIGHなら増加する1逓倍カウントの例です。実際の回転方向はA・B相の配線によって変わります。 |
| <code cpp> | <code cpp> | ||
| 行 583: | 行 608: | ||
| ==== プログラム例・基本通信 ==== | ==== プログラム例・基本通信 ==== | ||
| - | Serial(115200bps)とRS-485 Serial1(9600bps, | + | Serial(115200bps)とRS-485 Serial1(9600bps, |
| <code cpp> | <code cpp> | ||
| 行 605: | 行 630: | ||
| ==== プログラム例・I²C通信 ==== | ==== プログラム例・I²C通信 ==== | ||
| - | Wireでアドレス0x08~0x77を検索し、応答したアドレスを3秒ごとに表示します。 SDA・SCLを使用するエンコーダ・割り込みの例と同時に実行しないでください。 | + | Wireでアドレス0x08~0x77を検索し、応答したアドレスを3秒ごとに表示します。SDA・SCLを使用するエンコーダ・割り込みの例と同時に実行しないでください。 |
| <code cpp> | <code cpp> | ||
| 行 650: | 行 675: | ||
| </ | </ | ||
| - | D0の状態をM[0]、A0の生値(0~1023)をD[0]に格納し、接続先機器から読み取ります。 RS-485(Serial1)、局番1、9600bps、8N1に設定します。M[0]はFC01・開始アドレス0・1ビット、D[0]はFC03・開始アドレス0・1ワードで読み取ります。 アドレスは実際の送信アドレス(0始まり)を基準とします。 通信関数はloop()ごとに呼び出し、この例では出力を制御しません。 | + | D0の状態をM[0]、A0の生値(0~1023)をD[0]に格納し、接続先機器から読み取ります。RS-485(Serial1)、局番1、9600bps、8N1に設定します。M[0]はFC01・開始アドレス0・1ビット、D[0]はFC03・開始アドレス0・1ワードで読み取ります。アドレスは実際の送信アドレス(0始まり)を基準とします。通信関数はloop()ごとに呼び出し、この例では出力を制御しません。 |
| MとDはコアが提供する共有グローバルメモリです。このスケッチは単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | MとDはコアが提供する共有グローバルメモリです。このスケッチは単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | ||
| 行 692: | 行 717: | ||
| </ | </ | ||
| - | RS-485(Serial1)で接続先スレーブのホールディングレジスタ1個を1秒ごとに読み取ります。 相手機器は局番1、9600bps、8N1、FC03・実際の開始アドレス0に設定します。 応答はreceived[0]へ保存し、成功した場合だけ表示します。 エラーコードは16進数で表示します。 上のスレーブ例とは別のスケッチで、M/ | + | RS-485(Serial1)で接続先スレーブのホールディングレジスタ1個を1秒ごとに読み取ります。相手機器は局番1、9600bps、8N1、FC03・実際の開始アドレス0に設定します。応答はreceived[0]へ保存し、成功した場合だけ表示します。エラーコードは16進数で表示します。上のスレーブ例とは別のスケッチで、M/ |
| <code cpp> | <code cpp> | ||
| 行 723: | 行 748: | ||
| **関連する内蔵関数** | **関連する内蔵関数** | ||
| - | === 関数例・LS産電Cnet | + | === 関数例・LS産電Cnet |
| **関数プロトタイプ** | **関数プロトタイプ** | ||
| 行 734: | 行 759: | ||
| </ | </ | ||
| - | D0の状態をM[0]、A0の生値(0~1023)をD[0]に格納し、HMIから読み取ります。 接続先機器はLS産電Cnet、RS-485、局番1、9600bps、8N1に設定します。 ビットは%MX00000(M[0])、ワードは%DW0(D[0])を読み取ります。 通信関数はloop()ごとに呼び出し、この例では出力を制御しません。 | + | D0の状態をM[0]、A0の生値(0~1023)をD[0]に格納し、HMIから読み取ります。接続先機器はLS産電Cnet、RS-485、局番1、9600bps、8N1に設定します。ビットは%MX00000(M[0])、ワードは%DW0(D[0])を読み取ります。通信関数はloop()ごとに呼び出し、この例では出力を制御しません。 |
| M・D・Rはコアが提供する共有グローバルメモリで、この例ではRを使用しません。Modbusの例とは別に単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | M・D・Rはコアが提供する共有グローバルメモリで、この例ではRを使用しません。Modbusの例とは別に単独で実行します。他のプロトコルと併用する場合は、共有メモリを重複して割り当てないでください。 | ||
| 行 766: | 行 791: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | [[https:// | ||
| [[: | [[: | ||
ja-jp_products/mpino_16a16r.1789461908.txt.gz · 最終更新: by 127.0.0.1
