Crockets

5,00

  • This nice 3D printable device can help you so much!
  • Designed to work with a Arduino or any PIC
  • Pet activation through the big button

What you need:

  • 3D printed parts, available for download the STL files
  • A food container, like that available at ikea

Risultati immagini per contenitori per alimenti

  • A 12V DC gearmotor, the GW370 for example. available on ebay
  • Arduino Nano or UNO or similar
  • Microswitch
  • 16×2 simple display
  • DIY shield for DC motor and pushbutton

 

Here is a piece of code that can work fine:

// INSERITO MODULO RELAY
// dosaggio circa 3 grammi al secondo

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 6, 5, 4, 3);

//INPUT OUTPUT
const int MOTORE_PIN = 7;
const int SWITCH_PIN = 8;
const int LED_PIN = 13;
const int SET_PIN = A0;
const int PIU_PIN = A1;
const int MENO_PIN = A2;

 

//MILLIS Display
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 5000; // aggiornamento display

//MILLIS Menu
unsigned long time1 = 0;
unsigned long setModeTime = 2000;

//COSTANTI DOSAGGIO
int qta = 100; // quantità giornaliera grammi
int counterM = 0; // quante volte ha premuto il pulsante
int counterA = 0; // quanto volte è scattato in automatico
int smallDose = 7; // grammi
int bigDose = 15; // grammi
int tempoSmall = 0; // tempo di accensione della coclea in millisecondi
int tempoBig = 0; // tempo di accensione della coclea in millisecondi
int pappato = 0; // grammi
int oreFraDosaggi = 4; // un dosaggio ogni 4 ore
unsigned long minutiFraDosaggi = 239; // minuti + 1
unsigned long minutiUltimoDosaggio = 0;
unsigned long minutiNow = 0;

unsigned long minutiFraPress = 0;
unsigned long minutiUltimoPress = 0;

int abilitato = 1;

 

void setup() {

pinMode(MOTORE_PIN, OUTPUT);
//pinMode(SWITCH_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(SET_PIN, INPUT);
pinMode(PIU_PIN, INPUT);
pinMode(MENO_PIN, INPUT);

Serial.begin(9600);

digitalWrite(MOTORE_PIN, LOW); // blocca il motore
lcd.begin(16, 2);
lcd.setCursor(0, 1); //colonna riga
lcd.print(“Initializing…”);
tone(8, 5);
delay(2000);
noTone(8);
}

/*void loop(){
main();
delay(50);
}*/

 

void loop() {
bigDose = qta / 6; // un dosaggio ogni 4 ore
minutiNow = (millis() / (60000));
unsigned long currentMillis = millis(); // variabile display
tempoSmall = (smallDose / 3) * 1000;
tempoBig = (bigDose / 3) * 1000;

 

// AGGIORNAMENTO DISPLAY
if (currentMillis – previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
aggiornaDisplay();
aggiornaSeriale();
}

// START IN AUTOMATICO
if (minutiNow >= (minutiUltimoDosaggio + minutiFraDosaggi)) {
digitalWrite(MOTORE_PIN, HIGH); // motore avviato
digitalWrite(LED_PIN, HIGH);
delay(tempoBig); // tempo motore
pappato = pappato + bigDose; // aumenta il pappato
minutiUltimoDosaggio = minutiNow; // aggiorna variabile
counterA++;
digitalWrite(MOTORE_PIN, LOW);
digitalWrite(LED_PIN, LOW);
}

// START MOTORE DA PULSANTE
// abilitazione pulsante
if(minutiNow >=(minutiUltimoPress + minutiFraPress)){
abilitato = 1;
}else{
abilitato = 0;
}

if (digitalRead(SWITCH_PIN) == LOW && (abilitato == 1)) { // pulsante spinto
digitalWrite(MOTORE_PIN, HIGH); // motore avviato
delay(tempoSmall); // tempo motore
counterM++; // aumenta il contatore
pappato = pappato + smallDose; // aumenta il pappato
minutiUltimoPress = minutiNow;
digitalWrite(MOTORE_PIN, LOW);
}
else {
digitalWrite(MOTORE_PIN, LOW);
}

 

 

// ENTRATA NEL MENU
if ( analogRead (SET_PIN) < 1000) {
time1 = millis();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Pulsante set”);
delay(1000);
setMode();

 

}
delay(100);

}

void setMode() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Set Mode”);
boolean setMode = true;
time1 = millis();
delay(1000);
while (setMode) {
if ( analogRead(SET_PIN) < 1000 || analogRead(PIU_PIN) < 1000 || analogRead(MENO_PIN) < 1000 ) {
time1 = millis();
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Quantità giornaliera”);
if (time1 > 0 && (setModeTime * 2) < (millis() – time1) ) {
setMode = false;
}
delay(500);
}
}

 

void aggiornaDisplay() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Man:”);
lcd.print(counterM);
lcd.print(“:”);
lcd.print(abilitato);
lcd.print(” Auto:”);
lcd.print(counterA);
lcd.setCursor(0, 1);
//lcd.print(“Pappato: “);
lcd.print(“Qta:”);
lcd.print(pappato);
lcd.print(“g”);
lcd.print(” Nxt:”);
lcd.print((minutiUltimoDosaggio + minutiFraDosaggi) – minutiNow);
}

 

void aggiornaSeriale() {
/*Serial.print(“millis”);
Serial.print(millis());
Serial.print(” minutiNow”);
Serial.print(minutiNow);
Serial.print(” minuti ultimo doaaggio”);
Serial.print(minutiUltimoDosaggio);
Serial.print(” minuti fra doaaggio”);
Serial.println(minutiFraDosaggi);*/
Serial.print(“Abilitato: “);
Serial.println(abilitato);
}

Categoria:

Descrizione

Screw based cat feeder, best with Arduino Inside

Recensioni

Ancora non ci sono recensioni.

Recensisci per primo “Crockets”

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *