2019年5月11日土曜日

猫よけ水鉄砲用回路ProMicro利用版


背景

猫よけ水鉄砲の作成を依頼されたので、部品を更新して同様の動きをする装置を作りました。

当時の記事は残したまま、ProMicroというArduino互換機とMOSFETという大電流を制御する部品を利用した回路の作り方を共有します。

使ったもの

新しい部品
  • ProMicro x1
    Leonardoとして使えるArduino互換機です。
    スイッチサイエンス(Pro Micro 5V/16MHz)、amazonaliexpressなどで買えます。
    スイッチサイエンスが設計したもの(Pro micro スイッチサイエンス版)は、レギュレータが載ってないので、今回の用途には不向きです。
  • Micro USBケーブル x1
    ProMicroへのプログラム書き込みに利用します。
  • ミニブレッドボード x1
    前回はよく使われる大きさのものを利用しましたが、今回は小さい部品を使うため、ミニブレッドボードに収めました。
  • P-ch MOSFET J380 x1
    水鉄砲の6Vの制御に利用しました。
  • N-ch MOSFET FKI10531  x1
    P-ch MOSFETの制御に利用しました。
  • 10K抵抗 x2
    MOSFETのプルアップ(電圧の引き上げ)やプルダウン(電圧の引き下げ)に利用しました。

過去と同じ部品

ソフトウェア
  • Arduino IDE
    Arduinoのプログラム開発環境の1つです。
    下記のページからダウンロードできます。
    Download the Arduino IDE

使った工具は過去の記事と同じです。

水鉄砲の改造やセンサの取り付けなど

前回の記事を参考にしてください。

電動水鉄砲で猫よけを作る方法

回路作り

全体像

2019年ProMicro版の回路はこちらです。


組み立てるとこうなりました。


それぞれ解説します。

水鉄砲の回路

電池、モーター、スイッチで構成されます。
それぞれを繋ぐ線を引き出して、Arduinoで制御します。


ProMicro(Arduino) + 電源

スイッチがONになると回路に6Vを供給します。
6VをProMicroのRAWに入力することで、VCCから5Vが出てきます。
ProMicroはその5Vで動きます。


過去の回路ではArduino Pro Miniを利用していましたが、今回はPro Microを利用しました。
ProMicroはmicroUSBポートが付いているためPro Miniに比べてプログラムが書き込みやすいです。


過去の回路では3.3Vを作るレギュレータ(電圧を降下させる電子部品)を利用していましたが、今回はProMicroに載っているレギュレータを利用しました。
(ProMiniもレギュレータを搭載しているため過去の回路もレギュレータを使わないものに変更できますが、この記事を書くので過去の記事はそのままにします。)
PriMicroの中央の、オレンジ色の部品に挟まれた、足が5本ある部品がレギュレータです。

製造元のSparkfunのページの情報によるとRAWピンに12Vまで入力できるようで、RAWに入力された電気をレギュレータがマイコンなどの電源向けの5Vに変換してくれます。

なお、ProMicroは電源を入れると光るLEDが回路に組み込まれているため、消費電力を少しでも減らしたい場合や、光るのが気になる場合は、このLEDをハンダごてで取り外すのが良いと思います。


モーター制御

D4ピンがHIGHになると、P-ch MOSFETとN-ch MOSFETを介して、モーターに6Vを供給する回路です。


過去の記事ではリレーとフォトカプラを利用していましたが、部品の大きさを小さくしてミニブレッドボードに収めたかったため、MOSFETを2種類組み合わせて実現しました。

6Vの制御にはP-ch MOSFETを利用します。
P-ch MOSFETのゲートをプルアップすることで、信号が無いときは6Vが供給されない回路になっています。
ゲートの電圧が低くなると、ソースに供給されている6Vをドレインから供給します。


P-ch MOSFETで扱うモーターや電圧が大きい場合は、バリスタなどをモーターとMOSFETの間に設置してMOSFETを保護するのが良いと思います。
しかし、今回は6Vのモーターの駆動に耐電圧100VのMOSFETを使っているので、保護しなくても十分耐えると判断してバリスタは入れていません。

P-ch MOSFETで扱う6VをProMicroに流すと故障の原因になるため、、N-ch MOSFETを介してP-ch MOSFETのゲートを制御します。(N-ch MOSFETではなくトランジスタでも可能です。)N-ch MOSFETのゲートをプルダウンすることで、信号が無いときは電気を流さない回路になっています。
ゲートに電圧をかけると、ドレインの電気をGNDに流します。


まとめると、このような動きになります。
ProMicroの信号線がLOW -> N-ch MOSFETは電気を流さない -> P-ch MOSFETのゲートの電圧が高いままになり、モーターに電気が流れない
ProMicroの信号線がHIGH -> N-ch MOSFETが電気を流す -> P-ch MOSFETのゲートの電圧が低くなり、モーターに電気が流れる

センサ

D2で猫を検知する信号を、D3で人を検知する信号を読み取ります。


過去の記事では3.3Vで動かましたが、このセンサモジュールは5Vでも動くように作られているため、この回路では5Vで動かしています。

プログラム

下記の点以外は基本的に前回の記事と同じです。

  • 利用する信号線を変更したので、プログラムの先頭で定義するピンの番号を変えました
  • PriMicroのD17はLOWでLEDが点灯するため、LEDのピンに対するLOWとHIGHの扱いを変えました(参考: ProMicroでLチカする方法

#define LOWER_SENSOR_PIN 4
#define UPPER_SENSOR_PIN 5
#define MOTOR_PIN        6
#define LED_PIN          17

boolean upper_sensor_val = LOW;
boolean lower_sensor_val = LOW;

void setup() {
  // Serial.begin(9600);
  pinMode(UPPER_SENSOR_PIN, INPUT);
  pinMode(LOWER_SENSOR_PIN, INPUT);
  pinMode(MOTOR_PIN,        OUTPUT);
  pinMode(LED_PIN,          OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, LOW);
  upper_sensor_val = digitalRead(UPPER_SENSOR_PIN);
  lower_sensor_val = digitalRead(LOWER_SENSOR_PIN);
  // Serial.println(up_sensor_val);
  // Serial.println(down_sensor_val);
  delay(10);
  digitalWrite(LED_PIN, HIGH);

  if ( upper_sensor_val == LOW &&
       lower_sensor_val == HIGH ) {
    // Serial.println("ON!");
    digitalWrite(MOTOR_PIN, HIGH);
    delay(2000);
    digitalWrite(MOTOR_PIN, LOW);
    delay(3000);
  } else {
    // Serial.println("OFF");
    digitalWrite(MOTOR_PIN, LOW);
    delay(5000);
  }
}

ProMicroをMicro USBケーブルでArduinoと接続し、Arduino IDEで、ボードをLeonardo、ポートを接続しているArduinoのCOMポートにして、書き込みボタンを押すとプログラムを書き込めます。



まとめ

ProMicroとMOSFETを利用して猫の存在判定と水鉄砲の制御をする回路を作れました。

参考

電動水鉄砲で猫よけを作る方法
ProMicroでLチカする方法

参考

2021.09.23 スイッチサイエンス版のProMicroはレギュレータが載っていないので、推奨部品から除外しました。

0 件のコメント :