Arduino justerbar sällskapsdjur mat Dispenser (3 / 4 steg)

Steg 3: kod

Detta är koden för arduino. Denna kod kontrollerar tid och jämför det med larm, om de matchar upp det kommer att vända motorn, trycka maten ut. För att räkna ut hur länge motorn ska vända för, arbetade vi fram hur mycket mat är befriaren för varje varv. En tur i en skruv pushteknik 10g och varje rotation tar 11 sekunder. Därför kommer att 2 skruvarna driva 20g var 11 sekunder. Vi utforskade hund Matportioner och arbetade att en liten hund behövde ca 50g av mat, ett medelstort behöver 140g och en stor behöver ca 260g. Detta innebär att för en liten del skruven vänder 27.5 sekunder, en medelstor portion vänder för ca 77 sekunder och en stor i 141 sekunder.

Beroende på den mat du använder kan du ändra detta. Du kan vanligtvis hitta korrekt portionr på baksidan av förpackningen. Kom ihåg att tidsskalan i arduino IDE i millisekunder. ((recommended portions size)/20) * 11 = tiden cog bör tur bibliotekets som vi alla kan hittas på webbplatsen för arduino de kallas time.h, DS1307RTC.h. De andra två är redan installerade i Arduino IDE. https://www.Arduino.cc/en/reference/libraries

bibliotek:

#include

#include / / behövs för RTC libraty

#include

#include / / verklig tid klocka bibliotek

LCD-setup

LiquidCrystal lcd (12, 11, 5, 8, 7, 6);

flyktiga boolean TurnDetected; Tillåter oss att använda & & uttalanden

flyktiga booleska upp;

Setup pin heltal

CONST int PinCLK = 2; Används för att generera avbrott med CLK signal

CONST int PinDT = 3; Används för att läsa DT signal

CONST int PinSW = 4; Används för växeln tryckknapp för Rotary Encoder

CONST int buttonPin = A3;

CONST int motorPin1 = 10;

CONST int motorPin2 = 13. numrera av tryckknapp PIN-koden för manuell matning 13

Setup-knappen

int buttonState = 0;

Omställningstiden mat förbestämda

int feed1hour = 10;

int feed1minute = 30.

int feed2hour = 17;

int feed2minute = 30.

setup mat belopp

int feedQty = 1;

Installationsprogrammet för LED

int LED1 = 0;

int LED2 = 1;

int LED3 = 9;

Ställ in tid

int tm. Timme = 1;

int tm. Minut = 1;

int tm. Timme = 1

void isr () {

om (digitalRead(PinCLK)) //setup för klicket på rotary encoder

upp = digitalRead(PinDT);

annat

upp =! digitalRead(PinDT);

TurnDetected = sant;

}

Ogiltiga inställningar () {

inställning av tid

Installationsprogrammet för LED

pinMode (LED1, OUTPUT);

pinMode (LED2, OUTPUT);

pinMode (LED3, OUTPUT);

Ange den LCD antal kolumner och rader:

LCD.BEGIN (16, 2);

setup Rotary encoder

pinMode(PinCLK,INPUT);

pinMode(PinDT,INPUT);

pinMode(PinSW,INPUT);

pinMode (buttonPin, ingång);

attachInterrupt (0, isr, faller); avbryta 0 alltid är ansluten till stift 2 på Arduino UNO

lcd.setCursor(17,0);

LCD.Print ("Tom & dans hund"); startskärm

lcd.setCursor(17,1);

LCD.Print ("mat Dispenser");

för (int positionCounter = 0; positionCounter < 17; positionCounter ++) {

Bläddra en position åt vänster:

lcd.scrollDisplayLeft();

vänta lite:

Delay(150);

}

Delay(3000);

för (int positionCounter = 0; positionCounter < 17; positionCounter ++) {

Bläddra en position åt vänster:

lcd.scrollDisplayRight();

vänta lite:

Delay(150);

}

lcd.setCursor(17,0);

LCD.Print("");

lcd.setCursor(17,1);

LCD.Print("");

}

