メニュー English Ukrainian ロシア語 ホーム

愛好家や専門家向けの無料テクニカル ライブラリ 無料のテクニカルライブラリ


無線電子工学および電気工学の百科事典
無料のライブラリ / 無線電子および電気機器のスキーム

アルドゥイーノ。 デジタル I/O 操作。 無線エレクトロニクスと電気工学の百科事典

無料のテクニカルライブラリ

無線電子工学と電気工学の百科事典 / アマチュア無線デザイナー

記事へのコメント 記事へのコメント

Arduino IDE 開発環境をロードすると、開いたウィンドウに表示される将来のプログラムの空白部分に、setup () とloop () の XNUMX つの関数があることがわかります。 setup() 関数は任意のプログラムを開始します。 これは、ボードに電源が投入された直後に XNUMX 回実行され、またボード上の RESET ボタンを押してマイクロコントローラーを元の状態に設定した後も毎回実行されます。 この関数内では、ポートの動作モードが設定され、マイクロコントローラー内とマイクロコントローラーに接続されている外部の両方のシリアル インターフェイスとその他の周辺デバイスが初期化されます。 この関数は、空であってもプログラム内に存在する必要があります。

loop()関数には、電源がオフになるまでマイクロコントローラーが繰り返し実行する無限ループが含まれています。 外部センサーに問い合わせ、アクチュエーターにコマンドを送信し、計算やその他の操作を実行します。 例として、Arduino ボードに組み込まれ、デジタル ピン D13 に接続されている文字 L のマークが付いた LED を XNUMX 秒周期で点灯してから消灯する簡単なプログラムを考えてみましょう。

このプログラムは、Arduino IDE で提供される標準サンプルの 1 つです。 テーブル内。 XNUMX は、添付された形式でそのテキストを示しています。 Arduino の専門用語では、プログラムのソース コードは「スケッチ」、つまりスケッチと呼ばれることに注意してください。

表1

Arduino。 デジタルI/O操作

XNUMX つのブロックに関連するプログラムの断片は中括弧 { と } で区切られます。 以下では、これらを演算子括弧と呼びます。 プログラムのテキストには、その本質と作業のニュアンスを説明するコメントが含まれる場合があります。 複数行のコメントは、文字 /* (先頭) と */ (末尾) の組み合わせに限定されます。 // という文字は、同じ行の終わりで終わるコメントを開始します。 翻訳中 (人が理解できるプログラミング言語のプログラムのテキストを、マイクロコントローラーで実行可能なマシンコードに変換すること)、テキストのこの部分は完全に無視されます。

setup()関数の本体にある唯一の実行可能行

pinMode(13、OUTPUT);

ArduinoボードのピンD13を出力モードに設定します。

loop() 関数は次の行で始まります

digitalwrite(13、HIGH);

出力 D13 を High 論理レベルに設定します。 Arduino UNO では、コモンワイヤを基準とした電源電圧 (+5 V) に等しくなります。 これにより LED が点灯します。

その後に次の行が続きます

delay(1000);

これにより、実行可能プログラムは、括弧内にミリ秒単位で指定された時間、次の行にジャンプしなくなります。 一時停止後、プログラムは D13 出力を共通ワイヤの電位に対応する低論理レベルに設定し、LED をオフにします。 この操作は次の行で記述されます。

digitalwrite(13、LOW);

次に、プログラムは再び 1 秒の一時停止を維持し、その後、loop() 関数の本体に記述されている一連の操作全体を最初から繰り返します。 これは、マイクロコントローラーの電源がオフになるまで続きます。

late() 関数は注意して使用する必要があります。 指定された時間間隔中に重要なイベントが発生した場合 (たとえば、センサーが短時間トリガーされた場合)、プログラムはこのイベントに応答しません。

