Back to Home

Kidsulator

How could we teach kis simple math operations with a fun and interactive way?

 

Well, based on our projects in the company, mostly we are focusing to change the education from formal to informal learning. So, I was thinking if I could contribute company goals and create a game-based education. FAB Academy gives this chance to come up with this project to how we could teach kids simple math operations in a fun and interactive way. That could interact with kids to start learning the four simple operations of math (addition, subtraction, multiplication, and division). This project targeting elementary schools for the first three levels.

 

Kidsulator content three main things which are (2D, 3D, and Electronics). Top par was design using Onshape software also the bottom because Onshape it gives you a multi-function and friendly interface user. I design the microcontroller board using Eagle software to meet my requirements. I use sets of components such as LCD, push buttons, potentiometers, LED, and buzzer. Kidsulator was programming to choose two different programs either simple way to learn math or the program will choose difference results and ask you to complete the equation.

In the brainstorming, the project will contain the following as general:

  • Circuit implementation
  • Arduino
  • 3D Printes design
  • 2D Design and laser cutting parts

 

I did an initial illustration of my project that contains drawings describing the main objectives of having this project.as showing bellow.

 

 

Import image

 

As for the electronics part of the project, it will be simple and easy to do and use at the same time. It's all about creating a system to make the calculations (adding, subtracting, multipling, and dividing) the numbers that include two digits each (4 bits each). the result could be 4 digits maximum. The idea is to make an interactive educational system instead of having somting fixed and with no interaction as usual tools.

 

I have done an initial modeling using Onshape to start imagination the project parts and how it works!

 

Import image

 

 

 

Poster

Import image

 

 

Bill of Materials

 

Material

Quantity

Cost USD

Note

Where you can get it

Filament PETG

300 g

12

 

ColorFabb

Acrylic

3 sheets

10

50 cm x 30 cm

Local

Screws

30 pieces

1

3mm

amazon

LCD 16x2

1

5

 

Digi-Key Electronics

Push Buttons

3

1

 

Digi-Key Electronics

Potentiometer

1

3

 

Digi-Key Electronics

PCB Coper Board

4

6

15mm x 15mm

Digi-Key Electronics

Header Pins

30

5

 

Digi-Key Electronics

SMD Capacitors

2

0.16

 

Digi-Key Electronics

SMD Resistors

4

0.4

 

Digi-Key Electronics

USB Cable

1

5

 

amazon

 

Total cost of materials is 48.56 $ USD

 

Design and Fabrication

 

It relied on in the design Onshape program that was used in many of the previous assignments:

 

2D Design

 

The following image is the sketch of bottom case cut by laser cutter

 

Import image

 

The dimensions of the top cover case which takes a hole that is going to hold top 3D print later on where the main part of the project will be install

 

Import image

 

Bottome case dimensions of the case that cutting by laser cutter

 

Import image

 

A render of the case how is going to look likes

Import image

A render of the case how is going to look likes

 

Import image

 

The acrylich case after assembled

 

_____________________________________________________________________________________________________

 

3D Design

 

 

Import image

Sketching the corner leg that needs to use to build a case (box) that was cut by laser cutter in the previous section

 

Import image

Measurements to build the top part of the project which include LCD, Push buttons and LED as well as Buzzer and the main part to add and read numbers

 

Import image

 

Import image

Onshape if you would like to check it out

To download all files goes down to the page you will find all the files need

 

A full render of the project

Import image

A view for final project

 

_____________________________________________________________________________________________________

 

PCB

 

For Electronic Design, I started by modifying the satcha board, but modifying it to have an LCD, 2 LEDs and buzzer for Output, and push buttons and digital inputs to read the numbers from my final project. The general schematic and board are shown below:

 

Import image

 

 

Import image

 

 

The following close-up shows the output elements

Import image

 

 

 The following close-up shows the input elements. Focused on pins , 11,  A2, A5, A4, A3, A1, 4, 3, 2, A0, 1, 0 and 1

