Felles
Etter hvert som vi har hatt fremgang i prosjektet har det vist seg at det kan bli vanskelig å få fullført et helt fotballbord hvor et helt lag er autonomt. Dette er også pga plass begrensning og antall motorer som må tas i bruk, 8 motorer totalt.
Derfor har vi valgt og skalere ned usecasen slik at vi har en autonom keeper, hvor et lag kan få hjelp. Eventuelt også at vanskelighetsgraden kan justeres, fra dårlig til god keeper.
I bilde under finner vi ut avstanden til kamera samt om ballen blir avlest, noe den gjør, JIPPI!!!
Maskin
Anders:
Modellert, 3D printet og bygd føtter og ben til hele bordet slik at vi får nivelert bordet tilstrekkelig.
Satt opp et enkelt bord/ramme så hele mekanismen får stå fast og riktig i forhold til stengene på fotballbordet.
Ref forrige blogg innlegg, avstandsstykkene tålte ikke påkjenningen og har blitt skiftet ut til til hylser av stål:
Andrea:
Etter å ha fått knappeoppsettet fra Elektro, så er nå hullbildet endret for at dette skal passe.
V3
Her er det designet en todelt knapp. Disse skal monteres på displayet slik at spillere ikke trykker rett på de gule bryterne. En holder til baksiden av displayet er også under utvikling, dens funksjon er å holde breadboardet på plass, samtidig som det lett kan tas ut av holderen for videre arbeid hvis det trengs. Siden vi da har knapper og holder festet til displayet vil det gjøre at breadboardet ikke permanent festes på noe sted. Knappene er også designet for å ha en maks nedtrykks distanse på 0,6mm, som er lik nedtrykks distanse på de gule bryterne. Dette vil sørge for at bryterne blir utsatt minst mulig belastning og slitasje. Knapper vil også gi et estetisk resultat.
Her er det avbildet begge de to delene av knappen. Det printes ut en i starten for å sikre minimal bruk av ekstra materiale og for å se om designet vil fungere.
– Knappene er ikke helt optimale og vil redigeres før ny print.
For dette displayet har det vært mye krangling for å få hull til led lys rundt kanten. Dette jobbes videre med, og utkjøring av display venter til dette er på plass.
Vi trenger også noen hjørnestykket for platen kameraet skal stå på. Disse er startet her, men det må sees an hvor det skal slåes hull i de, og eventuellt hvor store de skal være, da høyde posisjonen på plata vil bestemme hvilken lengde vi må tilføye for at den skal rekke helt ut til bena.
Siden det begynner å nærme seg slutten av prosjektet, har jeg i sammarbeid med Dag Ove satt opp en tidslinje. Her har vi ført opp alt mot slutten av prosjektet slik at alle kan ha full oversikt over hva som skal bli gjort når og hvilke deadliner vi har for prosjektet.

Data
Erik: Fått kamera til å kjøre med bruk av lccv (a libcamera wrapper for OpenCV). Har testet at ballen (oransje farget ball) kan bli sporet med bruk av OpenCV. Bruker fargen til ballen for å finne massesenteret til ballen. Får et punkt i 2D-planet (x, y) relativ til kameraet. Kan da styre stepper-motorene henholdsvis til punket. Dette gjøres i 1 tråd (thread), og er kodet i c++. Dette splittes opp og kjøres i 2 tråder (threads). Den ene tråden finner massecenter av ballen og legger dette til i en deque (threadsafe deque hentet fra https://github.com/miachm/STL-Threadsafe). Den andre tråden henter ut punktet fra deque-en og gjør nødvendige justeringer på spilleren med motorene. Spilleren klarer ikke helt ennå å blokkere ballen fra å gå i mål, men det er nærme
Elektro
Kristian: Denne uken har jeg fortsatt å jobbe med systemet som skal telle antall mål. Har denne gangen lagt til en RGB diode som skal lyse konstant grønt og når et mål blir registrert skal den blinke i mange forskjellige farger. I videoen under skjer dette ved hjelp av en knapp, men skal etterhvert kobles sammen med IR sensorene i hvert mål. Denne koden lånte jeg fra denne nettsiden og modifiserte litt til eget bruk. https://projecthub.arduino.cc/semsemharaz/interfacing-rgb-led-with-arduino-b59902.
// *Interfacing RGB LED with Arduino
// * Author: Osama Ahmed
// Define variables for LED pins and button pin
int redPin = 4;
int greenPin = 3;
int bluePin = 2;
int buttonPin = 7; // Pin connected to the button
bool buttonPressed = false; // Track button press
void setup() {
// Define the LED pins as OUTPUT
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
// Define the button pin as INPUT
pinMode(buttonPin, INPUT_PULLUP); // Use internal pull-up resistor
// Set initial LED color to green
setColor(0, 255, 0); // Constant green
}
void loop() {
// Check if the button is pressed
if (digitalRead(buttonPin) == LOW) { // Button press detected
buttonPressed = true;
}
// If the button was pressed, flash through colors
if (buttonPressed) {
// Blink quickly through each color
setColor(255, 0, 0); // Red
delay(100);
setColor(0, 255, 0); // Green
delay(100);
setColor(0, 0, 255); // Blue
delay(100);
setColor(255, 255, 255); // White
delay(100);
setColor(170, 0, 255); // Purple
delay(100);
setColor(127, 127, 127); // Light Blue
delay(100);
setColor(255, 0, 0); // Red
delay(100);
setColor(0, 255, 0); // Green
delay(100);
setColor(0, 0, 255); // Blue
delay(100);
setColor(255, 255, 255); // White
delay(100);
setColor(170, 0, 255); // Purple
delay(100);
setColor(127, 127, 127); // Light Blue
delay(100);
setColor(255, 0, 0); // Red
delay(100);
setColor(0, 255, 0); // Green
delay(100);
setColor(0, 0, 255); // Blue
delay(100);
setColor(255, 255, 255); // White
delay(100);
setColor(170, 0, 255); // Purple
delay(100);
setColor(127, 127, 127); // Light Blue
delay(100);
// Reset color to green and button state
setColor(0, 255, 0); // Back to constant green
buttonPressed = false; // Reset flag to wait for the next button press
}
}
void setColor(int redValue, int greenValue, int blueValue) {
analogWrite(redPin, redValue);
analogWrite(greenPin, greenValue);
analogWrite(bluePin, blueValue);
}
Jeg og Dag-Ove har også fått koblet opp motorene på bordet sånn at det er klart for å testes skikkelig. Arduinoen skal brukes til å styre skjermen for telling av mål og RGB osv.
Dag-Ove:
Gjort klart alt av ledninger, motstander, skjøter og lodding.