出力として動作する Arduino ピンによって与えられる最大電流は 40 mA ですが、すべての出力の合計電流は 300 mA を超えてはいけないことに注意してください。 これは通常の LED に電力を供給するのに十分ですが、低電圧リード リレーや携帯電話の低電力振動モーターを出力に直接接続することもできます。 アンプがなければこれ以上強力なものを接続することはできません。そしてそれは危険です - マイクロコントローラーをダメにする可能性があります。

アナログ入力 A0 ~ A5 は、必要に応じて D0 ~ D13 とともにデジタル入力および出力として使用でき、それぞれ番号 14 ~ 19 で参照されます。

では、プログラムを少し修正してみましょう。 このような単純なアルゴリズムの場合、これらの変更は基本的なものではありませんが、より複雑な場合には、このような変更は重要です。 まず、英語のコメントをロシア語に置き換えてみましょう。 たとえば、LED をオンにする行は、「LED をオンにする」のようにコメントされます。 「D13 ラインに高いレベルを設定しました」と書くべきではありません。これはプログラムのテキストからすでに明らかです。

もちろん、各行の詳細なコメントは通常冗長ですが、怠けて書くべきではありません。 しばらくすると、プログラムの詳細は作者自身でさえ忘れられますが、コメントだけがその本質をすぐに理解するのに役立ちます。

次に、ArduinoのD13ピンではなく、D12ピンに接続されているLEDが点滅するようにプログラムを変更します。 ボード上の D12 に接続された LED がないため、直列抵抗を備えた外部 LED が必要です。 図のように接続してください。 1. 追加の抵抗は、電流カット LED が 5 ~ 10 mA 以内になるように選択されます。 これにより、ほとんどの LED でかなり明るい輝きが得られます。 外部 LED が接続された Arduino UNO ボードを図に示します。 2.

Arduino。 デジタルI/O操作
米。 1.LED接続図

Arduino。 デジタルI/O操作
米。 2.外部LEDが接続されたArduinoUNOボード

抵抗を追加して複数の LED を作成することをお勧めします。 これらは、照明効果のオートマトンを作成するためではなく、ボードの出力の電圧レベルをすばやくチェックし、デバッグ中のプログラムに応じてその変化を監視するために役立ちます。

この場合、D13 ではなく D12 に接続された LED を制御するには、プログラム テキスト内の 13 × 12 という数字をすべて修正すれば十分です。コメントを除けば、プログラム テキスト内に 13 という数字は XNUMX 回しか表示されません。したがって、それを変更するのは難しくありません。 ただし、プログラムの量が増加すると、状況は根本的に変わります。 XNUMX つの数字を置き換えることと、長いプログラムのさまざまな場所にある数十の同じ数字を置き換えることはまったく別のことです。 さらに、この数字がまったく別の意味を持っており、変更する必要がないことが判明する場合もあります。

このような変更を簡単に行うために、プログラムの先頭で変数を宣言し、それに目的の出力の数に対応する値を割り当てます。

int LEDPIN = 12;

さらに、出力番号 13 が出現する場合は、それをこの変数の名前に置き換えます。 LED の接続を再度変更する必要がある場合は、LEDPIN 変数の説明内の数値を XNUMX つ変更するだけで十分です。

変更されたプログラムを表に示します。 2. Arduino ボードのマイクロコントローラー メモリにロードする必要があります。 これを行うには、IDE のメイン メニューから [ファイル]→[ロード]を選択します。 編集ウィンドウに入力したプログラムが事前にファイルに保存されていない場合、IDE はそれを保存するファイル名を指定するように求めます。 Arduino IDEがプログラムをマイクロコントローラーが理解できるマシンコードに変換するのに必要な時間が経過すると、ボード上の「Rx」と「Tx」のLEDが点滅し始め、マイクロコントローラーのシリアルインターフェースを介したメッセージの送受信を知らせます。 。

表2

Arduino。 デジタルI/O操作

すべてが正しく行われた場合、正しいロードに関するレポートがプログラム ウィンドウの下部に表示されます。 ロードされたプログラムがマイクロコントローラ プログラム メモリの利用可能な 32 KB のうちどれだけを占有しているか、および変数を収容するために必要な RAM の量に関する情報が表示されます。 ピン D12 に接続された LED が 2 秒周期で点滅し始めます。

