Arduino verstelbare Pet Food Dispenser (3 / 4 stap)

Stap 3: Code

Dit is de code voor de arduino. Deze code controleert de tijd en vergelijkt het met de alarmen, als zij overeenkomen met het zal veranderen de motor, het voedsel te duwen. Om te trainen hoe lang de motor moet wenden voor, die we uitgewerkt hoe veel voedsel wordt vrijgegeven voor elke beurt. Een beurt van een schroef geduwd 10g en elke rotatie duurt 11 seconden. Daarom zal 2 schroeven 20g elke 11 seconden duwen. We hond voedsel delen onderzocht en uitgewerkt dat een kleine hond ongeveer 50g van voedsel nodig, een middelgrote 140g en een grote moet ongeveer 260g. Dit betekent dat voor een klein deel die de schroef 27.5 seconden draait, een middelgrote gedeelte voor ongeveer 77 seconden en een groot ongeveer 141 seconden draait.

Afhankelijk van het voedsel u kunt u om dit te veranderen. Meestal kunt u de juiste porties op de achterkant van de verpakking. Vergeet niet dat de tijdschaal in de arduino IDE in milliseconden. ((Recommended Portions size)/20) * 11 = de lengte van de tijd de Kogge moet beurt van de bibliotheek waarmee we allemaal kan worden gevonden op de arduino website, ze heten time.h, DS1307RTC.h. De andere twee zijn al geïnstalleerd in de Arduino IDE. https://www.Arduino.CC/en/Reference/libraries

van de bibliotheek:

#include

#include / / die nodig zijn voor de RTC-libraty

#include

#include / / real-time klok bibliotheek

LCD setup

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

vluchtige Booleaanse TurnDetected; Ons toestaat te gebruiken & & verklaringen

vluchtige Booleaanse omhoog;

Setup pin gehele getallen

Const int PinCLK = 2; Gebruikt voor het genereren van interrupts met behulp van CLK signaal

Const int PinDT = 3; Gebruikt voor het lezen van DT signaal

Const int PinSW = 4; Gebruikt voor de Drukknopschakelaar van de Rotary-Encoder

Const int buttonPin = A3;

Const int motorPin1 = 10;

Const int motorPin2 = 13; het nummer van de drukknop pin voor manual feed 13

knop instellen

int buttonState = 0;

Insteltijd voedsel verstrekking

int feed1hour = 10;

int feed1minute = 30;

int feed2hour = 17;

int feed2minute = 30;

Setup voedsel bedrag

int feedQty = 1;

LED installatie

int LED1 = 0;

int LED2 = 1;

int LED3 = 9;

tijdinstelling

int tm. Uur = 1;

int tm. Minute = 1;

int tm. Uur = 1

VOID isr () {}

Als (digitalRead(PinCLK)) //setup voor de Klik op de roterende encoder

omhoog = digitalRead(PinDT);

anders

omhoog =! digitalRead(PinDT);

TurnDetected = true;

}

void setup () {}

tijd instellen

LED installatie

pinMode (LED1, uitvoer);

pinMode (LED2, uitvoer);

pinMode (LED3, uitvoer);

de LCD's aantal kolommen en rijen instellen:

LCD.begin (16, 2);

Setup de Rotary encoder

pinMode(PinCLK,INPUT);

pinMode(PinDT,INPUT);

pinMode(PinSW,INPUT);

pinMode (buttonPin, INPUT);

attachInterrupt (0, isr, vallen); Interrupt 0 is altijd verbonden met pin 2 op Arduino UNO

lcd.setCursor(17,0);

LCD.Print ("Tom & Dan's Dog"); opstartscherm

lcd.setCursor(17,1);

LCD.Print ("snackautomaat");

voor (int positionCounter = 0; positionCounter < 17; positionCounter ++) {}

Scroll één positie links:

lcd.scrollDisplayLeft();

wachten een beetje:

delay(150);

}

delay(3000);

voor (int positionCounter = 0; positionCounter < 17; positionCounter ++) {}

Scroll één positie links:

lcd.scrollDisplayRight();

wachten een beetje:

delay(150);

}

lcd.setCursor(17,0);

LCD.Print("");

lcd.setCursor(17,1);

LCD.Print("");

}

void loop () {//Main programma lus - de meeste dingen hier!

statische lange virtualPosition = 0; zonder STATIC telt het niet correct!

tmElements_t tm; Deze sectionm leest de tijd van de RT, dan wordt deze weergegeven.

RTC.read(tm);

lcd.setCursor (0, 0);

printDigits (tm. Uur); oproep tot het cijfer functie die voegt voorloopnullen die mogelijk ontbrekende print

LCD.Print(":");

printDigits (tm. Minuut);

LCD.Print(":");

printDigits (tm. Seconde);

LCD.Print("");

LCD.Print ("grootte");

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);

Als (! () digitalRead(PinSW))) {/ / controleren als de drukknop wordt ingedrukt

Als ja, voert de programmering subroutine

LCD.Blink(); De knipperende cursor inschakelen:

lcd.setCursor(5,0);

LCD.Print ("SET");

virtualPosition = tm. Uur; nodig of het uur nul telkens wanneer u de klok wijzigt zal worden.

{}

lcd.setCursor(0,0); plaats de cursor op tijd uur

delay(500); Vertraging nodig of dezelfde knop drukt zal verlaten doen-terwijl als tijdje controleert voor een andere knop duwen!

Als (TurnDetected) {/ / doe dit alleen als rotatie werd ontdekt

Als (omhoog)

virtualPosition--;

anders

virtualPosition ++;

TurnDetected = false; NIET als lus herhalen tot nieuwe rotatie gedetecteerd

}

Hier wijzigen ik het uur van de tijd-

TM. Uur = virtualPosition;

RTC.write(tm);

lcd.setCursor (0, 0);

printDigits (tm. Uur); drukt u opnieuw het uur op het LCD-scherm

} terwijl ((digitalRead(PinSW))); ken dit "doen" lus terwijl de PinSW knop is niet ingedrukt

lcd.noBlink();

delay(1000);

STEL DE MINUTEN

LCD.Blink(); De knipperende cursor inschakelen:

virtualPosition = tm. Minuut; nodig of de minuut zullen nul telkens wanneer u de klok wijzigt.

{}

lcd.setCursor(3,0); plaats de cursor op tijd minuten

delay(500); Vertraging nodig of dezelfde knop drukt zal verlaten doen-terwijl als tijdje controleert voor een andere knop duwen!

Als (TurnDetected) {/ / doe dit alleen als rotatie werd ontdekt

Als (omhoog)

virtualPosition--;

anders

virtualPosition ++;

TurnDetected = false; NIET als lus herhalen tot nieuwe rotatie gedetecteerd

}

Hier veranderen ik de min tijd-

TM. Minuten = virtualPosition;

RTC.write(tm);

lcd.setCursor (3, 0);

printDigits (tm. Minuut); Druk opnieuw op de min op het LCD-scherm

} terwijl ((digitalRead(PinSW)));

lcd.noBlink();

delay(1000);

INSTELLEN van het aantal - Feed hoeveelheid

LCD.Blink(); De knipperende cursor inschakelen:

virtualPosition = feedQty; nodig, of het aantal zal gelijk zijn aan nul.

{}

lcd.setCursor(14,0); plaats de cursor op de hoeveelheid

delay(500); Vertraging nodig of dezelfde knop drukt zal verlaten doen-terwijl als tijdje controleert voor een andere knop duwen!

Als (TurnDetected) {/ / doe dit alleen als rotatie werd ontdekt

Als (omhoog)

virtualPosition--;

anders

virtualPosition ++;

TurnDetected = false; NIET als lus herhalen tot nieuwe rotatie gedetecteerd

}

Hier wijzigen ik de feed aantal

feedQty = virtualPosition;

lcd.setCursor (14, 0);

LCD.Print(feedQty);

} terwijl ((digitalRead(PinSW)));

lcd.noBlink();

delay(1000);

HET uur in diervoeders1

LCD.Blink(); De knipperende cursor inschakelen:

virtualPosition = feed1hour; nodig of zullen om te beginnen met nul.

{}

lcd.setCursor(2,1); plaats de cursor op de feed1hour