Import image

 

 

And are connected to the ATMAEGA using its pins which I found in the datasheet.

Import image

 

 

After the design, I used the carvey machine  to cut the board.

Import image

 

 

and then soldered the components

Import image


 

and this was the final Result.

 

Import image

 

Import image

In this image is the explanation that how each number has a different the "numbers that include two digits each (4 bits each)" that the board read number as also the operations as I mentioned at the begning of documentation

 

_____________________________________________________________________________________________________

 

Testing and Programming

 

Now, to simulate the operation of my board, I used thinkercad, and simulated by numbers by using sliding switches.

Import image

 

 

After checking that the logic of my program was working, I then started to do the connections using my board and testing for everything to work. I program by board using another arduino, and then uploaded the code which I will explain next.

Import image

 

 

 

 I begin my code by defining the pins I’m going to use.

                    
                      

#define op1 11
#define op0 A2
#define x3 A5
#define x2 A4
#define x1 A3
#define x0 A1
#define y3 4
#define y2 3
#define y1 2
#define y0 A0
#define sw1 0
#define sw2 1

 

 

 

 

and then define which pins are going to be used for the LCD display.

                    
                      

// include the library code:
#include <LiquidCrystal.h>
const int rs = 5, en = 6, d4 = 7, d5 = 8, d6 = 9, d7 = 10;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// initialize the library with the numbers of the interface pins

 

 

Then, I Initialize my variables:

                    
                      

char operation_sym[4] = { '+', '-', '*', '/' };
int n1 =0;
int n2 =0;
int operation=0;
int ans, r_ans;

 

 

 

and in the Void Setup, I define the pin modes for the pins I’m going to use, and initialize my LCD .

                    
                      

void setup() {

  //Serial.begin(9600);
  pinMode(op1, INPUT_PULLUP);    //For operation
  pinMode(op0, INPUT_PULLUP);    //For operation
  pinMode(x3,  INPUT_PULLUP);    //For number 1
  pinMode(x2,  INPUT_PULLUP);    //For number 1
  pinMode(x1,  INPUT_PULLUP);    //For number 1
  pinMode(x0,  INPUT_PULLUP);    //For number 1
  pinMode(y3,  INPUT_PULLUP);    //For number 2
  pinMode(y2,  INPUT_PULLUP);    //For number 2
  pinMode(y1,  INPUT_PULLUP);    //For number 2
  pinMode(y0,  INPUT_PULLUP);    //For number 2
  pinMode(sw1, INPUT);    
  pinMode(sw2, INPUT);
  pinMode(12, OUTPUT); //For number 2   
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  //randomSeed(analogRead(0));
}

 

 

Then, in the Void Loop, I start by a welcome message and wait from an input of the sw1 or sw2

                    
                      

  lcd.clear();  lcd.clear();
  lcd.print("Welcome");
lcd.setCursor(0, 1);
lcd.print("Press the key");
while ( digitalRead(sw1)==0 && digitalRead(sw2)==0 ); // Wait for a key

 

 

If the pushbutton 1 is pressed, it means its calculator mode, so I need to check the inputs x3,x2,x1, and x0 to determine which number is placed in the first slot, and using the y2,y3,y1 and y0, I identify which number was placed in slot 2. I also check for the operation, which will be a digital input op1 and op2, and depending on the operation selected, I call the method to calculate to find the answer and print it in the screen.

                    
                      