8 つの LED のラインを D12 ~ D3 Arduino ピンに接続し (図 3)、表に示すプログラムをロードするとします。 500 では、これらの LED とボードに取り付けられた D13 に接続された LED がそれぞれ XNUMX ミリ秒間交互に点灯します。 このプログラムは、単に setup() 関数の行内で出力の数値を変えて必要な回数だけ繰り返し、出力用に設定し、「額面上」で問題を解決した場合、さらに長くなる可能性があります。 loop() 関数 - 一時停止してオフにする次の LED を含む一連の行。 for ループ ステートメントはプログラムを短縮するのに役立ちました。

Arduino。 デジタルI/O操作
米。 3つのLEDのライン

表3

Arduino。 デジタルI/O操作

キーワードの後の括弧は、ループ変数の初期値 - LEDPIN=8、ループ本体の実行条件 - LEDPIN<14、および本体の各実行後にループ変数で実行される操作 - LEDPIN++ を示します。変数の値が XNUMX ずつ増加することを示します。 必要に応じて、for ループのパラメーターを簡単に変更できます。

演算子括弧内のループ本体は条件の後に続きます。 最初のケース (setup() 関数内) では、8 から 13 までの LEDPIN 値で XNUMX 回実行される単一行で構成されます。 XNUMX 番目のケース (loop() 関数内) では、ループステートメントは、変数の同じ値を使用して XNUMX 回実行される XNUMX 行のシーケンスを指定します。

どのようなシステムでも外部機器を制御するだけでなく、さまざまなセンサーから情報を受信する必要があります。 これらがなければ、どんなに複雑なロボットであっても、外部条件に応じて動作を変えることができない単なる時計仕掛けのおもちゃになってしまいます。

電源電圧が 5 V の場合、Arduino UNO では、マイクロコントローラーのデジタル入力は、+3 V を超える論理的に高い (論理ユニットに相当する) 電圧として認識されることが保証されています。論理的に低い (論理ゼロに相当) - +1,5 V 未満の電圧 中間値 (入力がどこにも接続されていない場合を含む) は、マイクロコントローラーのインスタンス、その電源電圧、温度やその他の要因。 したがって、デジタル入力は常に既知の高論理レベルまたは低論理レベルの電圧を有することが望ましい。

最も単純なセンサーは、図に示すように接続された、固定されていない通常のボタンです。 4 回路を Arduino ボードの外側のピンの 7 つ、この場合は D1 に接続します。 SB1 ボタンを放すと、マイクロコントローラーの入力の電圧レベルは低くなり (抵抗 R5 が電圧を供給します)、押すと高くなります。 ボタンと抵抗を場所によって変更すると (図 1)、レベルも場所によって変わります。 これで、ボタンを放すと抵抗 RXNUMX が高レベルを提供し、ボタンを押すと低レベルに設定されます。

Arduino。 デジタルI/O操作
米。 4. センサー接続図

Arduino。 デジタルI/O操作
米。 5. センサー接続図

ボタンが押されたときに抵抗器 R1 を流れる電流は電源から消費され、デバイスの効率が低下するため、抵抗器 R1 の抵抗値は小さすぎてはなりません。 デスクトップ コンピュータまたは主電源からの電力の場合、これはそれほど重要ではありませんが、Arduino バッテリ バージョンでは、抵抗 RXNUMX の抵抗値が低いため、デバイスのバッテリ寿命が大幅に短縮されます。

マイクロコントローラーには抵抗 R1 の機能を実行する内部抵抗があることに注意してください。 デフォルトでは無効になっています。 ただし、たとえば内部抵抗を D2 入力に接続するには、setup () 関数に行を追加するだけで十分です。

pinMode(2、INPUT_PULLUP);