delay(500); Vertraging nodig of dezelfde knop drukt zal verlaten doen-terwijl als tijdje controleert voor een andere knop duwen!

Als (TurnDetected) {/ / doe dit alleen als rotatie werd ontdekt

Als (omhoog)

virtualPosition--;

anders

virtualPosition ++;

TurnDetected = false; NIET als lus herhalen tot nieuwe rotatie gedetecteerd

}

Hier veranderen ik het diervoeders1 uur

feed1hour = virtualPosition;

lcd.setCursor(2,1);

printDigits(feed1hour);

} terwijl ((digitalRead(PinSW)));

lcd.noBlink();

delay(1000);

INSTELLEN van de diervoeders1 minuten

LCD.Blink(); De knipperende cursor inschakelen:

virtualPosition = feed1minute; nodig of zullen om te beginnen met nul.

{}

lcd.setCursor(5,1); plaats de cursor op de feed1minute

delay(500); Vertraging nodig of dezelfde knop drukt zal verlaten doen-terwijl als tijdje controleert voor een andere knop duwen!

Als (TurnDetected) {/ / doe dit alleen als rotatie werd ontdekt

Als (omhoog)

virtualPosition--;

anders

virtualPosition ++;

TurnDetected = false; NIET als lus herhalen tot nieuwe rotatie gedetecteerd

}

Hier veranderen ik de diervoeders1 minuut

feed1minute = virtualPosition;

lcd.setCursor(5,1);

printDigits(feed1minute);

} terwijl ((digitalRead(PinSW)));

lcd.noBlink();

delay(1000);

HET uur in Feed2

LCD.Blink(); De knipperende cursor inschakelen:

virtualPosition = feed2hour; nodig of zullen om te beginnen met nul.

{}

lcd.setCursor(10,1); plaats de cursor op de feed1hour

delay(500); Vertraging nodig of dezelfde knop drukt zal verlaten doen-terwijl als tijdje controleert voor een andere knop duwen!

Als (TurnDetected) {/ / doe dit alleen als rotatie werd ontdekt

Als (omhoog)

virtualPosition--;

anders

virtualPosition ++;

TurnDetected = false; NIET als lus herhalen tot nieuwe rotatie gedetecteerd

}

Hier veranderen ik het diervoeders1 uur

feed2hour = virtualPosition;

lcd.setCursor(10,1);

printDigits(feed2hour);

} terwijl ((digitalRead(PinSW)));

lcd.noBlink();

delay(1000);

INSTELLEN van de Feed2 minuten

LCD.Blink(); De knipperende cursor inschakelen:

virtualPosition = feed2minute; nodig of zullen om te beginnen met nul.

{}

lcd.setCursor(13,1); plaats de cursor op de feed1minute

delay(500); Vertraging nodig of dezelfde knop drukt zal verlaten doen-terwijl als tijdje controleert voor een andere knop duwen!

Als (TurnDetected) {/ / doe dit alleen als rotatie werd ontdekt

Als (omhoog)

virtualPosition--;

anders

virtualPosition ++;

TurnDetected = false; NIET als lus herhalen tot nieuwe rotatie gedetecteerd

}

Hier veranderen ik de diervoeders1 minuut

feed2minute = virtualPosition;

lcd.setCursor(13,1);

printDigits(feed2minute);

} terwijl ((digitalRead(PinSW)));

lcd.noBlink();

delay(1000);

} / / einde van belangrijkste als roterende encoder drukknop checker

SELECTIEVAKJE VOOR HANDMATIGE FEED BUTTON

buttonState = digitalRead(buttonPin);

Als (buttonState == HIGH) {}

digitalWrite (motorPin1, hoge);

digitalWrite (motorPin2, laag);

delay(5000);

digitalWrite (motorPin1, laag);

digitalWrite (motorPin2, laag);

}

CONTROLEER VOEDERTIJD EN DIERVOEDERS ALS VOLDAAN

Als (tm. Uur == feed1hour & & tm. Minuut == feed1minute & & tm. Tweede == 0 & & feedQty == 1) {/ / als ik niet ' controleren seconden zijn nul

digitalWrite (motorPin1, hoge);

digitalWrite (motorPin2, laag);

delay(5000);

digitalWrite (motorPin1, laag);

digitalWrite (motorPin2, laag);

}