//CALCULATE THE OPERATION DEPENDING ON THE INPUT 0 AND 1. 00=/ 01=* 10=- and 11=+
 operation =  !(digitalRead(op1))<<1 ;
  operation += !(digitalRead(op0))<<0 ;  //CALCULATE NUMBER 1 DEPENDING ON inputs 6,7,8,9  
  n1=  !(digitalRead(x3))<<3 ;
  n1+= !(digitalRead(x2))<<2 ;
  n1+= !(digitalRead(x1))<<1 ;
  n1+= !(digitalRead(x0))<<0 ;
  if(n1==10)
    n1=0;
     n2=  !(digitalRead(y3))<<3 ;
  n2+= !(digitalRead(y2))<<2 ;
  n2+= !(digitalRead(y1))<<1 ;
  n2+= !(digitalRead(y0))<<0 ;
  if(n2==10)
    n2=0;
     lcd.setCursor(0, 1);\
  lcd.print(n1);
  if (operation == 0){ lcd.print("+");} else
  if (operation == 1){ lcd.print("-");} else
  if (operation == 2){ lcd.print("*");} else
  if (operation == 3){ lcd.print("/");}
  lcd.print(n2);   
  lcd.print("=");  
  ans = calculate(n1,n2,operation);
  lcd.print(ans);
  delay(400);
  }

 

 

Method Calculate just returns the answer of the operation, which could be add, subtract, multiply or divide, depending on the inputs for operation,

                    
                      

//CALCULATE THE OPERATION DEPENDING ON THE INPUT 0 AND 1. 00=/ 01=* 10=- and 11=+
int calculate ( int x, int y, int operate)
{
    if (operate == 0){
      return x+y ;
    }
    else if (operate == 1){
      return x-y ;
    }
    else if (operate == 2){
      return x*y ;
    }
    else if (operate == 3){
      return x/y ;
    }
}

 

 

If the push button 2 is pressed, I call task 2,

                    
                      

else if ( digitalRead(sw2)==1 )
  {
    task2();
    lcd.setCursor(4, 0);
    lcd.print("Good Job    ");
    digitalWrite(12,HIGH);
    delay(1500);
    digitalWrite(12, LOW);
  }
}

 

 

In task 2, I will display a random operation in the screen, and the student needs to select the correct answer and place it in the slot. For this, I generate a random operation, from 0to4, and 2 random numbers from 0 to 9. Internally, I calculate the answer, and then wait for the student to place the tile of the answer he thinks is true. I wait until the correct answer is placed in order to exit the while, and the turn on the LEDs and buzzer, meaning they got the right answer.

                    
                      

  void task2()
  {
  lcd.clear();
  lcd.print("Solve Me");
  operation = random(3);
  n1 = random(9);
  n2 = random(9);
  r_ans = calculate(n1,n2,operation);
  lcd.setCursor(3, 1);
  lcd.print("=");
  lcd.print(r_ans);
  while ( true )
  {
    read_();
    if(n1!=0) // check if there is a number
    {
      if(n1==10)
        n1=0;
      lcd.setCursor(0, 1);
      lcd.print(n1);
    }
    if(n2!=0)
    {
      if(n2==10)
        n2=0;      lcd.setCursor(2, 1);
      lcd.print(n2);   
  }
    lcd.setCursor(1, 1);
    lcd.print(operation_sym[operation]);   
    ans = calculate(n1,n2,operation);
    if (ans == r_ans)
    {
      return;
    }
  }
}

 

Back to Top

 

The video passes the process that the final project took to get real

 

 

 

Since I was thinking on the final project, my goal has been to be an open source project that the company can use in its projects within the digital fabrication education programs. Through our work in the field of education, especially with hight scool level, it will be appropriate to present the project to present in thelessons that students can learn in various fields related to digital fabrication. I also hope this project is an assistant and a good start for many people so they can develop their skills and develop the project for anyone who has been.

I will work on developing the project in order to have a variety of mathematics programs. As I mentioned that the final project is an open source will be internationally licensed without any commercial profit through a creative commons website, specifically is "attribution-noncommercial-shareAlike 4.0 international public license".

 

 

Back to Top

 

To open or download file

3D STEP files: Click Here!

3D STL files: Click Here!

2D DXF files: Click Here!

Programing File: Click Here!

PCB Eagle: Click Here!