表に示す例を使用してデジタル入力を考えてみましょう。 D4ピンに接続されたボタンを押すと、13ピンに接続されたLEDが消灯する7つのプログラム。 条件演算子に基づいています

if (調子)

{

/*条件が満たされた場合のアクション*/

}

ほかに

{

/*条件が満たされない場合のアクション*/

}

表4

Arduino。 デジタルI/O操作

指定された条件が満たされるかどうかに応じてアクションを選択する役割を果たします。 条件が満たされない場合に何もする必要がない場合は、else {...} フラグメントを省略できます。 条件文を使用すると、プログラムに柔軟性が与えられます。 外部センサーの状態に応じて、プログラムの順序やマイコンを搭載したデバイスの動作が変化します。

実際にボタンの状態をチェックするのは論理演算子によって行われます

デジタル読み取り(BUT) = HIGH

この場合、ボタンが接続されている BUT ピンの状態を読み取る関数によって返された値と論理定数 HIGH を比較し、それらが等しい場合は値 TRUE (真) を、そうでない場合は FALSE を取得します。 (間違い)。 等価性テスト操作は、連続した XNUMX つの等号で表されることに注意してください。 また、XNUMX つの等号は、変数に値を代入する操作を示します。 これらを混同しないでください。混同すると、見つけにくいバグが発生します。

先ほど検討したプログラムの例を使用すると、lay() 関数の不正確な使用がどのような結果をもたらすかが簡単にわかります。 プログラムの最後から 10000 行目にある late(10) 関数の「コメントを解除」(先行する XNUMX つの実線を削除) した場合、loop() 関数の本体が実行されるたびに、プログラムは XNUMX 秒待ってから処理を続行します。仕事。 当然のことながら、この期間中にボタンを押しても無視されます。

Arduino がシリアル インターフェイス経由でパーソナル コンピュータと通信できる機能は、非常に便利です。 プログラムをマイクロコントローラーにダウンロードするだけでなく、実行中の双方向の情報交換にも使用できます。 このインターフェイスを通じて、Arduino は収集した情報をコンピュータに転送して複雑な処理や保存を行ったり、コンピュータからコマンドや初期データを受信したりできます。 0 つのマイクロコントローラー デバイスもこの方法で相互作用できます。 マイクロコントローラーのシリアル ポートはボード D1 と DXNUMX のデジタル ピンを使用するため、シリアル ポートを介した通信を構成して使用する場合、他の目的には使用できません。

たとえば、表に示すプログラムを考えてみましょう。 これは、出力 D5 の状態に関する情報をコンピュータに送信します。 レベルが高ければ、プログラムはシンボル コード H をコンピュータに送信し、レベルが低ければ、シンボル コード L をコンピュータに送信します。コンピュータの COM ポートで動作できるプログラムであれば、この情報を受信できます。 Arduino IDE にはシリアル ポート モニタが組み込まれており、コンピュータは Arduino ボードから受信したテキスト メッセージを表示したり、ユーザーがコンピュータのキーボードで入力したメッセージを送信したりできます。

表5

Arduino。 デジタルI/O操作

setup() 関数の Serial.begin(9600) 行は、マイクロコントローラーのシリアル ポートを初期化し、ボー レートを 9600 ボーに設定します。 他の標準ボーレート (1200、2400、4800、9600、19200、38400、57600、または 115200 ボー) を設定することもできます。 この場合、マイクロコントローラーに設定された速度は、情報を交換する必要があるコンピューターまたはその他のデバイスの COM ポートの設定速度と一致する必要があります。 情報の信頼性の高い受信が保証される許容速度は、Arduino をコンピュータに接続するケーブルの長さによって異なります。 たとえば、長さ 1,8 m の標準 USB ケーブルを使用すると、コンピュータは 115200 ボーの速度でも Arduino から情報を受信します。 このケーブルに 4800 メートルの延長ケーブルを追加すると、許容速度は XNUMX ボーに低下します。

