Card Please - Card Dealer

by Tohu71 in Circuits > Arduino

1745 Views, 13 Favorites, 0 Comments

Card Please - Card Dealer

Card Please! Demo Video

Om er kort over te vertellen, het is een kaarten uitdeler die de kaart gelijk in de persoons handen schiet zodra de persoon dichtbij komt. Card Please! blijft kaarten schieten totdat je hand weg is. Dit is een concept waar ik al mee bezig ben geweest sinds vorig jaar omdat ik dit vak moet herkansen. Ik ga beschrijven hoe ik op het concept ben gekomen en hoe ik het uiteindelijk heb gemaakt.

Supplies

Benodigdheden:

- Arduino Uno

- Arduino Kabel

- Adapter - Servo sg90 motor

- Ultrasonic sensor

- Buzzer

- Jumping wires (zoveel mogelijk!)

- Klein stukje soldeer plaat

Behuizing:

- MDF 3 mm dik

- Lijm

- Dubbel zijdige tape

- Rubber foam

- Dikke rubber foam.

- Dunne spijkers/naalden met een topje.

Gereedschap:

- Soldeerbout

- Tin (voor het solderen)

- Knip tang

- Plek om te lasercutten (echt handig!)

- dunne schroeve draaier

- stanly mes (deze is voor het dikke rubber foam)

Concept

DSC_2437.JPG
DSC_2388.JPG

Zoals eerder vertelt is Card Please! een kaarten uitdeler. Card Please! zorgt ervoor dat als je hand of een object dichtbij de Ultrasonic sensor zit dat er de bovenste kaart eruit geschoten de stapel kaarten. De stapel kan je gemakkelijk in het vakje stoppen. Haal eerst het wiel omhoog en schuif daarna de stapel kaarten erin. Elke keer als er een kaart wordt geschoten zakt de wiel een stuk naar beneden zodat de het wiel de stapel kaarten blijft aanraken en door kan blijven schieten. Elke keer als er geschoten wordt speel de machine een willekeurig kort deuntje.

Card Please! kan gebruikt worden bij kaartspellen zoals pesten, UNO of Exploding Kittens. Als je een kaart nodig hebt hoef je alleen je hand voor de Ultrasonic sensor te houden en je krijgt je kaart automatisch. Ook kan dit gebruikt worden voor andere soort kaarten zoals visitekaartjes of nummer kaartjes (voor als je in de rij staat ergens).

Ik kwam met dit concept omdat ik zelf kaartspelletjes leuk vind. Ik vroeg mij af of er een kaarten uitdeler bestond door alleen maar je hand dichtbij te houden. Ik zocht op maar ik zag vele waarbij het bestuurd werd met knoppen. Dus dit werd een mooi idee voor het ITTT project!

Iteraties

Concept Illustratsion.jpg
Concept Illustratsion Plan B idee.jpg
Concept Illustratsion 3.jpg
DSC_2070.JPG
DSC_2222.JPG
DSC_2223.JPG
DSC_2225.JPG
DSC_2239.JPG
DSC_2238.JPG
Card Please! Iteration Video

In het eerste jaar hield ik erg vast aan het idee van een kaarten uitdeler/schieter. Helaas kreeg ik nooit de DC motor aan de praat die ik ervoor wilde gebruiken . Daarnaast ging mijn laptop kapot voor een halve dag. In het begin van het tweede jaar wilde ik kijken of ik andere dingen kon proberen met de componenten die ik had. Ik wilde nog steeds iets doen met de Ultrasonic sensor omdat het idee om met iets te interacteren zonder iets aan te raken wel interessant was.

Het eerste idee waar ik mee kwam was een pinball flipperkast. Waarbij je de flipper moest besturen door je hand voor de sensor te houden zodat hij omhoog zou gaan, als de sensor niks ziet (je hand weg is) dan gaat de flipper weer naar beneden. Door zo snel mogelijk met je handen heen en weer te gaan kan je dus schieten. Het idee was dat de bal weer terug zou gaan naar de schieter zodat je weer opnieuw kan beginnen. (Zie 1ste afbeelding).