Als (tm. Uur == feed1hour & & tm. Minuut == feed1minute & & tm. Tweede == 0 & & feedQty == 2) {/ / als ik niet ' controleren seconden zijn nul

digitalWrite (motorPin1, hoge);

digitalWrite (motorPin2, laag);

delay(10000);

digitalWrite (motorPin1, laag);

digitalWrite (motorPin2, laag);

}

Als (tm. Uur == feed1hour & & tm. Minuut == feed1minute & & tm. Tweede == 0 & & feedQty == 3) {/ / als ik niet ' controleren seconden zijn nul

digitalWrite (motorPin1, hoge);

digitalWrite (motorPin2, laag);

delay(15000);

digitalWrite (motorPin1, laag);

digitalWrite (motorPin2, laag);

}

Als (tm. Uur == feed2hour & & tm. Minuut == feed2minute & & tm. Tweede == 0 & & feedQty == 1) {}

digitalWrite (motorPin1, hoge);

digitalWrite (motorPin2, laag);

delay(27500);

digitalWrite (motorPin1, laag);

digitalWrite (motorPin2, laag);

}

Als (tm. Uur == feed2hour & & tm. Minuut == feed2minute & & tm. Tweede == 0 & & feedQty == 2) {}

digitalWrite (motorPin1, hoge);

digitalWrite (motorPin2, laag);

delay(77000);

digitalWrite (motorPin1, laag);

digitalWrite (motorPin2, laag);

}

Als (tm. Uur == feed2hour & & tm. Minuut == feed2minute & & tm. Tweede == 0 & & feedQty == 3) {}

digitalWrite (motorPin1, hoge);

digitalWrite (motorPin2, laag);

delay(141000);

digitalWrite (motorPin1, laag);

digitalWrite (motorPin2, laag);

}

LED-instellingen

Als (feedQty == 1) {}

digitalWrite (LED1, hoge);

digitalWrite (LED2, laag);

digitalWrite (LED3, laag);

}

Als (feedQty == 2) {}

digitalWrite (LED1, laag);

digitalWrite (LED2, hoge);

digitalWrite (LED3, laag);

}

Als (feedQty == 3) {}

digitalWrite (LED1, laag);

digitalWrite (LED2, laag);

digitalWrite (LED3, hoge);

}

} / / Einde van de hoofdlus

VOID printDigits (int cijfers) {/ / utility functie voor digitale klokvertoning: prenten 0 voorsprong

if(digits < 10)

LCD.Print('0');

LCD.Print(digits);

}

Ongeldig feed() {}

lcd.setCursor(17,0);

LCD.Print ("Extra Feed!");

voor (int positionCounter = 0; positionCounter < 16; positionCounter ++) {}

Scroll één positie links:

lcd.scrollDisplayLeft();

wachten een beetje:

delay(150);

}

}

Gerelateerde Artikelen

Automatische Arduino aangedreven Pet Feeder

Automatische Arduino aangedreven Pet Feeder

Dit is mijn automatische pet feeder. Aangedreven door arduino, met behulp van een 3D afgedrukt auger en programmeerbare met twee keer vervoederen een gebruiker instellen hoeveelheid voedsel, met een batterij back-up interne klok.Mijn katten drijven m
Zelfgemaakte arduino Lineaire actuator (Deodorant Dispenser)

Zelfgemaakte arduino Lineaire actuator (Deodorant Dispenser)

Deodorant dispenser kan worden omgezet in een lineaire servomotor met behulp van arduino micro controller.Het ontwerp in mijn video is niet zo goed, en het grotendeels met goede basis en houder kan worden verbeterd. Echter het mijn kleine doel gedien
Arduino knop geactiveerd behandelen Dispenser

Arduino knop geactiveerd behandelen Dispenser

voor mijn digitale Multimedia klasse finale, ik heb gemaakt een traktatie dispenser die wordt geactiveerd door het trekken van een keten, die begint een servomotor die een wiel draait afzien trakteert op mijn aan Afrikaanse grijze papegaaien.Stap 1:
Arduino gecontroleerde Pet Feeder

Arduino gecontroleerde Pet Feeder