Seri-al.print()関数はシリアルポートに情報を送信します。送信値を送信する変数名または転送する文字列を括弧内に示します。 変数名と区別するため、文字列を引用符で囲みます。 この Serial.println() 関数には変更があります。 異なる点は、括弧で囲まれた情報 (存在する場合) を渡し、それをキャリッジ リターンとライン フィード文字で補足することです。 新しい行を開始し、指定された文字列内の文字の組み合わせを開始します。

上記のプログラムを使用すると、入力として設定されたマイクロコントローラー出力に外部信号が適用されない場合、その状態がどのようなものであっても動作中にランダムに変化することを簡単に確認できます。 また、マイクロコントローラーが低論理レベルとして認識しなくなり、高レベルとして認識し始める電圧の実際の値を決定することもできます。

次に、シリアルポートを介してコンピュータから受信したコマンドに従って、ボード上の LED をオン/オフするプログラム (表 6) を考えます。 情報はシリアル ポート経由でバイト単位で送信されることに留意してください。 シリアル ポート レシーバは、マイクロコントローラのプロセッサとは独立して動作し、これらのバイトを受信し、64 バイトのバッファに格納します。

6表。

Arduino。 デジタルI/O操作

プログラムがバッファ内に受信バイトがあるかどうかを判断するために、その数を返す Serial.available() 関数があります。 存在する場合は、シリアルを使用するプログラムです。 read() はバッファからバイトを読み取り、その値 (受信した文字コード) を C char 変数に割り当てます。 次に、条件ステートメントでコードとパターンを比較し、一致する場合は LED をオンまたはオフにします。

情報の受信に使用したのと同じシリアル ポート モニタを使用してコマンドを送信できます。 ウィンドウの上部 (図 6) には、送信された文字を入力するための行があります。 キーボードから記号またはそのシーケンスを入力した後、画面の「送信」ボタンを押します。 Arduino ボードでは、「Rx」LED が短く点滅し、マイクロコントローラーが情報を受信したことを示します。 もちろん、コードを手動で送信するのは簡単ですが、最良の管理方法とは程遠いです。 通常、このために特別なコンピュータ制御プログラムが作成されます。

Arduino。 デジタルI/O操作
米。 6.プログラムウィンドウ

したがって、Arduino マイクロコントローラー ボードを使用すると、多数の単純な電子デバイスを比較的簡単に作成できます。 デジタル入出力に限定すると、自動照明効果、最も単純な盗難警報器、デジタル センサーを備えたさまざまなパラメータのメーターなどが考えられます。 さらに、デバイスをコンピュータと対話させるのも簡単です。 当然のことながら、Arduino の機能はこの記事で説明したものに限定されるわけではありません。 このボードはアナログ信号も処理できますが、これについては後で説明します。

この記事で紹介した Arduino 用のプログラムは、ftp://ftp.radio.ru/pub/2016/08/diginout.zip からダウンロードできます。

著者:D。Lekomtsev

他の記事も見る セクション アマチュア無線デザイナー.

読み書き 有用な この記事へのコメント.

<<戻る

科学技術の最新ニュース、新しい電子機器:

交通騒音がヒナの成長を遅らせる 06.05.2024

現代の都市で私たちを取り囲む音は、ますます突き刺さるようになっています。しかし、この騒音が動物界、特に卵から孵化していないひよこのような繊細な生き物にどのような影響を与えるかを考える人はほとんどいません。最近の研究はこの問題に光を当てており、彼らの発達と生存に深刻な影響を与えることを示しています。科学者らは、シマウマダイヤモンドバックのヒナが交通騒音にさらされると、発育に深刻な混乱を引き起こす可能性があることを発見しました。実験によると、騒音公害によって孵化が大幅に遅れる可能性があり、孵化した雛は健康増進に関わる多くの問題に直面している。研究者らはまた、騒音公害の悪影響が成鳥にも及ぶことを発見した。生殖の機会の減少と生殖能力の低下は、交通騒音が野生動物に長期的な影響を与えることを示しています。研究結果はその必要性を浮き彫りにしている ... >>

