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.

[3D model= »COLLIER.obj » width= »100% » height= »500″ background= »BDBDBD » opacity= »0,3″ camera= »50,50,300″ modelposition= »2,2,2″ modelscale= »2,2,2″ ambient= »945757″]

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.