Ogiltig loop () {//Main program loop - de flesta saker här!

statiska lång virtualPosition = 0; utan STATIC räknas det inte korrekt!

tmElements_t tm; Denna sectionm läser tiden från RT, då visar den.

RTC.read(tm);

lcd.setCursor (0, 0);

printDigits (tm. Timme). Ring för att skriva ut siffran funktion som lägger till inledande nollor som saknas kan vara

LCD.Print(":");

printDigits (tm. Minut).

LCD.Print(":");

printDigits (tm. Andra).

LCD.Print("");

LCD.Print ("storlek");

LCD.Print(feedQty);

LCD.Print("");

lcd.setCursor(0,1);

LCD.Print("1)");

printDigits(feed1hour);

LCD.Print(":");

printDigits(feed1minute);

LCD.Print ("2)");

printDigits(feed2hour);

LCD.Print(":");

printDigits(feed2minute);

om (! () digitalRead(PinSW))) {/ / kolla om tryckknapp trycks

Om ja ange programmering subrutinen

LCD.Blink(); Aktivera den blinkande markören:

lcd.setCursor(5,0);

LCD.Print ("SET");

virtualPosition = tm. Timme; behövs eller timmen blir noll varje gång du ändra klockan.

göra {

lcd.setCursor(0,0); Placera markören på tid timme

Delay(500); Dröjsmål behövs eller samma knapptryckning avslutas göra-samtidigt som tag kontroll för en annan knapp push!

om (TurnDetected) {/ / gör detta endast om rotation upptäcktes

IF (upp)

virtualPosition--;

annat

virtualPosition ++;

TurnDetected = false; INTE upprepa om loop tills nya rotation upptäckt

}

Här ändra jag timmen av tid-

TM. Timme = virtualPosition;

RTC.write(tm);

lcd.setCursor (0, 0);

printDigits (tm. Timme). sedan åter skriva ut timmen på LCD

} medan ((digitalRead(PinSW))); gör detta "gör" loop medan PinSW knappen inte trycks

lcd.noBlink();

Delay(1000);

ANGE MINS

LCD.Blink(); Aktivera den blinkande markören:

virtualPosition = tm. Minut. behövs eller i minuten blir noll varje gång du ändra klockan.

göra {

lcd.setCursor(3,0); Placera markören på tid Mins

Delay(500); Dröjsmål behövs eller samma knapptryckning avslutas göra-samtidigt som tag kontroll för en annan knapp push!

om (TurnDetected) {/ / gör detta endast om rotation upptäcktes

IF (upp)

virtualPosition--;

annat

virtualPosition ++;

TurnDetected = false; INTE upprepa om loop tills nya rotation upptäckt

}

Här ändra jag min tid-

TM. Minut = virtualPosition;

RTC.write(tm);

lcd.setCursor (3, 0);

printDigits (tm. Minut). sedan åter skriva ut min på LCD-skärmen

} medan ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

Ange antal - foder kvantitet

LCD.Blink(); Aktivera den blinkande markören:

virtualPosition = feedQty; behövs eller antal kommer att vara noll.

göra {

lcd.setCursor(14,0); Placera markören på Kvt

Delay(500); Dröjsmål behövs eller samma knapptryckning avslutas göra-samtidigt som tag kontroll för en annan knapp push!

om (TurnDetected) {/ / gör detta endast om rotation upptäcktes

IF (upp)

virtualPosition--;

annat

virtualPosition ++;

TurnDetected = false; INTE upprepa om loop tills nya rotation upptäckt

}

Här ändra jag den foder Kvt

feedQty = virtualPosition;

lcd.setCursor (14, 0);

LCD.Print(feedQty);

} medan ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

Ställa in Feed1 timmen

LCD.Blink(); Aktivera den blinkande markören:

virtualPosition = feed1hour; behövs eller kommer att vara noll till att börja med.

göra {

lcd.setCursor(2,1); Placera markören på feed1hour

Delay(500); Dröjsmål behövs eller samma knapptryckning avslutas göra-samtidigt som tag kontroll för en annan knapp push!

om (TurnDetected) {/ / gör detta endast om rotation upptäcktes

IF (upp)

virtualPosition--;

annat

virtualPosition ++;

TurnDetected = false; INTE upprepa om loop tills nya rotation upptäckt

}

Här ändra jag feed1 timme

feed1hour = virtualPosition;

lcd.setCursor(2,1);

printDigits(feed1hour);

} medan ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

Ange Feed1 Mins

LCD.Blink(); Aktivera den blinkande markören:

virtualPosition = feed1minute; behövs eller kommer att vara noll till att börja med.

göra {

lcd.setCursor(5,1); Placera markören på feed1minute

Delay(500); Dröjsmål behövs eller samma knapptryckning avslutas göra-samtidigt som tag kontroll för en annan knapp push!

om (TurnDetected) {/ / gör detta endast om rotation upptäcktes

IF (upp)

virtualPosition--;

annat

virtualPosition ++;

TurnDetected = false; INTE upprepa om loop tills nya rotation upptäckt

}

Här ändra jag i feed1 minuten

feed1minute = virtualPosition;

lcd.setCursor(5,1);

printDigits(feed1minute);

} medan ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

Ställa in Feed2 timmen

LCD.Blink(); Aktivera den blinkande markören:

virtualPosition = feed2hour; behövs eller kommer att vara noll till att börja med.

göra {

lcd.setCursor(10,1); Placera markören på feed1hour

Delay(500); Dröjsmål behövs eller samma knapptryckning avslutas göra-samtidigt som tag kontroll för en annan knapp push!

om (TurnDetected) {/ / gör detta endast om rotation upptäcktes

IF (upp)

virtualPosition--;

annat

virtualPosition ++;

TurnDetected = false; INTE upprepa om loop tills nya rotation upptäckt

}

Här ändra jag feed1 timme

feed2hour = virtualPosition;

lcd.setCursor(10,1);

printDigits(feed2hour);

} medan ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

Ange Feed2 Mins

LCD.Blink(); Aktivera den blinkande markören:

virtualPosition = feed2minute; behövs eller kommer att vara noll till att börja med.

göra {

lcd.setCursor(13,1); Placera markören på feed1minute

Delay(500); Dröjsmål behövs eller samma knapptryckning avslutas göra-samtidigt som tag kontroll för en annan knapp push!

om (TurnDetected) {/ / gör detta endast om rotation upptäcktes

IF (upp)

virtualPosition--;

annat

virtualPosition ++;

TurnDetected = false; INTE upprepa om loop tills nya rotation upptäckt

}

Här ändra jag i feed1 minuten

feed2minute = virtualPosition;

lcd.setCursor(13,1);

printDigits(feed2minute);

} medan ((digitalRead(PinSW)));

lcd.noBlink();

Delay(1000);

} / / end för huvudsakliga om rotationsencoder tryckknapp checker

