Hopp til innhald
Nynorsk
Oppgåve

Programmering av hundematar

Dyr skal ofte ha ei bestemd mengde mat på eit bestemt tidspunkt. Kan du programmere din eigen fôringsautomat for hundar?

Framgangsmåte

I denne oppgåva skal du programmere ein hundematar. Hundemataren skal føre mat frå ein behaldar til ei matskål ved hjelp av ein mateskrue.

Du skal programmere ein Arduino slik at mateskruen matar fram ei gitt mengde hundefôr, basert på tilrådingar frå hundematleverandøren.

  1. Vel deg ein type hund og notér alder og vekt. (Du kan t.d. ta utgangspunkt i gjennomsnittsverdiane for ein vaksen hund av ein bestemd rase.)

  2. Undersøk kor mykje mat denne hunden skal ha, og kor mange gonger om dagen han skal matast. Slik informasjon finn du ofte på baksida av hundefôr-emballasje. Alternativt kan du gjere eit søk på internett.

  3. Programmer hundemataren slik at han matar fram hundemat. Vi tilrår at du startar med at motoren roterer 2 rundar. Du bør òg vurdere om hundemataren skal gå litt tilbake igjen etter at rotasjon er gjennomført. I så fall må mataren rotere litt lenger enn 2 omdreiingar. Du kan til dømes legge inn ein rotasjon på 800 gradar, og deretter lar du mataren gå 80 gradar tilbake. Då får du totalt 720 gradar rotasjon, det vil seie to heile omdreiingar.

  4. Mål ut med ei vekt kor mykje fôr som kjem fram kvar gong knappen blir trykt. (Det kan finnast små variasjonar. Ta derfor fleire prøvar og rekn ut gjennomsnittet.)

  5. Juster programmet slik at hundemataren gir rett mengde fôr til "din" hund.

Tekniske komponentar

Til denne oppgåva treng du nokre tekniske komponentar i tillegg til ein eigenprodusert hundematar:

  • 1 Arduino R3

  • 1 TB6600 MicroStep-kontrollar

  • 1 NEMA17 steppermotor

  • 1 trykknapp

  • leidningar og koplingar

  • ekstern straumforsyning (12–36 volt, inntil 2,0 ampere)

  • eventuelt: 2 trykknappar, éin som aukar fôrmengda med 10 %, éin som reduserer mengda med 10 %

Viss du bruker andre komponentar enn dei som er lista opp her, må du kanskje gjere endringar i programkode, koplingar og på teikningar / ferdig produkt.

Kopling

Bruk gjerne koplingsforslaget nedanfor som utgangspunkt.

Kopling av hundemataren

Arduino R3

TB6600 Stepperdrivar

Kommentar

D3PUL+pulsutgang
D4DIR+retning
GNDPUL- og DIR-felles jording
D2trykknapp (mot GND, bruk INPUT_PULLUP)
VCC+ på ekstern stpenningsforsyning
GND- på ekstern stpenningsforsyning

Innstillinger TB6600

TB6600 har ein del instillinger for straumstyrke og antal steg han skal dele opp kvar rotasjon i. Desse innstillingane justerer du ved hjelp av mikrobrytarar som skal stå på anten ON eller OFF.

Mikrosteg (switch 1–3)

Drivaren kan dele opp motorrotasjonen i små rørsler (med lengde oppgitt som sirkelgrader). Drivaren bestemmer då kor langt motoren skal bevege seg kvar gong motoren får eit signal.

Dess større mikrosteg, dess færre steg per sekund og dess jamnare og rolegare gange. Lågare mikrosteg krev mange små stopp og start og gir ein urolegare og meir oppstykka rotasjon. Vi tilrår at du startar med 1/16 (3200 steg/rev) for god balanse mellom mjukleik og fart.

Justering av antal mikrosteg

SW1

SW2

SW3

Mikrosteg (Steg/Rev)

Kommentar

OFFOFFON1/16 (3200)glatt og presis motorrørsle
ONOFFON1/32 (6400)svært mjuk, men treigare motorrørsle

Straumstyrke (switch 4–6)

På drivaren må du òg stille inn straumstyrken motoren skal ha tilgang til. Sjekk kor mykje straum den eksterne straumkjelda kan levere, og gå aldri over denne.

Innstillingar for straumstyrke

SW4

SW5

SW6

Straum (Peak)

Straum (RMS)

ONONOFF2,0 A1,4 A

Vi tilrår at du set straumstyrken til 2 ampere. Det passar bra for mange NEMA17-steppermotorar, som vanlegvis toler 1,5–2,0 ampere (sjekk datablad for nøyaktig grense). RMS-straum er den gjennomsnittlege straumen som motoren får kontinuerleg, mens Peak er den maksimale straumstyrken motoren toler i korte periodar.

Oppdatering med rett mengde steg

Sjekk innstillingane på TB6600-kontrollaren og bruk dei til å oppdatere programmet ditt. Døme ved 1/16 (3200 steg per omdreiing):

  • 1 grad = 3200 : 360 ≈ 8,89 steg

  • 400 gradar ≈ 400 × 8,89 = ~3556 steg

  • 40 gradar ≈ 40 × 8,89 = ~356 steg

  • Her må altså motoren rotere 3556 steg og så gå 356 steg tilbake.

