Croquettes

Croquettes

Électronique – Robot

Le Chat part avec nous au Canada, et les restriction de poids pour l’emener en avion, imposent qu’il fasse un régime (un peu costaud, le Chat).

Le veto nous a indiqué qu’il était préférable de lui donner sa dose de croquettes en plusieurs fois, répartie en petites portions, étalées sur la journée.

Facile quand on est à la maison, mais ce n’est pas le cas tous les jours. Je me suis donc mis en quête d’une machine qui remplirait ce rôle. J’en ai trouvé, mais souvent très chères, et peu flexibles en terme de dose/programation.

Avec mes recherches, je me sentais à l’aise pour fabriquer une machine moi-même. Le design que j’ai testé en premier, est basé sur du tuyaux de PVC. Facile à trouver, et peu onéreux.

Le système consiste en un silo rempli de croquettes, et d’une balle, qui sert à fermer et à doser en même temps. La balle est montée sur un servomoteur, qui est activé par un micro-contrôleur, à intervalles réguliers.

Les colliers, la balles et le système de couplage au servo, sont imprimés en 3D. Toutes les parties en contact avec les croquettes ont été poncées et enduites de Mod Podge. Ça a pour effet de boucher les petites crevasses entre les couches de PLA, et ça rend le nettoyage plus simple.

4 tuyaux de PVC plus fins font office de pieds, et soutiennent toute la structure. Des vis directement dans les colliers permettent de régler la hauteur du silo par rapport au sol/bol.

Le code n’est probablement pas des plus élégants, mais ça fonctionne pour prototyper 🙂 et je suis ouvert à toute suggestion


// CAT FOOD DISPENSER

#include <Servo.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
Servo myServo; // create myServo object to control a myServo
int pos = 10; // variable to store the myServo position

void setup()
{

 

Serial.begin(9600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}

if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

pinMode(11, OUTPUT);
delay(1000);
digitalWrite(11, LOW);
myServo.attach(9); // attaches the myServo on pin 9 to the myServo object

}

void loop() {
DateTime now = rtc.now();

// Serial.print(now.year(), DEC);
// Serial.print('/');
// Serial.print(now.month(), DEC);
// Serial.print('/');
// Serial.print(now.day(), DEC);
// Serial.print(" (");
// Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
// Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);

/*------------------------------------------------------------------------------------------------------------------*/

if (now.hour() == 7 and now.minute() == 00 and now.second() <= 10 )
{ digitalWrite(11, HIGH);
myServo.write(160);
delay(3000);
digitalWrite(11, LOW);
delay(500);
digitalWrite(11, HIGH);
delay(500);
digitalWrite(11, LOW);
}

if (now.hour() == 7 and now.minute() == 00 and now.second() <= 21 )
{ digitalWrite(11, HIGH);
myServo.write(10);
delay(3000);
digitalWrite(11, LOW);
delay(3000);
}

/*------------------------------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------------------------------*/

if (now.hour() == 9 and now.minute() == 30 and now.second() <= 10 )
{ digitalWrite(11, HIGH);
myServo.write(160);
delay(3000);
digitalWrite(11, LOW);
delay(500);
digitalWrite(11, HIGH);
delay(500);
digitalWrite(11, LOW);
}

if (now.hour() == 9 and now.minute() == 30 and now.second() <= 21 )
{ digitalWrite(11, HIGH);
myServo.write(10);
delay(3000);
digitalWrite(11, LOW);
delay(3000);
}

/*------------------------------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------------------------------*/

if (now.hour() == 12 and now.minute() == 00 and now.second() <= 10 )
{ digitalWrite(11, HIGH);
myServo.write(160);
delay(3000);
digitalWrite(11, LOW);
delay(500);
digitalWrite(11, HIGH);
delay(500);
digitalWrite(11, LOW);
}

if (now.hour() == 12 and now.minute() == 00 and now.second() <= 21 )
{ digitalWrite(11, HIGH);
myServo.write(10);
delay(3000);
digitalWrite(11, LOW);
delay(3000);
}

/*------------------------------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------------------------------*/

if (now.hour() == 14 and now.minute() == 30 and now.second() <= 10 )
{ digitalWrite(11, HIGH);
myServo.write(160);
delay(3000);
digitalWrite(11, LOW);
delay(500);
digitalWrite(11, HIGH);
delay(500);
digitalWrite(11, LOW);
}

if (now.hour() == 14 and now.minute() == 30 and now.second() <= 21 )
{ digitalWrite(11, HIGH);
myServo.write(10);
delay(3000);
digitalWrite(11, LOW);
delay(3000);
}

/*------------------------------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------------------------------*/

if (now.hour() == 17 and now.minute() == 00 and now.second() <= 10 )
{ digitalWrite(11, HIGH);
myServo.write(160);
delay(3000);
digitalWrite(11, LOW);
delay(500);
digitalWrite(11, HIGH);
delay(500);
digitalWrite(11, LOW);
}

if (now.hour() == 17 and now.minute() == 00 and now.second() <= 21 )
{ digitalWrite(11, HIGH);
myServo.write(10);
delay(3000);
digitalWrite(11, LOW);
delay(3000);
}

/*------------------------------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------------------------------*/

if (now.hour() == 19 and now.minute() == 30 and now.second() <= 10 )
{ digitalWrite(11, HIGH);
myServo.write(160);
delay(3000);
digitalWrite(11, LOW);
delay(500);
digitalWrite(11, HIGH);
delay(500);
digitalWrite(11, LOW);
}

if (now.hour() == 19 and now.minute() == 30 and now.second() <= 21 )
{ digitalWrite(11, HIGH);
myServo.write(10);
delay(3000);
digitalWrite(11, LOW);
delay(3000);
}

/*------------------------------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------------------------------*/

if (now.hour() == 22 and now.minute() == 00 and now.second() <= 10 )
{ digitalWrite(11, HIGH);
myServo.write(160);
delay(3000);
digitalWrite(11, LOW);
delay(500);
digitalWrite(11, HIGH);
delay(500);
digitalWrite(11, LOW);
}

if (now.hour() == 22 and now.minute() == 00 and now.second() <= 21 )
{ digitalWrite(11, HIGH);
myServo.write(10);
delay(3000);
digitalWrite(11, LOW);
delay(3000);
}

/*------------------------------------------------------------------------------------------------------------------*/

}

J’ai également créé un PCB pour relier mon arduino aux différents composants. Cette étape sera détaillée dans un autre post.

Pour conclure, entre les différentes étapes d’apprentissage et de prototypage, ce projet m’a pris un bon mois et demi. Entre temps, j’ai nourri mon chat manuellement.

Leave a Reply