CHECK FÖR MANUELL MATNING KNAPP

buttonState = digitalRead(buttonPin);

om (buttonState == hög) {

digitalWrite (motorPin1, hög);

digitalWrite (motorPin2, låg);

Delay(5000);

digitalWrite (motorPin1, låg);

digitalWrite (motorPin2, låg);

}

NÄR UTFODRINGEN TID OCH FODER OM MATCHAS

om (tm. Timme == feed1hour & & tm. Minut == feed1minute & & tm. För det andra == 0 & & feedQty == 1) {/ / om jag inte "kontrollera sekunder är noll

digitalWrite (motorPin1, hög);

digitalWrite (motorPin2, låg);

Delay(5000);

digitalWrite (motorPin1, låg);

digitalWrite (motorPin2, låg);

}

om (tm. Timme == feed1hour & & tm. Minut == feed1minute & & tm. För det andra == 0 & & feedQty == 2) {/ / om jag inte "kontrollera sekunder är noll

digitalWrite (motorPin1, hög);

digitalWrite (motorPin2, låg);

Delay(10000);

digitalWrite (motorPin1, låg);

digitalWrite (motorPin2, låg);

}

om (tm. Timme == feed1hour & & tm. Minut == feed1minute & & tm. För det andra == 0 & & feedQty == 3) {/ / om jag inte "kontrollera sekunder är noll

digitalWrite (motorPin1, hög);

digitalWrite (motorPin2, låg);

Delay(15000);

digitalWrite (motorPin1, låg);

digitalWrite (motorPin2, låg);

}