Forslag til utvidingar

  1. For å unngå at fôret skal setje seg fast, kan du programmere inn ei vibrerande rørsle rett etter at matinga er fullført, slik at det blir rista ny mat ned i skruen.

  2. Du kan kople til to nye trykknappar. Den eine knappen kan auke fôrmengda med 10 %, og den andre knappen kan redusere mengda med 10 %.

  3. Du kan kople til ein skjerm som kan programmerast slik at antal gram med fôr blir vist på skjermen. Du må då bruke tala frå programmet og fôrmengda og legge dei inn som variablar. Døme: 2,5 rundar gir 250 gram fôr, 5 rundar gir 500 gram fôr.

  4. Du kan kople og programmere ein RFID-lesar som registrerer når hunden er i nærleiken.

  5. Du kan programmere at hunden skal matast på bestemde tidspunkt eller med bestemde intervall.

Bruk av kunstig intelligens (KI)

Når du skal programmere kva mataren skal gjere, kan du bruke ein praterobot som digital hjelpar. Fortel prateroboten kva rolle han skal ha, kva du vil at han skal gjere, og kva du ønsker å oppnå.

Forslag til instruks til praterobot

Du skal hjelpe meg å programmere ein Arduino R3 som står montert i ein hundematdispenser. Arduinoen er kopla til ein TB6600 stepperdrivar og ein NEMA17 steppermotor.

  • Arduinoen blir styrt av ein trykknapp kopla til jord via Input_Pullup.

  • Arduino D2 er kopla til trykknapp via Input_Pullup.

  • Arduino D3 er kopla til TB6600 PUL+.

  • Arduino D4 er kopla til TB6600 DIR+.

  • Arduino GND er kopla til TB6600 PUL- og DIR-.

Motoren skal rotere 800 gradar og returnere 80 gradar slik at total rørsle blir 720 gradar. Rotasjonen skal skje med låg fart. Etter at matinga er utført, skal motoren ti gonger rotere 40 gradar fram og tilbake i raskt tempo.

Kan du gi meg eit forslag til programkode?

Dømekode

Her finn du eit døme på ein generert kode. Han kan krevje ein del tilpassingar ut frå kva komponentar og tilkoplingar du bruker.

Dømekode

const int pulPin = 3; // Pinne som sender pulssignal (steg) til PUL+ på stepperdrivar

const int dirPin = 4; // Pinne som styrer retninga til motoren (DIR+)

const int btnPin = 2; // Pinne kopla til trykknapp (mot GND)

bool buttonPressed = false; // Variabel for å sikre at knappen blir trigga berre éin gong per trykk

void setup() {

pinMode(pulPin, OUTPUT); // Set pulPin som utgang

pinMode(dirPin, OUTPUT); // Set dirPin som utgang

pinMode(btnPin, INPUT_PULLUP); // Set knapp som inngang med intern pull-up-motstand

}

void loop() {

// Sjekkar om knappen er trykt ned og ikkje allereie aktivert

if (digitalRead(btnPin) == LOW && !buttonPressed) {

buttonPressed = true; // Låser knappen slik at det berre blir køyrt éin gong per trykk

rotateSteps(7289, LOW, 50); // Roterer 820 grader framover med høg fart (50 µs puls)

delay(200); // Kort pause

rotateSteps(889, HIGH, 500); // Roterer 100 grader tilbake med lågare fart (500 µs puls)

delay(200); // Ny kort pause

// Gjentek 10 gonger: 40 gradar fram og tilbake i rask vibrasjon

for (int i = 0; i < 10; i++) {

rotateSteps(356, LOW, 100); // Roterer 40 gradar fram i raskt tempo

rotateSteps(356, HIGH, 100); // Roterer 40 gradar tilbake i same tempo

}

}

// Når knappen blir sleppt, er ny aktivering ved neste trykk mogleg.

if (digitalRead(btnPin) == HIGH) {

buttonPressed = false;

}

}

// Funksjon for å rotere motoren med ønskt fart eit gitt antal steg i vald retning

void rotateSteps(int steps, bool direction, int speedMicros) {

digitalWrite(dirPin, direction); // Set retninga på rotasjonen

for (int i = 0; i < steps; i++) {

digitalWrite(pulPin, HIGH); // Sender puls høø

delayMicroseconds(speedMicros); // Pause og pauselengde

digitalWrite(pulPin, LOW); // Sender puls låg

delayMicroseconds(speedMicros); // Pause igjen

}

}


Samandrag

Denne koden styrer ein steppermotor via ein stepperdrivar (t.d. TB6600). Når ein knapp blir trykt, skjer følgande:

  1. Motoren roterer 800 gradar framover i høg fart.

  2. Deretter roterer han 80 gradar tilbake i lågare fart.

  3. Så vibrerer motoren ti gonger 40 gradar fram og tilbake i raskt tempo.

Retning og fart blir styrte av funksjonen rotateSteps(), som sender pulsar til drivaren. Knappen bruker INPUT_PULLUP, og ei logisk sperre (buttonPressed) hindrar at rørsla blir gjenteken mens knappen blir halden inne.

Bygg din eigen hundematar

Under Relatert innhald finn du alle filene og teikningane du treng for å bygge din eigen hundematar. Sidan det er snakk om mykje platearbeid, må du kanskje tilpasse produktet noko ut frå dei maskinene du har tilgjengelege på verkstaden.

Relatert innhald

Hundematar

Vil du bygge ein automatisert hundematar? Her får du tips og råd.

Skrive av Roger Rosmo.
Sist oppdatert 28.05.2025