Learning new topics and practicing with test models can often feel dull, presenting a significant challenge. However, why not inject some excitement by tapping into students' imagination and creating an engaging learning environment? By embracing modern gaming elements and captivating narratives, we can transform mundane curriculum questions into a thrilling live game experience. In this game, students become the heroes of their own story, earning rewards like medals, extra lives, and bonuses as they conquer challenges. Our duty is to ignite passion and curiosity in our students, ensuring that learning becomes an adventure they eagerly embark upon.
Software😀
RDWorks V8 for Laser cut Preparation in my LapTop
GrabCad to download the components to fusion 360.
Fusion 360 for Modeling
Arduino IDE to upload the code to the Arduino Uno
LaserWork V6 for Laser cut Preparation at Fab-Lab
Machines 😀
Materials🥳
Laser Cut
Attach the Parts together
3D Print
Components 🥳
LCD screen :(20x4) to display the questions and answers and messages.
3 Arcade Buttons: To generate the randomize and choose the correct answer
Jumper wires: to connect the component.
Arduino uno: to control the components.
I started drawing by the base 300 x 450 mm with 6 T-slots and 8 tabs on each side.
then i projected the holes for Arduino on base sketch
extrude 3 mm
I started drawing by the side A base 70 x 300 mm and drew the holes for tabs from back side
it was done by projecting the sides
extrude 3 mm
I started drawing by the side A base 139 x 450 mm with 6 T-slots and 2 tabs on upper part of side
then i drew on the side the mounting part for Arduino
one hole is 16 x 10.50 mm and the other for 16 x 14 mm
extrude 3 mm
i then duplicated the sides but removed the holes for Arduino mount.
I started drawing by the side A base 147.176 x 294 mm
then drew the holes for tabs from side by projection.
extrude 3 mm
I started drawing by the side A base 97.476 x 300 mm and drew the holes for tabs from back side
then i drew on the side the mounting part for screen LCD I2C 20 x 4 by projection.
extrude 3 mm
I projected the size of the top part from the body of the rest of game
started to draw the slots and snake by inserting a photo and using spline to draw it and drew a ladder as well
Final design with joints 🔥
Video present Timeline Using Fusion to Design the Enclosure and the 120 brackets
.dxf file of each side was exported from fusion 360 & imported to LaserWork
The cut area (black) was defined with a cut speed of 40 & power of 30
speed cut with a speed of 300 & power of 30
Finally, the file was saved in .rld format
The .stl files of brackets were downloaded from Fusion360 & imported to Ultimaker Cura software, then choosing the printer ( PRUSA i3 MK2 ) & the material ( PLA)
Profile: 0.3 mm extra fast (to save time)
Infill: 20%
Support: no support The best orientation is chosen to lay flat on the base side
Brim: yes
Brackets file: number of layers: 25 min - 5 gm
.gcode files were saved
Laser Cut
.dxf file of each side was exported from fusion 360 & imported to LaserWork
The cut area (black) was defined with a cut speed of 40 & power of 30
speed cut with a speed of 300 & power of 30
Finally, the file was saved in .rld format
I went to Fab Lab Maadi at the which is assigned time.
I opened the (.rld) file on rdwork software on the PC to make sure the parameters ok.
I turned on the machine.
I Place the PLY 3mm wood sheet.
I downloaded the file from the PC to the machine.
Insert it into the machine by the (file) and then (enter) Buttons.
I move the nozzle to the beginning of the wood sheet by (+) Button.
I set the origin point by the (origin) Button.
I tested the frame by the (Frame) Button.
Finally, I start the machine with the (start) Button).
I used 4 sheets (50 x 30 cm) and the total cutting process for the 4 sheets takes around 9 min
Now, all parts are ready to assemble using 3 mm screws and nuts.
Assemble the boxes & Mount the components
3D Print
for Brackets & Dice
The .stl files of brackets were downloaded from Fusion360 & imported to Ultimaker Cura software, then choosing the printer ( PRUSA i3 MK2 ) & the material ( PLA)
Profile: 0.3 mm extra fast (to save time)
Infill: 20%
Support: no support The best orientation is chosen to lay flat on the base side
Brim: yes
Brackets file: number of layers: 25 min - 5 gm
.gcode files were saved
The specialist reviewed my file to make sure that all parameters ok.
I saved the file as (.gcode) on the machine's sim card.
Then, insert the sim card into the machine.
After that, I unloaded the loaded filament then load a black PLA filament and wait till the loading process is finished.
Then, I choose the file brackets was overnight in fab lab from the sim card and press start to print file, and wait till the heating process for the nozzle to 215 degrees and the bed plate to 60 degrees.
The process takes 24 min. as assumed by UltiMaker Cura.
Repeat the same process to print the dice , It takes 30 mins
Software:
Tinkercad: to build the virtual circuit
Arduino IDE: to write & upload the code to the Arduino board
Input Components:
3 push buttons to play
Output components:
LCD I2C 20 x 4
Other Components:
Breadboard, jumpers to connect the component
Arduino Uno: to read the input signals from the & control output components
9V adapter
Connect the VCC pin on the backpack to the 5V pin on the Arduino.
Connect the GND pin on the backpack to any GND pin on the Arduino.
Connect the SDA pin on the backpack to the A4 pin on the Arduino.
Connect the SCL pin on the backpack to the A5 pin on the Arduino.
connect one leg of the first push button to pin 5 on the Arduino.
Connect the other leg of the first push button to any GND pin on the Arduino.
Repeat the same steps for the other two push buttons:
Connect one leg of the second push button to pin 6 on the Arduino.
Connect the other leg of the second push button to any GND pin on the Arduino.
Connect one leg of the third push button to pin 7 on the Arduino.
Connect the other leg of the third push button to any GND pin on the Arduino.
all GND are connected in a row in breadboard. so is the 5 V
Initialize LCD Display: The program initializes the LCD display, setting up the number of columns, rows, and the I2C address.
Set Up Buttons: The pins for the buttons (buttonPin, buttonPinA, buttonPinB) are configured as input pins with internal pull-up resistors.
Display Welcome Message: The LCD display shows a welcome message and an invitation to start the game.
Main Loop:
Check Interval: Every 30 seconds (30000 milliseconds), the program checks if it's time to move to the next question.
Start Game: If the button is pressed, the game starts, and the first question is displayed.
Check Answers: If button A or B is pressed, the chosen answer is checked against the correct answer for the current question.
Display Result: Depending on whether the answer is correct or not, the LCD displays "Correct!" or "Wrong!".
Display Random Number: If the correct answer is chosen for the current question and the random number hasn't been displayed yet, a random number between 1 and 5 is generated and displayed.
Move to Next Question: After a correct answer is chosen and the random number is displayed, the program moves to the next question.
Display Question: The LCD displays the current question and its choices (A or B).
Check Answer: The chosen answer is checked against the correct answer for the current question.
Display Result: Depending on whether the answer is correct or not, the LCD displays "Correct!" or "Wrong!".
Display Random Number: If the correct answer is chosen for the current question and the random number hasn't been displayed yet, a random number between 1 and 5 is generated and displayed.
The power source for the project (9V adapter).
I chose the (9V adapter) Arduino powered by 7 Volts to 12 Volts and the components of the circuit need only 5 volts.
scroll code video
Including Libraries: The code includes two libraries: Wire.h for I2C communication and LiquidCrystal_I2C.h for controlling an LCD display via I2C.
Initializing LCD and Button Pins: The LCD is initialized with its I2C address, number of columns, and number of rows. Three pins are defined for buttons: buttonPin, buttonPinA, and buttonPinB.
Global Variables:
buttonPressed: Tracks whether a button has been pressed.
correctAnswer: Tracks whether the answer to the current question is correct.
randomDisplayed: Tracks whether a random number has been displayed.
previousMillis: Stores the time in milliseconds when the last action occurred.
interval: Sets the interval (in milliseconds) for moving to the next question.
currentQuestion: Tracks the index of the current question.
Setup Function:
Initializes serial communication, LCD, and sets up the backlight.
Clears the LCD screen and prints a welcome message.
Loop Function:
Checks if the interval has passed to move to the next question.
Checks if a button is pressed to start the game.
Checks if buttons A or B are pressed for answering questions.
Displays the result of the answer and prompts to continue if correct.
Displays a random number if conditions are met.
Display Question Function: Displays the question and choices on the LCD based on the current question index.
Check Answer Function: Checks if the chosen answer is correct for the current question.
Display Result Function: Clears the LCD and displays "Correct!" or "Wrong!" based on the answer.
Display Random Number Function: Clears the LCD and displays a random number between 1 and 5.
welcome Message
Question Message
Correct Message
Random number
Wrong Message
Testing LCD
Testing LCD wit Push Buttons
Demo for the final Project Wiring before Final Assembly and testing functionality
T-Slots and Tabs
wiring process following tinkerCad
Demo Video for Project
I loved working with everyone , i asked during the offline session for feedback from my instructors Ahmed and menna and they always gave thier feedback
also i asked for some techincal problem on slack and mostafa was there to help
It was an enjoyable experience full of challenges and achievements.
The main challenge writing a code that would generate a question with its choices and choose the correct answer.google was my best friend
aslo this link and this progammer were great help and reddit as well https://www.instructables.com/Interactive-Electronics-Quiz-Game-With-Arduino/
improve the code and add more question
do some kind of algorithm to make the experience more enjoyable
add a scoring system to the project. This means keeping track of how many questions the player gets right. When they answer a question correctly, their score goes up. If they answer incorrectly, their score stays the same or goes down. This adds an extra challenge and makes the game more fun for players.