om (tm. Timme == feed2hour & & tm. Minut == feed2minute & & tm. För det andra == 0 & & feedQty == 1) {

digitalWrite (motorPin1, hög);

digitalWrite (motorPin2, låg);

Delay(27500);

digitalWrite (motorPin1, låg);

digitalWrite (motorPin2, låg);

}

om (tm. Timme == feed2hour & & tm. Minut == feed2minute & & tm. För det andra == 0 & & feedQty == 2) {

digitalWrite (motorPin1, hög);

digitalWrite (motorPin2, låg);

Delay(77000);

digitalWrite (motorPin1, låg);

digitalWrite (motorPin2, låg);

}

om (tm. Timme == feed2hour & & tm. Minut == feed2minute & & tm. För det andra == 0 & & feedQty == 3) {

digitalWrite (motorPin1, hög);

digitalWrite (motorPin2, låg);

Delay(141000);

digitalWrite (motorPin1, låg);

digitalWrite (motorPin2, låg);

}

LED-inställningar

om (feedQty == 1) {

digitalWrite (LED1, hög);

digitalWrite (LED2, låg);

digitalWrite (LED3, låg);

}

om (feedQty == 2) {

digitalWrite (LED1, låg);

digitalWrite (LED2, hög);

digitalWrite (LED3, låg);

}

om (feedQty == 3) {

digitalWrite (LED1, låg);

digitalWrite (LED2, låg);

digitalWrite (LED3, hög);

}

} / / End av huvudloop

void printDigits (int siffror) {/ / utility funktion för digital klockdisplay: utskrifter leder 0

IF(digits < 10)

LCD.Print('0');

LCD.Print(digits);

}

void feed() {

lcd.setCursor(17,0);

LCD.Print ("Extra foder!");

för (int positionCounter = 0; positionCounter < 16; positionCounter ++) {

Bläddra en position åt vänster:

lcd.scrollDisplayLeft();

vänta lite:

Delay(150);

}

}

Se Steg
Relaterade Ämnen

Feed Mi - Arduino hund mat dispenser

För en nyligen University projekt fick vi utmaningen att göra en fullt fungerande automatisk hund mat dispenser med en Arduino. Här är den färdig pjäsen och alla lämpliga filer och instruktioner så att du kan göra egna!Mataren skulle:-Håll 3kg Iams m...

Automatisk Arduino Powered sällskapsdjur mataren

Detta är min Automatisk Sällskapsdjur Mataren. Drivs med arduino, med hjälp av en 3D tryckt skruv och programmerbar med två utfodring gånger med en användare ange mängd livsmedel, med batteri backas upp interna klocka.Min katt köra mig nötter i morgo...

Fjärrstyrda fisk mat Dispenser

Detta instructable skapades enlighet projektet kravet på Makecourse vid University of South Florida (www.makecourse.com)Detta gör var min intro till använder arduino mikrokontroller och skriva kod. Jag medger att det finns mycket mer som kunde ha gjo...

Att hålla myrorna ur din sällskapsdjur mat

detta är en av de i'bles som jag borde ha postat mycket tidigare (när min katt var fortfarande lever). Det bara slog mig som jag packade dessa bort att jag skulle dela denna enkla idé som håller myrorna ur din sällskapsdjur mat.Jag vet att vissa djur...

Funky återvunnet sällskapsdjur mat väska handväska/tote.

