My Final Project

This is where I will start defining my final project idea and start to get used to the documentation process.

Presentation Slide

Presentation Video


Application and implication


System Integration


Project Development

The idea

For my final project i wanted to explore how 8bit games can be brought back into this era. I also wanted to explore the aspect of being in the present and how it can help enhance cognitive function through strategic thinking and problem-solving, increased social interaction and bonding, and opportunities for relaxation and stress reduction. In this age where gaming has become individualistic, i would like to cultivate a sense of shared experience back into game spaces.

Inspiration

We all have played Minesweeper as children on our computers. Following the earlier said concept of nostalgia for the future, i wondered how it would be to bring the game into the physical world while keeping the soul of the game intact. There would be randomized set of possibilities to play for each person and similar effects of game such as the sound of the original game can be added to the physical playing console.


We all have played Minesweeper as children on our computers. Following the earlier said concept of nostalgia for the future, i wondered how it would be to bring the game into the physical world while keeping the soul of the game intact. There would be randomized set of possibilities to play for each person and similar effects of game such as the sound of the original game can be added to the physical playing console.
Minesweeper is a puzzle video game where the objective is to uncover all safe squares on a grid without detonating any mines (bombs). The game board is divided into cells, some of which contain mines and others that are safe. Players uncover cells by clicking on them, revealing either a number (indicating the number of adjacent mines) or a blank tile (if no mines are adjacent).
This was the origin point of my final project journey.


As the weeks went by, gaining more knowledge and understanding on various topics , I thought of making the whole board modular which expanded the scope of the project to many directions.

MoodBoard

I pulled inspiration from various products and graphics for the colour, feel, design etc. I basically wanted a retro feel with a pop of colour to maintain playfulness.

Research and development throughout the weeks

From Input Devices Week

During this week I tested out two sensors to compare them and then see which would be better suited for my project. Mainly the objective of this week was to finalize a sensor device for navigating the menu of the gamepad . At the end i went with the rotary encoder as it was the easier option for navigating for the current version of my project.

From Output Devices Week

For this week i wanted to explore the output devices that would be required for my final project. I wondered if i could make a mini version of a module of my final project to test out the features. The output devices i wanted to use this week are :

Networking week

This was the week where i modified the project to make it modular. My final project board has way too many switches as well as the LEDs attached to each of the switches. It would bequite impractical to fit it all into a single PCB with the amount of of connections it would require. I also had this idea of the board being expandable to increases the difficulty factor of the game too. This led me to think of ways that i could make the board modular and have the number of keys be added or decreased according to the user. I learned how I2C connections can be used to communicate between multiple nodes.

From Molding and Casting Week

I worked figuring out how to make the keycaps for the switches for my project. I wanted to make the keycaps to retain the feel of the tiles from the computer game but also add some small details to bring it into the present era and add something of my own. At the end of the week i could produce quite nice keycaps that i would modify later while making the final project..

System Integration week

This was the week where i could fully map out my entire project and figure out how the integration can be packaged nicely. The biggest challenge came while trying to integrate all the components with in the dimensional constraints. The body of the macropad could not be made bigger to accommodate the components. So I had to figure out ways in which the electronics can be placed within the body which is explained in the documentation of the integration week.

THE DESIGN

MogA is a modular gaming macropad device that can be used to play multiple games depending on the modules attached. It would run games like Minesweeper, Snake, and Tic Tac Toe depending on the modules connected. The keys act as visual lighting feedback to play the games. The main inspiration of this project came from the game Minesweeper. I wanted to make a physical version of the game. The Idea is that macropads can be rearranged with various modules and compose different layouts using a magnetic connector system to play different games. The concept of making it into a physical gaming device stemmed from wanting to make a game console such as the Nintendo Gameboy and switch, to bring back that era of handheld gaming .
Taking inspiration from keyboard macropads that are often used to automate repetitive actions, enhance gaming workflows, or streamline media control, I wanted to customize it into a solitary gaming device. I haven't found anything specifically made for a game , rather the macropads acted as mini keyboards for controlling something on the computer. The project has 2 main components:


Each of these modules have their own set of processes followed.
SPIRAL 1 To make the master module and one node module and make them communicate.

Sources referred

I had to do some research as this was not a completely preexisting product. I had go around and piece together parts of different resources. For making the the keypad module the most helpful and the source i pulled from the most to understand how to make the project modular was "Salim Benbouziyane Ocreeb MK2". In this Video I learned how to make DIY pogo connnectors. Saheen helped me to modify it to fit into our context of the project. Other sources were gathered throughout my fabacademy journey throughout the weeks. For making custom keycaps i referred to How to Cast Artisan Keycaps with Silicone and Resin by Artisan Alliance. It was a thorough and informative video and explains the process very well.

THE NODE MODULE

The node module serves as a game input interface, featuring mechanical switches, LED lighting, and its own microcontroller

CAD modelling