ワイヤレススピーカー Samsung ミュージックフレーム HW-LS60D 06.05.2024

現代のオーディオ技術の世界では、メーカーは完璧な音質を追求するだけでなく、機能性と美しさを組み合わせるためにも努力しています。この方向への最新の革新的なステップの 60 つは、2024 World of Samsung イベントで発表された新しい Samsung Music Frame HW-LS60D ワイヤレス スピーカー システムです。 Samsung HW-LS6D は単なるスピーカー システムではなく、フレーム スタイル サウンドの芸術品です。 Dolby Atmos対応の5.2スピーカーシステムとスタイリッシュなフォトフレームデザインの組み合わせにより、インテリアに最適な製品です。新しい Samsung Music Frame は、あらゆる音量レベルでクリアな対話を実現するアダプティブ オーディオや、豊かなオーディオを再生するための自動ルーム最適化などの高度なテクノロジーを備えています。 Spotify、Tidal Hi-Fi、Bluetooth XNUMX 接続のサポート、およびスマート アシスタントの統合により、このスピーカーはあなたのニーズを満たす準備ができています。 ... >>

光信号を制御および操作する新しい方法 05.05.2024

現代の科学技術は急速に発展しており、日々新しい手法や技術が登場し、さまざまな分野で新たな可能性を切り開いています。そのような革新の 1 つは、ドイツの科学者による光信号を制御する新しい方法の開発であり、これはフォトニクス分野での大きな進歩につながる可能性があります。最近の研究により、ドイツの科学者は石英ガラス導波管内に調整可能な波長板を作成することができました。液晶層の使用に基づくこの方法により、導波路を通過する光の偏光を効果的に変化させることができる。この技術的進歩により、大量のデータを処理できるコンパクトで効率的なフォトニックデバイスの開発に新たな展望が開かれます。新しい方法によって提供される偏光の電気光学制御は、新しいクラスの集積フォトニックデバイスの基礎を提供する可能性があります。これにより、次のような大きな機会が開かれます ... >>

アーカイブからのランダムなニュース

金星のオゾン 22.04.2012

欧州宇宙機関によって打ち上げられたビーナス エクスプレス宇宙探査機は、金星の表面から 100 キロメートルの高度で、金星の大気中に薄いオゾン層を検出しました。

オゾンはすべての生物に有害な紫外線の一部を遮蔽するため、オゾンの存在は地球上に生命が存在することを示している可能性があると考えられています。 しかし、金星の大気中のこのガスは、地球の大気中の20分のXNUMX以下であり、地球上に生命が出現するには、地球の濃度の少なくともXNUMX%が必要です.

したがって、金星には、表面ほど熱くない上層大気であっても、生命が存在しない可能性が最も高いです。

その他の興味深いニュース:

▪ 恐竜のカットタイム

▪ 光線でオブジェクトを移動する

▪ RFシンセサイザSTW81101とSTW81102のチップ

▪ サンプル処理用のニューロンの一部

▪ 科学者は脳にチップを埋め込んだ

科学技術、新しいエレクトロニクスのニュースフィード

 

無料の技術ライブラリの興味深い資料:

▪ 電気技師の Web サイトのセクション。 記事の選択

▪ 記事 モジャイを越えてドライブ。 人気の表現

▪ 記事 温度が下がってもほとんど速度が低下しないカメレオンの筋肉はどれですか? 詳細な回答

▪ 記事 熱中症対策に。 健康管理

▪ 記事 自動階段照明。 無線エレクトロニクスと電気工学の百科事典

▪ 記事 VHF ラジオ局用の周波数シンセサイザー。 無線エレクトロニクスと電気工学の百科事典

この記事にコメントを残してください:

Имя:


Eメール(オプション):


コメント:





このページのすべての言語

ホームページ | 図書館 | 物品 | サイトマップ | サイトレビュー

www.diagram.com.ua

www.diagram.com.ua
2000-2024