Dit project huisdieren worden gevoed met een constante snelheid waarbij geen gebruik wordt u meer dan een vinger te heffen. Er is een helling in het vak waarmee voedsel in te voeren van het wiel dat wordt aangedreven door een servo die voedsel voor u
Arduino verstelbare thermokoppel gebaseerde Controller met relais

Arduino verstelbare thermokoppel gebaseerde Controller met relais

ik heb onlangs een Arduino Controller voor instelbare Timer gemaakt met Relay project om te controleren mijn millivolt (thermozuil) gas veranda kachel.  De foto's in dat project worden gebruikt, alsmede de foto's in dit project, gebruikt zijn dat dez
Family Survival and Preparedness

Family Survival and Preparedness

Wanneer de $hit echt hits de ventilator, en ik bedoel echt hits het hard, dat ik wil een plan dat mijn familie volgen kunt om ervoor te zorgen dat we zijn veilig en kunnen overleven. Dit kan een plan dat kan zo veel of zo weinig verschillende scenari
Stank bom recept

Stank bom recept

Een leuk verpakt project van de wetenschap voor iedereen met een ondeugende kant... Volwassenen en tieners zullen genieten van deze weinig schoonheid. Het zal zeer goed voor ieder van jullie 'Of Trick or Treaters' daar vooral omdat het is bijna die t
Fat Cat geautomatiseerd Arduino Pet Feeder

Fat Cat geautomatiseerd Arduino Pet Feeder

Iedereen zeg hallo aan hertog! Hij is een 24 pond Maine Coon dat ik drie jaar geleden hebben aangenomen. Hertog geniet tot in de zon, kijken naar de vogels buiten, and... wakker zijn eigenaar om 5 uur in de ochtend voor het ontbijt. Aangezien u veron
PEZ Robo Dispenser met behulp van Arduino

PEZ Robo Dispenser met behulp van Arduino

Ik was een wandeling door de snoep gangpad in de supermarkt en daar was: de PEZ dispenser, oproepen van zoete (letterlijk) jeugd herinneringen voorgeschoteld door mijn favoriete stripfiguren in vierkante suikerhoudende pellets.  Dan, plotseling, een
Gerecycled Arduino Lolly Dispenser

Gerecycled Arduino Lolly Dispenser

Dit is een snelle foto instructable om te laten zien hoe ik en mijn vriend Nick een lolly dispenser om te pronken met de soorten projecten die we bij de UTS Robotic Society maken gebouwd. Het is een project ontworpen dat ons club managers aan te gaan
Arduino Run nauwkeurige vloeistof/poeder Dispenser systeem

Arduino Run nauwkeurige vloeistof/poeder Dispenser systeem

Doel: Maak iets te doen sommige meten voor u, of voor het koken of anderszins. Daarbij zal zij zowel vloeistoffen en poeders uit het zelfde Configuratiescherm. Een Arduino wordt gebruikt om het systeem te werken.Opmerking: Geen van ons (de ontwerpers
Arduino - cavia automatische voedsel en water dispenser

Arduino - cavia automatische voedsel en water dispenser

Het idee: bouw van een automatische voedsel (twee soorten voedsel) en water doseersysteem voor mijn cavia met behulp van een Arduino Mega 2560-board.Onderdelen vereist:-1 x Arduino Mega 2560-1 x motor schild-ik gebruikte een oude versie van Adafruit
DIY intelligente Autonomus Robot (elektronische Pet) /w Arduino

DIY intelligente Autonomus Robot (elektronische Pet) /w Arduino

Ik hou van elke vorm van robots vooral de autonomus of intelligente robots, die een beetje meer intelligentie dan het vermijden van een obstakel hebben. Dus besloten heb ik dat ik mijn eigen goedkope intelligente robot die heeft een ingebouwde camera
Arduino gecontroleerd hond voedsel/traktatie dispenser

Arduino gecontroleerd hond voedsel/traktatie dispenser

In deze Instructables ik zal worden met een beschrijving van hoe het bouwen van een automatische hond behandelen/snackautomaat met behulp van een Arduino Duemilanove (de Uno is de nieuwste versie van dezelfde boord). Het TimerInterval kan worden aang