I did the CAD modelling of the node and the master modules in Fusion360. The whole process had to go through a lot of iterations as the 3d models and the electronics were interconnected with each other. The biggest challenge came while trying to integrate all the components with in the dimensional constraints. I started off by designing the node module . I wanted to keep the dimension of the node to be that of a module that can be held in your hand. At the same time the buttons had to be the highlight and i didn't want to give the module the look of a typical macropad. As the function of my keypad is to play games i wanted to emulate that feeling to the module by keeping the keycaps a little larger in size than the typical keycaps. I had to make a lot of iterations to arrive at this final design. i went back and forth with the electronics design to make sure everything fit with each other.
The parts of this module consists of :


Node Module Render

Electronics Design and production

I started the electronics production of the project with the node module. The board has:

  • Instead of soldering on separate LEDs, my instructors advised me to use a Led strip which will cut a lot of work as i have to make 4 modules. i decided to keep 4 LEDs under one button so that i can make various light animations in a single button for different games.
  • I made the design on KiCAD by importing graphics that I exported from fusion i have documented how i did this process in my Output Week page. I did the schematic and the layouts routing for this PCB. Routing this PCB took some time as there were constraints in regards to the switch placement.
  • I had some doubts regarding the placement of the neo pixel pads as they had to be wrapped around the pcb and the solder part should sit perfectly on the pads. Since the the pcb I am making is quite large , i did not want to waste an entire copperplate incase something goes wrong. So i thought of making a mockup of the PCB on cardboard see if everything aligns well. This helped me visualize everything better.
  • The PCB was the milled out and then components were sourced and soldered. I used the pick and place machine to place and solder the first PCB i made , which was documented in my Wildcard Week.
  • But as the project developed i had to change some components of the PCB and so i had to make it again. But this time around, due to time constraints i wasn't able to use the pick and place again, but when time allows in the future i will train it again to make the rest of the modules.
  • For the time being i soldered the parts on to the board and added the LED strips to the backside of the board and aligned it with the switches. I have documented this process already in my project development page.
  • The board was then programmed and tested using example codes first.
  • Then i made the code to make the corresponding 4 LEDs light up when a switch is pressed along with the help of our instructor Jogin.
  • 
    //Code by Namita made for MogApad
    //Code for turning on the corresponding addressable LEDs according to the switch that is beign pressed
    
    #include <Keypad.h>
    #include <SoftwareSerial.h>
    #include <Adafruit_NeoPixel.h>
    #ifdef __AVR__
    #include <avr/power.h>  // Required for 16 MHz Adafruit Trinket
    #endif
    
    #define LED_PIN 10  //Led Pin
    
    // How many NeoPixels are attached?
    #define LED_COUNT 36
    
    Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
    
    int getLED[9][4] = {  // Matrix of number of switches x the corresponding 4 Leds
    
      { 0, 1, 11, 10 },  // Led addresses of Switch 1
      { 2, 3, 9, 8 },    // Led addresses of Switch 2 and so on
      { 4, 5, 7, 6 },
      { 12, 13, 23, 22 },
      { 14, 15, 21, 20 },
      { 16, 17, 19, 18 },
      { 24, 25, 35, 34 },
      { 26, 27, 33, 32 },
      { 28, 29, 31, 30 }
    
    
    };
    
    bool ledStatus[36];  //Array of the Leds
    
    SoftwareSerial mySerial(PIN_PA2, PIN_PA1);  // RX, TX
    
    const byte ROWS = 3;  //three rows
    const byte COLS = 3;  //three columns
    
    //Assigning a number to each of the switches of the matrix keypad
    char hexaKeys[ROWS][COLS] = {
      { '2', '5', '8' },
      { '1', '4', '7' },
      { '0', '3', '6' }
    
    
    };
    
    byte rowPins[ROWS] = { 2, 4, 5 };  //connect to the row pinouts of the keypad
    byte colPins[COLS] = { 0, 3, 1 };  //connect to the column pinouts of the keypad
    
    //initialize an instance of class NewKeypad
    Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
    
    void setup() {
      mySerial.begin(4800);
    
      // LED
      strip.begin();            // INITIALIZE NeoPixel strip object (REQUIRED)
      strip.show();             // Turn OFF all pixels ASAP
      strip.setBrightness(50);  // Set BRIGHTNESS to about 1/5 max = 255
      strip.clear();
    }
    
    void loop() {
      // mySerial.println("Hello");
      // delay(500);
      int key = getkey();
      showkey(key, strip.Color(127, 0, 0));
      //  theaterChase(strip.Color(127, 127, 127), 50);
    }
    int getkey() { //To show which key is beign pressed on the serial monitor
      char customKey = customKeypad.getKey();
    
      if (customKey) {
        mySerial.println(customKey);
        return (((String)customKey).toInt());
      }
      return (-1);
    }
    
    
    void showkey(int key, uint32_t color) {  // To light up the Leds
      for (int i = 0; i < 4; i++) {
        strip.setPixelColor(getLED[key][i], color);
      }
      strip.show();
    }
    
    

    Making the Pogo Connectors

    As said before the idea to DIY the pogo connectors came from "Salim Benbouziyane ‘s". video.