Helaas werd dit idee niet gekozen omdat ik erachter kwam dat de servo motor die ik wilde gebruiken niet sterk en snel genoeg was om ermee te schieten. Ik zou hiervoor een solenoid component moeten kopen, helaas had ik het geld er niet voor om te besteden.

Een tweede idee die ik had was een ongeveer hetzelfde concept maar dan met een waaier vast gemaakt aan de servo motor. Elke keer als de Ultrasonic je hand zou zien dan zou de waaier heen en weer gaan. Het doel was om een veer in de lucht te houden. Uiteindelijk kwam ik snel tot een conclusie dat ik niet verder wou gaan hiermee omdat dit idee niet aantrekkelijk genoeg was voor mij. (Zie 2de afbeelding).

Uiteindelijk ging ik weer terug naar mijn allereerste idee, De kaarten uitdeler. Door de andere iteraties kwam ik erachter dat het mogelijk was om de kaarten uitdeler waar te maken zonder de dc motor te gebruiken, in plaats daarvan kon ik gebruik maken van de servo motor. En zo was is mijn uiteindelijke idee van de kaarten uitdeler weer herboren. (Zie 3de afbeelding).

Met gebruik van de servo motor en ultrasonic sensor begon ik met een simpel prototype. Ik ging eerst testen of de servo motor zou werken als ik mijn hand voor de ultrasonic sensor had gedaan. Gelukkig deed hij het! Ik ging toen het wiel prototype. Het wiel had ik toen gemaakt van een houten rol en schilders tape. De schilders tape had ik om de rol omwikkeld zodat er grip op zou zitten. De grip was nodig om de kaarten mee te nemen. (Zie 4de t/m 7de afbeelding).

Ik kwam erachter dat het wiel de kaart niet helemaal eruit schoot. Ik kwam met het idee om nog een grotere wiel te maken. Dit keer gebruikte ik een rol tape. Om de rol heb ik weer schilders tape gebruikt voor grip. Na het testen werkte de grote wiel veel beter! Hij schoot de kaart echt uit het bakje! Door het wiel groter te maken pakt de wiel de kaart ook helemaal mee! Met deze ontdekking ging ik uiteindelijk verder naar het eind product zoals het nu is! (Zie 8ste, 9de afbeelding en Iteratie Video).

Voor de behuizing moest ik goed nadenken, omdat het wiel kaarten moet blijven schieten ondanks dat de stapel kaarten steeds kleiner wordt. Ik heb voor mijn behuizing een mechanisme bedacht. Deze mechanisme zorgt ervoor dat elke keer als er een kaart geschoten wordt, het wiel naar beneden zakt. Zo kan het wiel de nieuwe bovenste kaart weg schieten. Daarnaast moest het product hoog genoeg zijn voor het wiel. (Zie 3de afbeelding).

Arduino Layout En Solderen

Layout Arduino Card dealer.png
DSC_2168.JPG
Soldeer bedrading edit.png
DSC_2166.JPG
DSC_2345.JPG
DSC_2234.JPG

Hierboven zie je het schema van mijn project met de breadboard. Zorg dat alle onderdelen goed zitten. Voor solderen heb ik een foto gemaakt van het kleine printplaatje. Deze printplaatje is ongeveer 5 x 3 cm. Dit kan nog kleiner maar ik wilde zeker zijn van stevigheid. Zolang je genoeg plek hebt voor alle 7 draadjes dan komt het goed! Deze plaat dient vooral om stroom te geven aan de componenten. In de derde en vierde afbeelding zie je voor welk component elke draad naartoe gaat en hoe de achterkant gesoldeerd is.

In de laatste foto zie je hoe het eruit moet zien als je alles hebt gesoldeerd en in elkaar hebt gezet met de Arduino.

Behuizing

