信頼性の高い自動猫給餌器を自作する – ストレスフリーな猫の世話のためのDIYプロジェクト
必要な部品と材料
| 部品 | 数量 |
|---|---|
| 機械式コンセントタイマー | 1 |
| ステッピングモーター | 1 |
| ステッピングモータードライバー L9110S | 1 |
| リニアシャフトサポート SHF8 | 1 |
| USB壁面充電器 | 1 |
| SparkFun Arduino Pro Mini 328 - 5V/16MHz | 1 |
| USBオス-DIP変換アダプター | 1 |
| USB延長ケーブル | 1 |
| ブラケット(コーナーブレース) | 1 |
プロジェクト概要
数日間家を空ける際、猫の餌やりは大きな課題でした。友人や親戚に世話を頼むか、市販の自動給餌器を検討しましたが、高価でドライフード専用、かつ大型でスペースを取るものばかり。そこで、コンパクトでウェットフード対応、低コストな自動給餌器を自作することにしました。
ウェットフードは開封後1日で傷むため、1回分の給餌のみを行う設計にしました。これで2日間の不在に対応できます(自由時間ゲット!)。
動作原理
- 空のヨーグルト容器にフードを詰め、蓋を閉める
- コンセントタイマーを設定し、指定時刻に通電するようセット
- 通電するとステッピングモーターが蓋を開け、猫が食事できる
- 帰宅後、容器を取り出して洗浄・補充し、再びセットしてサイクル繰り返し
主要な製作手順はこの動画で確認できます。
Arduinoコード
Arduino Pro Miniに書き込むファームウェアです。Arduino IDEとFTDIアダプター、Mini-B USBケーブルで書き込みます。書き込み手順の動画も参考にしてください。
コードはシンプルです。セットアップでステッピングモーターを初期回転させ、メインループではボタン押下を検知すると再度回転します。
// Automatic cat feeder made by: J. Rundhall
// Original stepper code from: R. Jordan Kreindler, October 2016
float RPM;
boolean isButtonpressed = false;
unsigned long timee;
// Pin assignments
int buttonPIN = 6;
int aPin = 4; // IN1
int bPin = 3; // IN2
int aPrimePin = 5; // IN3
int bPrimePin = 2; // IN4
int one = aPin;
int two = bPin;
int three = aPrimePin;
int four = bPrimePin;
int degrees = 0;
int delay1 = 5; // ステップ間遅延 (ms)
int delay2 = 200; // 1回転後の遅延 (ms)
int count = 0;
int numberOfRotations = 1;
void setup() {
Serial.begin(9600);
pinMode(6, INPUT_PULLUP); // ボタン
pinMode(aPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(aPrimePin, OUTPUT);
pinMode(bPrimePin, OUTPUT);
Serial.println(" Clockwise");
digitalWrite(aPin, LOW);
digitalWrite(bPin, LOW);
digitalWrite(aPrimePin, LOW);
digitalWrite(bPrimePin, LOW);
for(int ii=0; ii<20; ii++) doTurn();
}
void loop() {
int sensorVal = digitalRead(6);
// プルアップのためロジック反転: 押下時LOW
if (sensorVal == LOW) {
isButtonpressed = true;
} else {
if(isButtonpressed) {
isButtonpressed = false;
doTurn();
digitalWrite(aPin, LOW);
digitalWrite(bPin, LOW);
digitalWrite(aPrimePin, LOW);
digitalWrite(bPrimePin, LOW);
}
}
}
void doTurn() {
// ハーフステップ駆動シーケンス (8ステップ)
// 1. aPin HIGH
digitalWrite(aPin, HIGH); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
// 2. aPin & bPin HIGH
digitalWrite(aPin, HIGH); digitalWrite(bPin, HIGH); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
// 3. bPin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, HIGH); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
// 4. bPin & aPrimePin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, HIGH); digitalWrite(aPrimePin, HIGH); digitalWrite(bPrimePin, LOW); delay(delay1);
// 5. aPrimePin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, HIGH); digitalWrite(bPrimePin, LOW); delay(delay1);
// 6. aPrimePin & bPrimePin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, HIGH); digitalWrite(bPrimePin, HIGH); delay(delay1);
// 7. bPrimePin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, HIGH); delay(delay1);
// 8. bPrimePin & aPin HIGH
digitalWrite(aPin, HIGH); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, HIGH); delay(delay1);
count += 8;
degrees = (360.0 * (count / 400.0));
if ((numberOfRotations % 2) == 1) {
Serial.println(" Clockwise ");
Serial.println(degrees);
} else {
Serial.println(" Anti-Clockwise ");
degrees = 360 - degrees;
Serial.print("-");
Serial.println(degrees);
}
if (count == 160) { // 1回転完了 (400ステップの40%? 要確認)
numberOfRotations++;
timee = millis();
RPM = timee / numberOfRotations;
RPM = (60000.00 / RPM);
if (numberOfRotations >= 10) {
Serial.print("RPM:");
Serial.println(round(RPM));
}
delay(delay2);
count = 0;
// 回転方向を交互に反転
if ((numberOfRotations) % 2 == 0) {
aPin = four; bPin = three; aPrimePin = two; bPrimePin = one;
} else {
aPin = one; bPin = two; aPrimePin = three; bPrimePin = four;
}
digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW);
}
}
回路図・配線
まず電子部品の配線を行います。半田付けはUSBアダプター基板への電源ケーブル接続のみ2箇所です。230V商用電源に接続する前に、電流制限・測定機能付きのベンチ電源で動作確認することを強く推奨します。誤配線による部品破損を防げます。消費電流は5Vで1A未満であるべきです。
次にコーナーブレースを組み立て、ヨーグルト容器を加工して機構に固定します。
製造プロセス
- 全自動ドリップコーヒーメーカー:歴史、設計、将来動向
- DIYサーモカム:教室アイデアからグローバル製品へ
- 自動バーフィーダー完全ガイド:特徴・メリット・運用ベストプラクティス
- 自動プレス機の理解:機能、メリット、用途
- プレスフィーダーの理解:メカニズム、機能、産業用途
- 自動パワープレスの特長・メリット・用途:金属成形現場の自動化核心機器
- 空圧バーフィーダー:CNC旋盤自動化のコスト効率ソリューション
- 自動パイプベンダーの理解:機能、メリット、用途
- 自動ロータリーテーブルの理解:金属加工における精度と効率
- オートマチックトランスミッション(AT)完全ガイド:種類・構造・仕組み
- 自動給油システム(ALS)完全ガイド:仕組み・種類・導入メリット