今日、私たちはあなたのペットにタイムリーに自動的に食べ物を提供できるArduinoベースの自動ペットフィーダーを構築しています。それは持ってDS3231 RTCあなたのペットは餌を与えられるべきで設定された時間と日付を使用(リアルタイムクロック)モジュールを、。そのため、ペットの食事スケジュールに合わせて時間を設定することで、デバイスは自動的にフードボウルをドロップまたは充填します。
この回路では、16 * 2 LCDを使用して、ArduinoUNOでDS3231RTCモジュールを使用して時間を表示しています。また、サーボモーターを使用してコンテナを回転させ、餌を提供し、4 * 4マトリックスキーパッドを使用してペットの餌やりの時間を手動で設定します。ペットに提供したい食品の量に応じて、回転角と容器の開放時間を設定できます。食べ物の量は、ペットが犬、猫、鳥のいずれであるかによっても異なります。
必要な材料
- Arduino UNO
- 4 * 4マトリックスキーパッド
- 16 * 2 LCD
- ボタンを押す
- サーボモーター
- 抵抗器
- 接続線
- ブレッドボード
回路図
このArduinoベースのCatFeederでは、時刻と日付を取得するために、RTC(リアルタイムクロック)モジュールを使用しました。4 * 4マトリックスキーパッドを使用して、16x2LCDを使用してペットの食事時間を手動で設定しました。サーボモーターが容器を回転させ、ユーザーが設定した時間に食品を落とします。LCDは日付と時刻を表示するために使用されます。完全な作業は、最後にあるビデオで見つけることができます。
3Dプリントされたペットフィーダーモデル
このArduinoペットフィーダーコンテナは、3Dプリンターを使用して設計されています。こちらからファイルをダウンロードして、同じデザインを印刷することもできます。このモデルの印刷に使用される素材はPLAです。下の画像に示すように、4つの部分があります。
次の図に示すように、4つの部品を組み立て、サーボモーターを接続します。
3D印刷を初めて使用する場合は、ここから開始ガイドをご覧ください。このペットフィーダーのSTLファイルはこちらからダウンロードできます。
DS3231RTCモジュール
DS3231はRTC(リアルタイムクロック)モジュールです。これは、ほとんどのエレクトロニクスプロジェクトの日付と時刻を維持するために使用されます。このモジュールには独自のコイン型電源があり、主電源が切断された場合やMCUがハードリセットされた場合でも日付と時刻を維持します。したがって、このモジュールで日付と時刻を設定すると、常にそれを追跡します。私たちの回路では、DS3231を使用して、アラームのように、ペットの飼い主が設定した時間に応じてペットに餌を与えています。時計が設定時間に達すると、サーボモーターが作動してコンテナゲートが開き、ペットのフードボウルに食べ物が落ちます。
注:このモジュールを初めて使用するときは、日付と時刻を設定する必要があります。Arduinoで時間を読み取るためにRTCICDS1307を使用することもできます。
コードと説明
自動ペットフィーダーの完全なArduinoコードは最後に記載されています。
Arduinoには、サーボモーターとLCD 16 * 2を使用するためのデフォルトライブラリがあります。ただし、ArduinoでDS3231RTCモジュールと4 * 4 Matrixキーパッドを使用するには、ライブラリをダウンロードしてインストールする必要があります。両方のライブラリのダウンロードリンクを以下に示します。
- DS3231 RTC(リアルタイムクロック)モジュールライブラリ
- 4 * 4マトリックスキーパッドライブラリ
以下のコードでは、ライブラリ 「#include
#include
以下のコードでは、4 * 4マトリックスキーパッドのキーマップを定義し、キーパッドの行と列にArduinoピンを割り当てています。
char keys = {{'1'、 '2'、 '3'、 'A'}、{'4'、 '5'、 '6'、 'B'}、{'7'、 '8'、 ' 9 '、' C '}、{' * '、' 0 '、'# '、' D '}}; バイトrowPins = {2、3、4、5}; バイトcolPins = {6、7、8、9};
ここでは、コード内の以下のコマンドを使用してキーパッドを作成しています。
キーパッドkpd = Keypad(makeKeymap(keys)、rowPins、colPins、ROWS、COLS);
DS3231のSCLおよびSDAピンに接続するためのA4およびA5Arduinoピンの割り当て。また、LCDにピンを割り当て、サーボモーターを初期化します。
DS3231 rtc(A4、A5); サーボservo_test; //接続されたサーボのサーボオブジェクトを初期化しますLiquidCrystallcd(A0、A1、A2、11、12、13); // LCオブジェクトを作成します。パラメータ:(rs、enable、d4、d5、d6、d7)
以下のコードでは、t1からt6、キー、配列r、およびフィードを宣言しています。
int t1、t2、t3、t4、t5、t6; ブールフィード= true; 文字キー; int r;
以下のコードでは、最初にすべてのコンポーネントをセットアップしています。このコードのように 「servo_test.attach(10);」 サーボはArduinoの10番目のピンに取り付けられています。A0、A1、A2を出力ピンとして定義し、LCDとRTCモジュールを初期化します。
void setup(){servo_test.attach(10); //サーボの信号ピンをarduinortc.begin();のピン9に接続します。lcd.begin(16,2); Servo_test.write(55); Serial.begin(9600); pinMode(A0、OUTPUT); pinMode(A1、OUTPUT); pinMode(A2、OUTPUT); }
ここで、ループがどのように機能しているかを理解することが重要です。押しボタンが押されるたびに、 「buttonPress = digitalRead(A3)」 で読み取ることができる1を意味します。これで、「if」ステートメント内に入り、 「setFeedingTime」 関数が 呼び出され ます。次に、リアルタイムとユーザーが入力した時刻を比較します。条件が真の場合、つまりリアルタイムと入力された時間が同じである場合、サーボモーターは100度の角度まで回転し、0.4秒の遅延後に初期位置に戻ります。
void loop(){lcd.setCursor(0,0); int buttonPress; buttonPress = digitalRead(A3); if(buttonPress == 1)setFeedingTime(); lcd.print( "時間:");文字列t = ""; t = rtc.getTimeStr(); t1 = t.charAt(0)-48; t2 = t.charAt(1)-48; t3 = t.charAt(3)-48; t4 = t.charAt(4)-48; t5 = t.charAt(6)-48; t6 = t.charAt(7)-48; lcd.print(rtc.getTimeStr()); lcd.setCursor(0,1); lcd.print( "日付:"); lcd.print(rtc.getDateStr()); if(t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true){servo_test.write(100); //サーボを指定された角度に回転させるコマンドdelay(400); Servo_test.write(55); feed = false; }}
では 、ボイドsetFeedingTime() ファンクションコード、プッシュボタンを押した後、我々はペットの給餌時間を入力することができ、その後、私たちはその時間を節約するために押して「D」を持っています。保存された時間がリアルタイムと一致すると、サーボが回転を開始します。
void setFeedingTime(){feed = true; int i = 0; lcd.clear(); lcd.setCursor(0,0); lcd.print( "給餌時間を設定"); lcd.clear(); lcd.print( "HH:MM"); lcd.setCursor(0,1); while(1){key = kpd.getKey(); char j; if(key!= NO_KEY){lcd.setCursor(j、1); lcd.print(key); r =キー-48; i ++; j ++; if(j == 2){lcd.print( ":"); j ++; } delay(500); } if(key == 'D'){key = 0; ブレーク; }}}
自動ペットフィーダーの働き
Arduino Unoにコードをアップロードすると、16 * 2LCDに時刻と日付が表示されます。押しボタンを押すと、ペットの給餌時間が求められ、4 * 4マトリックスキーパッドを使用して時間を入力する必要があります。ディスプレイには入力した時間が表示され、「D」を押すと時間を節約できます。リアルタイムと入力時刻が一致すると、サーボモータを初期位置55⁰から100⁰に回転させ、遅れて再び初期位置に戻ります。そのため、サーボモーターは食品容器ゲートに接続されており、移動するとゲートが開き、ボウルやプレートにある程度の食品が落下します。0.4秒の遅延の後、サーボモーターが再び回転し、ゲートを閉じます。プロセス全体が数秒以内に完了します。これはあなたのペットがあなたが入った時間に自動的に食べ物を得る方法です。
食べ物に応じて時間と程度を変える