Dia1.JPG
Dia2.JPG
Dia3.JPG
Dia4.JPG
Dia5.JPG
Dia6.JPG
Dia7.JPG
Dia8.JPG
Dia9.JPG
Dia10.JPG
Dia11.JPG
Dia12.JPG
Dia13.JPG
Dia14.JPG
Dia15.JPG
Dia16.JPG
Dia17.JPG
Dia18.JPG
Dia19.JPG
Dia20.JPG
Dia21.JPG
Dia22.JPG
Dia23.JPG
Dia24.JPG

In Adobe Illustrator heb ik de lay-out van de behuizing gemaakt op maat. Deze kan je in elkaar zetten met de instructies onderaan! Als hij in elkaar is gezet zal het doosje 124 x 200 x 130 mm zijn.

1. Download de bestanden en zorg dat je de behuizing gaat laser cutten. Je kan deze laten snijden bij een makerspace. Het is erg belangrijk dat je 3 mm dik MDF hout gebruikt! Anders passen de stukken niet meer op elkaar!

2. Volg de instructies van de afbeeldingen in de galerij. Daar is uitgelegd hoe je de stukken in elkaar moet zetten.

3. Sluit de kabel aan de Arduino en maak je klaar om de code in de Arduino te stoppen.

Code

Dit is de code voor het project! Je kan deze downloaden hier of over kopiëren. Als je wilt kopiëren kan je "pitches.h" vinden op de Arduino website, deze link kan je onderaan vinden bij bron.

Zorg ervoor dat je beide “CardPlease_Code” en “pitches.h” op de Arduino zet in een INO bestand.

#include "pitches.h" //Import pitches.h
#include <Servo.h> //Import the Servo library


//Needed Variables 
Servo servo;
#define trigPin 7
#define echoPin 6
int buzzer = 9;
int randomSong;


//Song list
// Here you make the songs by using the Notes from pitches.h .  

//"melody" contains the notes the buzzer has to play
//"noteDurations" are the note durations. 4 = quarter note and 8 = eighth note etc. 

//Melody 1-------------------------------------------------------
int melody[] = {
  NOTE_C4, NOTE_G3, NOTE_G3
};

int noteDurations[] = {
  4, 8, 8
};

//Melody2--------------------------------------------------------
int melody2[] = {
  NOTE_D5, NOTE_E5, NOTE_A4
};

int noteDurations2[] = {
  4, 4, 8
};
//---------------------------------------------------------------

void setup() {

  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  servo.attach(3);

  // These are used to generate the random melody
  randomSeed(analogRead(A0));
  randomSong = random(1, 3);
}

void loop() {

  //This checks if there is an object in sight of the sensor
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  randomSong = random(1, 3);

  // If there are no objects close enough then the servo motor will stay put
  if (distance > 20 && distance > 10) {
    noTone(buzzer);
    servo.write(0);
  }

  // If there are objects close enough the servo motor and buzzer will activate and shoots out a card.
  // If the object (hand) stays close to the sensor the servo motor will keep rotating back and forth causing to shoot cards.
  // It will only stop if you remove the object/hand form the sensor's sight.
  if (distance < 10 && distance > 0) {
    Serial.println("distance is onder 10");
    servo.write(180);
    delay(330);
    servo.write(0);

    // Switches between melody's randomized by "randomSong"
    switch (randomSong) {
      case 1:
        MelodyPlayer();
        break;

      case 2:
        MelodyPlayer2();
        break;
    }
  }
}


// Melody Player Functions, these functions plays the songs

