Arduinoを使用してRaspberry Piを強化する

多くの人は、Raspberry PiからArduinoに電力を供給することは難しくないことを知っているでしょう。これにはUSBケーブルが必要です。 ほとんどのArduinoコントローラーにはUSB出力がないため、逆問題はより複雑に見えます(Dueは例外です)。 ただし、これはGPIOピンを使用して行うことができます。ArduinoNano V3.0とRaspberry Pi B rev.2の具体例についてお話したいと思います。 電源自体に加えて、ボタンとMOSFETトランジスタを使用してこの電力を制御する方法も説明します。

理論的機会

ほとんどのArduino互換コントローラーは5Vピンを使用します。 唯一の例外はArduino DueとArduinoからの3.3V出力ですが、現在はそうではありません。 Raspberry Piに電力を供給する方法の1つは、26ピンP1コネクタで5VおよびGNDピンを使用することでもあることが知られています。

解決策は明らかだと思われます-Raspberry PiをArduinoピンのいずれかに接続する必要があり、すべてが機能します。 これを試みた結果、Raspberry PiはPWR LEDで点灯しましたが、ACT LEDは点灯しませんでした。 その理由は、Arduinoピンからの非常に小さな電流強度(約40〜50 mA)にあります。 しかし、Arduinoには独立した5Vピンがあり、( リンクによると)約400〜500 mAを生成できます。 次に、Raspberryに電力を供給するのに十分な電流があるかどうかを確認する必要があります。

Raspberry Piには、2つのUSBデバイスが接続されている通常の電力に約700 mAが必要です。 各USBデバイスは、最大140 mA( ソース )を消費できます。 ラズベリーは、分散しているとさらに消費される可能性があります(私の場合はそうではありません)。 したがって、USBデバイスなしで非加速RPiを使用する場合、Arduino 5Vピンからの電流で十分なはずです。

電源を制御するには、電源ボタンと高電流を制御できるものが必要です。 これらの目的でMOSFETトランジスタを使用しました。 中古部品に直接進みます。

必要なハードウェアとソフトウェア

次の「鉄」部品を使用しました。

Arduinoファームウェアには、IDEが必要です。ベータ版のバージョン1.5.8を使用しましたが、安定版1.0.6も適しています。 また、PowerButton用の小さなライブラリが必要になります(ユーティリティに関するセクションの記事の最後にあるリンク)。

スキーム

接続図は次のようになります。



回路図は次のとおりです。



スキームの説明:

  1. D2はボタンのSIGピンに接続されています。
  2. D4はボタンのVCCピンに接続されています。
  3. D5はMOSFETシャッターに接続されています。


D2ピンへの接続は偶発的ではありません:ボタンのライブラリは割り込みを使用し、Arduino Nanoの場合、D2 / D3ピンのみがこれらの目的のために設計されています(Arduinoのどのピンが割り込みをサポートしているかを確認できます )。

Arduino用プログラムのソースコード

#include <PowerButton.h>

#define POWER_PIN_SIG 2
#define POWER_PIN_VCC 4
#define POWER_FET_GATE 5
#define POWER_PIN_INT 0

PowerButtonSwitch pbs ;

void onPowerOn {
シリアル println "Power On" ;
digitalWrite POWER_FET_GATE、 1 ; //ゲートを開きます
}

void onPowerOff {
シリアル println "Power Off" ;
digitalWrite POWER_FET_GATE、 0 ; //ゲートを閉じます
}

void setup {
シリアル 開始 9600 ;

// ArduinoからMOSFETシャッター(ゲート)への信号出力
pinMode POWER_FET_GATE、OUTPUT ;
digitalWrite POWER_FET_GATE、 0 ;

//電源ボタンの初期設定
pbs。 setupPowerButton POWER_PIN_SIG、POWER_PIN_VCC、POWER_PIN_INT ;

//現在の値を読み取ります
//ボタンからの信号がある場合、
// Raspberry Piを有効にします
int st = pbs。 getSwitchStatus ;
if st == POWER_ON {
onPowerOn ;
}

//イベントハンドラーを追加します
pbs。 onPowerOn onPowerOn ;
pbs。 onPowerOff onPowerOff ;
}

voidループ {
//空のループ
遅延 1000 ;
シリアル println "アクションなし" ;
}


ライブラリはほとんどのアクションを実行するため、コードは非常に単純です。

ソリューションテスト

テスト付きの短いビデオ:

ご覧のとおり、視覚的にすべてが機能します。 それでも、TP1 / TP2ピン間の電圧を確認する必要があります(技術はこちらです )。 〜4.6Vの値を取得しました。推奨値は4.75V以上です。

おわりに

すべてが機能するという事実にもかかわらず、5Vからの周辺電流を接続する場合、Arduinoピンでは十分ではないという疑いがあります。 MOSFETとボタンはペアで完全に機能します。このようなバンドルは、将来のプロジェクトに役立ちます。

書き込みに使用されるユーティリティとライブラリ:


これは私の最初の投稿なので、レビューとコメントは非常に役立ちます。

Source: https://habr.com/ru/post/J242739/


All Articles