Hopp til innhold
Bokmål
Oppgave

Programmering av hundemater

Dyr skal ofte ha en bestemt mengde mat på et bestemt tidspunkt. Kan du programmere din egen fôringsautomat for hunder?

Framgangsmåte

I denne oppgava skal du programmere en hundemater. Hundemateren skal føre mat fra en beholder til en matskål ved hjelp av en mateskrue.

Du skal programmere en Arduino slik at mateskruen mater fram en gitt mengde hundefôr, basert på anbefalinger fra hundematleverandøren.

  1. Velg deg en type hund og noter alder og vekt. (Du kan f.eks. ta utgangspunkt i gjennomsnittsverdiene for en voksen hund av en bestemt rase.)

  2. Undersøk hvor mye mat denne hunden skal ha, og hvor mange ganger om dagen den skal mates. Slik informasjon finner du ofte på baksida av hundefôr-emballasje. Alternativt kan du gjøre et søk på internett.

  3. Programmer hundemateren slik at den mater fram hundemat. Vi anbefaler at du starter med at motoren roterer 2 runder. Du bør også vurdere om hundemateren skal gå litt tilbake igjen etter at rotasjon er gjennomført. I så fall må materen rotere litt lenger enn 2 omdreininger. Du kan for eksempel legge inn 800 grader rotasjon, og deretter lar du materen gå 80 grader tilbake. Da får du totalt 720 grader rotasjon, det vil si to hele omdreininger.

  4. Mål ut med ei vekt hvor mye fôr som kommer fram hver gang knappen trykkes. (Det kan forekomme små variasjoner. Ta derfor flere prøver og regn ut gjennomsnittet.)

  5. Juster programmet slik at hundemateren gir riktig mengde fôr til "din" hund.

Tekniske komponenter

Til denne oppgava trenger du noen tekniske komponenter i tillegg til en egenprodusert hundemater:

  • 1 Arduino R3

  • 1 TB6600 MicroStep-kontroller

  • 1 NEMA17 steppermotor

  • 1 trykknapp

  • ledninger og koplinger

  • ekstern strømforsyning (12–36 volt, inntil 2,0 ampere)

  • eventuelt: 2 trykknapper, én som øker fôrmengden med 10 %, én som reduserer mengden med 10 %

Hvis du bruker andre komponenter enn de som er lista opp her, må du kanskje gjøre endringer i programkode, koplinger og på tegninger / ferdig produkt.

Kopling

Bruk gjerne koplingsforslaget nedenfor som utgangspunkt.

Kopling av hundemateren

Arduino R3

TB6600 Stepperdriver

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 en del instillinger for strømstyrke og antall steg den skal dele opp hver rotasjon i. Disse innstillingene justerer du ved hjelp av mikrobrytere som skal stå på enten ON eller OFF.

Mikrosteg (switch 1–3)

Driveren kan dele opp motorrotasjonen i små bevegelser (med lengde oppgitt som sirkelgrader). Driveren bestemmer da hvor langt motoren skal bevege seg hver gang motoren mottar et signal.

Dess større mikrosteg, dess færre steg per sekund og dess jevnere og roligere gange. Lavere mikrosteg krever mange små stopp og start og gir en uroligere og mer oppstykka rotasjon. Vi anbefaler at du starter med 1/16 (3200 steg/rev) for god balanse mellom mykhet og hastighet.

Justering av antall mikrosteg

SW1

SW2

SW3

Mikrosteg (Steg/Rev)

Kommentar

OFFOFFON1/16 (3200)glatt og presis motorbevegelse
ONOFFON1/32 (6400)svært myk, men tregere motorbevegelse

Strømstyrke (switch 4–6)

På driveren må du også stille inn strømstyrken motoren skal ha tilgang til. Sjekk hvor mye strøm den eksterne strømkilden kan levere, og gå aldri over denne.

Innstillinger for strømstyrke

SW4

SW5

SW6

Strøm (Peak)

Strøm (RMS)

ONONOFF2,0 A1,4 A

Vi anbefaler at du setter strømstyrken til 2 ampere. Dette passer bra for mange NEMA17-steppermotorer, som vanligvis tåler 1,5–2,0 ampere (sjekk datablad for nøyaktig grense). RMS-strøm er den gjennomsnittlige strømmen som motoren mottar kontinuerlig, mens Peak er den maksimale strømstyrken motoren tåler i korte perioder.