void MelodyPlayer() {
  for (int thisNote = 0; thisNote < 3; thisNote++) {
    int noteDuration = 1000 / noteDurations[thisNote];
    tone(buzzer, melody[thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    noTone(buzzer);
  }
}

void MelodyPlayer2() {
  for (int thisNote = 0; thisNote < 3; thisNote++) {
    int noteDuration = 1000 / noteDurations2[thisNote];
    tone(buzzer, melody2[thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    noTone(buzzer);
  }
}

Extra uitleg:

Door te checken of er een object of hand dichtbij genoeg is bij de Ultrasonic sensor zorgt de code ervoor dat als een object dichtbij genoeg is dat de servo motor gaat draaien. Tijdens het draaien speelt de buzzer ook een willekeurige melodie af. In de code is er ook een switch case die ervoor zorgt dat de melodieën willekeurig worden gekozen om af te spelen na elke kaart die geschoten wordt. Het cijfer wordt elke keer opnieuw bepaald door de loop functie.

Zoals je kan zien in de afbeeldingen zie je een extra tab genaamd “pitches.h”. In deze tab staan allemaal verschillende noten. In de huidige code kan je verwijzen naar deze noten zodat de buzzer weet welke noten hij moet spelen. Deze is ook geïncludeerd boven aan in de huidige code, zodat de code weet waar hij de noten vandaan moet halen. Het is dus belangrijk dat je dit niet vergeet toe te voegen!

De melodie wordt bespeeld door de melodyPlayer functies. Zij berekenen hoelang en welke melodie er bespeeld moet worden. Deze informatie halen ze vanuit de variabelen bovenaan de code, de melodie lijst met de noten en de noten duur lijst. Deze hebben de functies beide nodig om de melodie goed te laten spelen.

Tip: Je kan melodieën toevoegen om er een spel van te maken. Bijvoorbeeld bij het spel "pesten", als je een bepaald melodie krijgt terwijl je een kaart krijgt, dan moet je zo snel mogelijk een woord roepen. De laatste die het roept moet dan extra kaarten trekken.

Bron: https://www.arduino.cc/en/Tutorial/BuiltInExamples...

Reflectie

PMI ITTT 2021.png

Toen ik moest herkansen moest ik heel veel weer bij leren. Het verbaasde mij hoeveel ik nog heb onthouden van het eerste jaar. Hiermee had ik gelukkig een voorsprong. In het begin probeerde ik iets anders te verzinnen dan mijn idee van het eerste jaar. De nieuwe ideeën werden niet gekozen, maar dankzij de iteraties heb ik ontdekt hoe ik mijn originele idee alsnog kan uitvoeren! Ook dankzij een medestudente heb ik veel hoop gekregen om het vak nog te kunnen halen (hoop ik).

Gelukkig had ik daarnaast ook geen probleem met het solderen. Alleen moest ik het wel op tijd regelen omdat ik thuis geen soldeerbout heb. Gelukkig is alles goed gekomen en kon ik voordat de school ging sluiten nog mijn project vast solderen.

Ik heb tijdens het solderen veel geleerd van Maarten Kip. Tijdens het testen merkte ik dat mijn project het niet goed deed op batterij, maar wel als ik hem in de laptop plugde. Maarten keek ernaar en kwam erachter dat het lag dat ik niet genoeg stroom kreeg. Ik was al bezorgd dat het ging om mijn soldeer werk maar gelukkig lag dat niet daaraan.

Eenmaal toen ik mijn project werkend kreeg was ik klaar voor om te laser cutten. Solderen voor mij was het moeilijkste gedeelte. Voor het maken van de behuizing in illustrator had ik veel plezier erin! Het ervoor zorgen dat de maten en gaten klopte qua formaat zodat alle stukken goed zouden passen gaf mij een kick, vooral nadat ik het liet laser cutten en het in elkaar ging zetten. Dit was een satisfying gevoel!

Na mijn project in elkaar te hebben gezet vond ben ik van mening dat Arduino veel vereist van je. Het proces van het project is erg vervelend soms maar eenmaal klaar, gaf het wel een gevoel van voltooiing. Daarnaast heb ik veel kunnen leren over planning. Als je goed plant en je project simpel houdt dan heb je ook een betere overzicht, vooral als je alleen maar kan solderen bij de makerspace. Voor het coderen heb ik geleerd dat je niet veel hoeft te schrijven om je Arduino al iets te laten doen. Er zijn zoveel mogelijkheden maar je hebt echt maar een paar code nodig om iets moois neer te zetten. Verder ben ik trots dat ik iets bereikt hebt en dat is een kaarten uitdeler maken met een leuke interactie!

In de afbeelding vind je mijn PMI!