Introduction: CARD DEALER
This project was made as part of an assigment of "Usos academics en terminologia específica en angles I" in which we where asked to build a small project with an Arduino Uno board.
We decided to build a card dealer for poker games (just for the challenge, we know it's not going to be better than someone actually dealing).
Step 1: What You'll Need
- 1 x Arduino Uno board
- 2 x Stepper motors 28byj-48
- 2 x Stepper motor drivers
- 1 x LCD screen 16x2
- 1 x IIC controller
- A bunch of jumpers (lots of them, you'll never have to many jumpers)
- 3 x 1kohm restistors
- 3 x push buttons
- 1 x welding board
- 1 x tin coil for welding
- 1 x welder
- 1 x wood sheet (420x297mm)
- 1 x PMMA sheet (210x297mm)
- 1 x Glue
- 1 x Pain (red in our case)
- 4 x Bearing (10mm inner diam)
- 4 x Nylon axis (15mm long 10mm diam)
- 1 x Stell axis (20mm long 3mm diam)
- 2 x gears (50 tooth and 10 tooth)
- 1 x rubber band
Step 2: Step 1: Build Your Circuit
Step 3: Step 2: Get Your Code and Test It!
The code is like supper beginer, but im very proud of it since its my first arduino code ever :)
(i'll try and enter more commentaries to it later on)
//Enter Libraries
#include #include #define TOTALSTEPS 32*64 LiquidCrystal lcd(0); //Enter Variables int stepstoDo; int state = 0; //Inital state int stage = 1; int i = 0; boolean playerS = false; boolean e = false; int p = 2; int players = 4; int maxplayers = 8; int minplayers = 2;
int Bdelay = 20; int cardDelay = 2000; //stepper motors pins int motorPin1 = 5; int motorPin2 = 6; int motorPin3 = 7; int motorPin4 = 8; int motorPin5 = 9; int motorPin6 = 10; int motorPin7 = 11; int motorPin8 = 12; //Arduino pin definition int const LEFT = 1; int const ENTER = 3; int const RIGHT = 4; //detector int trigerpin = 13; int echopin = 2; float distance; long t;
void setup() { //detector digitalWrite(trigerpin, HIGH); delay(10); digitalWrite(trigerpin, LOW); attachInterrupt(echopin, detector, CHANGE); // put your setup code here, to run once: pinMode(LEFT, INPUT); pinMode(ENTER, INPUT); pinMode(RIGHT, INPUT); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("CARD"); lcd.setCursor(0, 1); lcd.print("MASTER"); delay(3000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("WELCOME!"); delay(1500); lcd.setCursor(0, 1); lcd.print("press enter"); //declare the motor pins as outputs pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); pinMode(motorPin5, OUTPUT); pinMode(motorPin6, OUTPUT); pinMode(motorPin7, OUTPUT); pinMode(motorPin8, OUTPUT); Serial.begin(9600); }
void loop() { if (state == 0 && digitalRead(ENTER) == LOW) { lcd.clear(); state = 1; } //GAME SELECTION if (state == 1) { lcd.setCursor(0, 0); lcd.print("Select players!"); playerS = true;
//PLAYER SELECTION if (playerS == true) { if (digitalRead(ENTER) == LOW) { playerS = false; state = 2; delay(Bdelay); } else if (digitalRead(LEFT) == LOW) { if (players <= minplayers) { players = maxplayers + 1; } players--; delay(Bdelay); } else if (digitalRead(RIGHT) == LOW) { if (players >= maxplayers) { players = minplayers - 1; } players++; delay(Bdelay); } lcd.setCursor(0, 1); lcd.print("PLAYERS = "); //print number players lcd.print(players); //print number players } } //--------------------------------POKER------------------------------------------- else if (state == 2 && playerS == false) { if (stage == 1) { if (e == false) { lcd.clear(); lcd.print("POKER!!"); lcd.setCursor(0, 1); lcd.print("dealing..."); e = true; } else if (e == true) { //deal 2 cards each for (i; i < (2 * players) - 1; i++) { S_deal(); stepstoDo = TOTALSTEPS / players; S_tower_H(); delay(Bdelay); }
lcd.setCursor(0, 1); lcd.print("press ENTER"); if ( digitalRead(ENTER) == LOW) { stage = 2; e = false; i = 0; delay(Bdelay); } } } else if (stage == 2) { if (e == false) { lcd.clear(); lcd.setCursor(0, 1); lcd.print("dealing..."); e = true; } for (i ; i < 1; i++) { S_deal(); //burn stepstoDo = TOTALSTEPS / 10; //distance between positions S_tower_H(); //move to position 1 delay(Bdelay); S_deal(); //deal S_tower_H(); //move to position 2 delay(Bdelay); S_deal(); //deal S_tower_H(); //move to position 3 delay(Bdelay); S_deal(); //deal stepstoDo = 3 * TOTALSTEPS / 10; S_tower_A(); //go back to burn area delay(Bdelay); }
lcd.setCursor(0, 1); lcd.print("press ENTER"); if ( digitalRead(ENTER) == LOW) { stage = 3; e = false; i = 0; delay(Bdelay);
} //wait } else if (stage == 3) { if (e == false) { lcd.clear(); lcd.print("dealing..."); e = true; } for (i; i < 1; i++) { S_deal(); //burn stepstoDo = 4 * TOTALSTEPS / 10; S_tower_H(); delay(Bdelay); S_deal(); //deal S_tower_A(); delay(Bdelay); }
lcd.setCursor(0, 1); lcd.print("press ENTER"); if ( digitalRead(ENTER) == LOW) { stage = 4; e = false; i = 0; delay(Bdelay); } //burn 1 //deal 1 //wait } else if (stage == 4) { if (e == false) { lcd.clear(); lcd.print("dealing..."); e = true; } for (i; i < 1; i++) { S_deal(); //burn stepstoDo = 5 * TOTALSTEPS / 10; S_tower_H(); //move to position 5 delay(Bdelay); S_deal(); //deal S_tower_A(); //go back to home area delay(Bdelay); }
lcd.setCursor(0, 1); lcd.print("press ENTER"); if ( digitalRead(ENTER) == LOW) { stage = 5; e = false; i = 0; delay(Bdelay); } } else if (stage == 5) { if (e == false) { lcd.clear(); lcd.print("END OF GAME"); e = true; } lcd.setCursor(0, 1); lcd.print("press ENTER"); if ( digitalRead(ENTER) == LOW) { stage = 1; state = 1; e = false; delay(Bdelay); } } } }void S_deal() {
for (int d = 0; d <= TOTALSTEPS / 5; d = d + 4) {int motorSpeed = 5; //variable to set stepper speed // 1 digitalWrite(motorPin4, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, LOW); delay(motorSpeed); // // 2 // digitalWrite(motorPin4, HIGH); // digitalWrite(motorPin3, HIGH); // digitalWrite(motorPin2, LOW); // digitalWrite(motorPin1, LOW); // delay (motorSpeed); // 3 digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, LOW); delay(motorSpeed); // // 4 // digitalWrite(motorPin4, LOW); // digitalWrite(motorPin3, HIGH); // digitalWrite(motorPin2, HIGH); // digitalWrite(motorPin1, LOW); // delay(motorSpeed); // 5 digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin1, LOW); delay(motorSpeed); // // 6 // digitalWrite(motorPin4, LOW); // digitalWrite(motorPin3, LOW); // digitalWrite(motorPin2, HIGH); // digitalWrite(motorPin1, HIGH); // delay (motorSpeed); // 7 digitalWrite(motorPin4, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin1, HIGH); delay(motorSpeed); // // 8 // digitalWrite(motorPin4, HIGH); // digitalWrite(motorPin3, LOW); // digitalWrite(motorPin2, LOW); // digitalWrite(motorPin1, HIGH); // delay(motorSpeed); } delay(cardDelay); }
//declare variables for the motor pins
void S_tower_A() { for (int t = 0; t <= stepstoDo; t = t + 4) {
int motorSpeed = 5; //variable to set stepper speed // 1 digitalWrite(motorPin5, HIGH); digitalWrite(motorPin6, LOW); digitalWrite(motorPin7, LOW); digitalWrite(motorPin8, LOW); delay(motorSpeed); // // 2 // digitalWrite(motorPin5, HIGH); // digitalWrite(motorPin6, HIGH); // digitalWrite(motorPin7, LOW); // digitalWrite(motorPin8, LOW); // delay (motorSpeed); // 3 digitalWrite(motorPin5, LOW); digitalWrite(motorPin6, HIGH); digitalWrite(motorPin7, LOW); digitalWrite(motorPin8, LOW); delay(motorSpeed); // // 4 // digitalWrite(motorPin5, LOW); // digitalWrite(motorPin6, HIGH); // digitalWrite(motorPin7, HIGH); // digitalWrite(motorPin8, LOW); // delay(motorSpeed); // 5 digitalWrite(motorPin5, LOW); digitalWrite(motorPin6, LOW); digitalWrite(motorPin7, HIGH); digitalWrite(motorPin8, LOW); delay(motorSpeed); // // 6 // digitalWrite(motorPin5, LOW); // digitalWrite(motorPin6, LOW); // digitalWrite(motorPin7, HIGH); // digitalWrite(motorPin8, HIGH); // delay (motorSpeed); // 7 digitalWrite(motorPin5, LOW); digitalWrite(motorPin6, LOW); digitalWrite(motorPin7, LOW); digitalWrite(motorPin8, HIGH); delay(motorSpeed); // // 8 // digitalWrite(motorPin5, HIGH); // digitalWrite(motorPin6, LOW); // digitalWrite(motorPin7, LOW); // digitalWrite(motorPin8, HIGH); // delay(motorSpeed); } }
////////////////////////////////////////////////////////////////////////////// //set pins to ULN2003 high in sequence from 4 to 1 //delay "motorSpeed" between each pin setting (to determine speed)
void S_tower_H() {
for (int t = 0; t <= stepstoDo; t = t + 4) {
int motorSpeed = 5; //variable to set stepper speed // 1 digitalWrite(motorPin5, HIGH); digitalWrite(motorPin6, LOW); digitalWrite(motorPin7, LOW); digitalWrite(motorPin8, LOW); delay(motorSpeed); // // 2 // digitalWrite(motorPin5, HIGH); // digitalWrite(motorPin6, LOW); // digitalWrite(motorPin7, LOW); // digitalWrite(motorPin8, HIGH); // delay (motorSpeed); // 3 digitalWrite(motorPin5, LOW); digitalWrite(motorPin6, LOW); digitalWrite(motorPin7, LOW); digitalWrite(motorPin8, HIGH); delay(motorSpeed); // // 4 // digitalWrite(motorPin5, LOW); // digitalWrite(motorPin6, LOW); // digitalWrite(motorPin7, HIGH); // digitalWrite(motorPin8, HIGH); // delay(motorSpeed); // 5 digitalWrite(motorPin5, LOW); digitalWrite(motorPin6, LOW); digitalWrite(motorPin7, HIGH); digitalWrite(motorPin8, LOW); delay(motorSpeed); // // 6 // digitalWrite(motorPin5, LOW); // digitalWrite(motorPin6, HIGH); // digitalWrite(motorPin7, HIGH); // digitalWrite(motorPin8, LOW); // delay (motorSpeed); // 7 digitalWrite(motorPin5, LOW); digitalWrite(motorPin6, HIGH); digitalWrite(motorPin7, LOW); digitalWrite(motorPin8, LOW); delay(motorSpeed); // // 8 // digitalWrite(motorPin5, HIGH); // digitalWrite(motorPin6, HIGH); // digitalWrite(motorPin7, LOW); // digitalWrite(motorPin8, LOW); // delay(motorSpeed); } }
Step 4: Step 3 : Cut Your Wood and Pmma Boart
Use the dwg. file attached.
(if you have acces to a laser cutter then its sooooo much easier)
Attachments
Step 5: Step 4 : Assembly 1
Step 6: Step 5 : Pain Your Case
Step 7: Step 6 : Assembly 2 (connect Your Circuit and Make It Fit)
Step 8: Step 7 : Final Assembly
Start playing!!