Oppdatering med riktig antall steg

Sjekk innstillingene på TB6600-kontrolleren og bruk dem til å oppdatere programmet ditt. Eksempel ved 1/16 (3200 steg per omdreining):

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

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

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

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

Forslag til utvidelser

  1. For å unngå at fôret skal sette seg fast, kan du programmere inn en vibrerende bevegelse rett etter at matinga er fullført, slik at det ristes ny mat ned i skruen.

  2. Du kan kople til to nye trykknapper. Den ene knappen kan øke fôrmengden med 10 %, og den andre knappen kan redusere mengden med 10 %.

  3. Du kan kople til en skjerm som kan programmeres slik at antall gram med fôr vises på skjermen. Du må da bruke talla fra programmet og mengden fôr og legge dem inn som variabler. Eksempel: 2,5 runder gir 250 gram fôr, 5 runder gir 500 gram fôr.

  4. Du kan kople og programmere en RFID-leser som registrerer når hunden er i nærheten.

  5. Du kan programmere at hunden skal mates på bestemte tidspunkt eller med bestemte intervaller.

Bruk av kunstig intelligens (KI)

Når du skal programmere hva materen skal gjøre, kan du bruke en praterobot som digital hjelper. Fortell prateroboten hvilken rolle den skal ha, hva du vil at den skal gjøre, og hva du ønsker å oppnå.

Forslag til instruks til praterobot

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

  • Arduinoen styres av en 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 grader og returnere 80 grader slik at total bevegelse blir 720 grader. Rotasjonen skal skje med lav hastighet. Etter at matinga er utført, skal motoren ti ganger rotere 40 grader fram og tilbake i raskt tempo.

Kan du gi meg et forslag til programkode?

Eksempelkode

Her finner du et eksempel på en generert kode. Den kan kreve en del tilpasninger ut fra hvilke komponenter og tilkoplinger du bruker.

Eksempelkode

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

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 trigges kun én gang per trykk

void setup() {

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

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

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

}

void loop() {

// Sjekker om knappen er trykt ned og ikke allerede aktivert

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

buttonPressed = true; // Låser knappen slik at det kun kjøres én gang per trykk

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

delay(200); // Kort pause

rotateSteps(889, HIGH, 500); // Roterer 100 grader tilbake med lavere hastighet (500 µs puls)

delay(200); // Ny kort pause

// Gjentar 10 ganger: 40 grader fram og tilbake i rask vibrasjon

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

rotateSteps(356, LOW, 100); // Roterer 40 grader fram med rask hastighet

rotateSteps(356, HIGH, 100); // Roterer 40 grader tilbake med samme hastighet

}

}

// Når knappen slippes, tillates ny aktivering ved neste trykk.

if (digitalRead(btnPin) == HIGH) {

buttonPressed = false;

}

}

// Funksjon for å rotere motoren med ønska hastighet et gitt antall steg i valgt retning

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

digitalWrite(dirPin, direction); // Setter retningen på rotasjonen

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

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

delayMicroseconds(speedMicros); // Pause og pauselengde

digitalWrite(pulPin, LOW); // Sender puls lav

delayMicroseconds(speedMicros); // Pause igjen

}

}


Sammendrag

Denne koden styrer en steppermotor via en stepperdriver (f.eks. TB6600). Når en knapp trykkes, skjer følgende:

  1. Motoren roterer 800 grader framover i høy hastighet.

  2. Deretter roterer den 80 grader tilbake i lavere hastighet.

  3. Så vibrerer motoren 10 ganger 40 grader fram og tilbake i raskt tempo.

Retning og hastighet styres av funksjonen rotateSteps(), som sender pulser til driveren. Knappen bruker INPUT_PULLUP, og ei logisk sperre (buttonPressed) hindrer at bevegelsen gjentas mens knappen holdes inne.

Bygg din egen hundemater

Under Relatert innhold finner du alle filene og tegningene du trenger for å bygge din egen hundemater. Siden det er snakk om mye platearbeid, må du kanskje tilpasse produktet noe ut fra de maskinene du har tilgjengelige på verkstedet.

Relatert innhold

Hundemater

Vil du bygge en automatisert hundemater? Her får du tips og råd.

Skrevet av Roger Rosmo.
Sist oppdatert 28.05.2025