Detta är en väska från en sällskapsdjur mat påse fodrad med vit bomull från och gammal plåt och band handtag. De bästa som du använder är tillverkade av en plast fiber. Du kan också använda en papperstyp som du stryka en stryka på plast (finns i de f...

Sällskapsdjur utegångsförbud: En Arduino kontrollerade sällskapsdjur dörr

Problemet: du vill begränsa den tid när ditt husdjur är tillåtet att gå utanför. Detta kan bero på att trakten inte är säkra för din katt eller liten hund på natten (plundringarna coyotes kommer att tänka på). Men du vill ha ditt husdjur för att kunn...

Chip klipp mätglaset för sällskapsdjur mat: - spara 600%

I denna mini tutorial lär jag dig hur man gör en sällskapsdjur mat "Chip klipp mätning Cup" och slå varumärket, i butik pris med 700 procent. Detta DIY tar ca 2 minuter för att skapa och du kan göra upp till tre för priset av $2 vs varumärket i...

Hur man gör en RFID-sällskapsdjur mat passersystem

i detta instructable jag kommer att förklara hur man gör en enkel RFID sällskapsdjur mat passersystem. Detta system använder en fristående RFID-system som kan köpas antingen förmonterade i kit form om du vill göra lödning själv och också vill spara n...

Arduino justerbar Timer Controller med relä

detta är mitt första inlägg här, så jag hoppas jag får allt rätt!Jag har en gasvärmare millivolt (termoelement högen) veranda som har en manuell kontroll på den. Jag tröttnade på att få upp och ner att slå på och stänga av den, så jag beslöt att göra...

Arduino justerbar termoelement-baserade Controller med relä

jag nyligen skapat en Arduino justerbar Timer styrenhet med relä projekt att styra min veranda gasvärmare millivolt (thermopile). De bilder som används i projektet, liksom bilderna används i detta projekt är samma, eftersom det finns endast en minima...

Arduino kontrollerade sällskapsdjur mataren

Detta projekt tillåter husdjur att matas med en konstant hastighet som inte involverar du lyfta mer än ett finger. Det finns en ramp i rutan som gör mat till ange hjulet som drivs av ett servo som distribuerar mat till din sällskapsdjur.Steg 1: lever...

Kul mat dispenser för katter.

Min katt Trinity älskar hennes katt kex dispenser. Hon gör kexen komma ut av sig själv och har mycket roligt i processen. Det är purr-fect enligt henne. Det är en snygg snygga enhet som kan göras till valfri längd för att passa någon utrymme på en vä...

Mikrovågsugn pudding sällskapsdjur mat skålen för wire burar

En enkel sällskapsdjur maträtt som kommer att montera på sidan av en tråd eller mesh bur - praktiskt för gnagare och fåglar om du behöver en maträtt i en hast och du är mellan lön dagar.Allt du behöver är de små plast skålen från en av dessa billiga...

Hund mat Dispenser

Detta är en automatisk hund matare som drivs av en Arduino Uno. Doseringssystemet är en 3D tryckt Arkimedes skruv drivs av en kontinuerlig servomotor.Mataren har två foder gånger programmerbara till användaren, den har också en programmerbar kvantite...

Sällskapsdjur Mataren

detta är min digitalt fabricerade skruv baserat sällskapsdjur mat dispenser. Du laddar helt enkelt kannan med sällskapsdjur mat och det skjuts automatiskt med skruv skruv i skålen till mata dina husdjur. Detta har testats för att fungera med kattmat...

Arduino kontrolleras hund mat/behandla dispenser

I detta Instructables kommer jag att beskriva hur man bygger en automatisk hund behandla/mat dispenser med en Arduino Duemilanove (Uno är den nyaste versionen av samma styrelse). Tidsintervall kan justeras via en potentiometer och kan ställas in till...

Automatisk mat och vatten dispenser för sällskapsdjur kontrolleras av SMS

Ledsen för min engelska. Jag beslöt att göra detta projekt av två skäl: delta i tävlingen djur innovation och för min katt. Om du verkligen gillar detta projekt Vänligen rösta för det.Det är en mat- och vattenberedare som aktiveras genom att skicka S...

Fat Cat automatiserad Arduino sällskapsdjur mataren

Alla säga hej till hertig! Han är en 24 pund Maine Coon som jag antog för tre år sedan. Duke har om i solen, titta på fåglarna utanför, och... vakna upp hans ägare klockan 5 på morgonen till frukost. Som ni kan föreställa er, om du har en 24 pund kat...

Automatisk fisk mat Feeder använda Arduino Uno

I detta Instructables ska jag visa dig hur man bygger en Automatisk Fish Food Feeder. Så du behöver inte komma ihåg att mata dina fiskar dagligen eftersom din Arduino kommer att göra det åt dig. Du kan också ställa in timerfunktioner som fisken få ma...