Blue Home - Explore the Solar System - SCOPES Digital Fabrication

You need to login or register to bookmark/favorite this content.

Author

Noor Mohamed
Noor Mohamed
Other
Physics graduate, educational content creator and STEM educator.  Read More

Summary

Learning about the solar system is always fun, but it can be even more fun if it was through a game!

 

This lesson provides the knowledge about the Solar System Planets by going through a story, where the students [players] are the main characters.

 

The story starts when an astronauts [the players] got lost in space, and they are trying to go back to their Blue Home, our planet Earth. And on their way back, they are faced with obstacles and some quizzes.

 

 

The lesson could be played depending on the number and ages of students, it is adaptable to all age groups and any number of students.

 

This link below shows a demo of the game:

https://youtu.be/aG_BVlQYVV8

 

 

What You'll Need

Preparing for this lesson will require the instructor to have an Arduino to code, printed cards [design attached], and jigsaw pieces [cut with a laser cutter]. To prepare these things here are the materials needed:

 

Bill of materials:

  • Different colors 15mm Cardboard [6 pieces]
  • RGB LED [1 piece]
  • Arduino Nano 33 BLE Sense [1 piece]
  • Addressable RGB LED Strips each with 3 LEDs [2 pieces]
  • Vibrating Mini [1 piece]
  • 3D printed Astronaut Piece [1 piece]
  • Printed Cards [30 cards]
  • Dice [1 piece]
  • Diffusive Paper [1 piece]

 

Preparation:

 

  • Print the game cards. ** design attached in lesson attachments.

 

 

  • Cut the jigsaw puzzle design using a laser cutter, with different colors of cardboard [10 – 15 pieces of each color] ** design attached in lesson attachments.

 

 

  • 3D print the astronaut piece, if a 3D printer is not available, then you can DIY and piece that looks similar to the design. ** design attached in lesson attachments.

 

 

  • Connect the electronic pieces as seen in the picture below [LED stripes, RG LED, Vibrating mini and the Arduino nano].

 

  • Code the Arduino with the available code:
// SENSOR LIBRARY
#include <Arduino_APDS9960.h>

//ADDRESSABLE RGB LED LIBRARY 
#include <Adafruit_NeoPixel.h>

#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
// Which pin on the Arduino is connected to the NeoPixels?
#define PIN        6 // LED PIN 
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 6 // Popular NeoPixel ring size
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels

void setup() {
  
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.

  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)

  Serial.begin(9600);
  while (!Serial);

  if (!APDS.begin()) {
    Serial.println("Error initializing APDS-9960 sensor.");
  }

  
     pinMode(6, OUTPUT); //LED LIGHT (BASE)
     pinMode(9, OUTPUT); // RED
     pinMode(10, OUTPUT); //BLUE
     pinMode(11, OUTPUT); //GREEN
     pinMode(5, OUTPUT); //PUZZER

  
}

void loop() {


  int r, g, b, a;
  double rh, bh, gh, cmax, cmin, del, h, hf;

  // read the color
  APDS.readColor(r, g, b);

  // print the values
  Serial.print("r = ");
  Serial.println(r);
  Serial.print("g = ");
  Serial.println(g);
  Serial.print("b = ");
  Serial.println(b);
  Serial.println();

    // wait a bit before reading again
  delay(500);


  // LOWER LGB 
  pixels.clear(); // Set all pixel colors to 'off'

  // The first NeoPixel in a strand is #0, second is 1, all the way up
  // to the count of pixels minus one.
  //for(int i=0; i<NUMPIXELS; i++) { // For each pixel...

    // pixels.Color() takes RGB values, from 0,0,0 up to 255,255,255
 
    pixels.setPixelColor(0, pixels.Color(255, 255, 255));
    pixels.setPixelColor(2,  pixels.Color(255, 255, 255));
    pixels.setPixelColor(3,  pixels.Color(255, 255, 255));
    pixels.setPixelColor(5,  pixels.Color(255, 255, 255));

    pixels.show();   // Send the updated pixel colors to the hardware.

    //delay(DELAYVAL); // Pause before next pass through loop
  //}


// SENSOR 
 // check if a color reading is available
  while (! APDS.colorAvailable()) {
    delay(1);
  }


  //find new r,g,b,c,del
  //rh=r/255;
 // gh=g/255;
  //bh=b/255;
  cmax= max(r,g);
  cmax= max(cmax,b);
  
  cmin=min(r,g);
  cmin= min(cmin,b); 
  
  del= (cmax-cmin);

   // find HUE

 if (r>g & r>b) 
  {h=60*((g-b)/del);} 
  
  if (g>r & g>b) 
  {h= 60*((b-r)/del+2);} 
  
  if (b>r & b>g) 
  {h=60*((r-g)/del+4);}
  
if (h<0)
{h=h+360;}

  Serial.println();
  Serial.println(h);
  Serial.println();

//GAME SETTINGS 
// depending on the value of h, the output led will change colors or the puzzer will turn on
// REFRENCE FOR HUE VALUES FOR THE PIECES OF BLUE HOME GAME: 

while ( abs(h-hf) > 5.0)
{
// PINK
if (h>220 & h <360)
{
  a= random(1,3); 
  }

  //BLUE
if (h<220 & h >210)
{
    a= random(3,4); 
  }

//BLACK
if (h>180 & h <210)
{
  a=random(4,6); 
  }

//GREEN
if (h<180 & h >140)
 {
  a =random(1,3); 
  }

  //OFFWHITE
if (h<140 & h >40)
{
  a= random(4,8);
  }

 //YELLOW
if (h<40 & h >0)
{
  a =random(3,5);
  }

//////////////////

  if (a==1) 
{
 digitalWrite(5, LOW ); // Turn the VIBRATING on
 digitalWrite(9, LOW ); // RED
 digitalWrite(10, LOW ); // BLUE
 digitalWrite(11, HIGH ); //GREEN
} 

if (a==2) 

{ digitalWrite(5, LOW ); // Turn the VIBRATING on
 digitalWrite(9, HIGH ); // RED
 digitalWrite(10, LOW ); // BLUE
 digitalWrite(11, LOW ); //GREEN
}

if ( a==3) 
{
 digitalWrite(5, LOW ); // Turn the VIBRATING on
 digitalWrite(9, HIGH ); // RED
 digitalWrite(10, LOW ); // BLUE
 digitalWrite(11, LOW ); //GREEN
 }


if (a==4)
{
 digitalWrite(5, HIGH ); // Turn the VIBRATING on
 digitalWrite(9, LOW ); // RED
 digitalWrite(10, LOW ); // BLUE
 digitalWrite(11, LOW ); //GREEN
 }


if (a==5)
{
 digitalWrite(5, LOW ); // Turn the VIBRATING on
 digitalWrite(9, HIGH ); // RED
 digitalWrite(10, HIGH ); // BLUE
 digitalWrite(11, LOW ); //GREEN
 }


if (a==6)
{
 digitalWrite(5, HIGH ); // Turn the VIBRATING on
 digitalWrite(9, LOW ); // RED
 digitalWrite(10, HIGH ); // BLUE
 digitalWrite(11, HIGH ); //GREEN
 }


if (a==7)
{
 digitalWrite(5, LOW ); // Turn the VIBRATING on
 digitalWrite(9, LOW ); // RED
 digitalWrite(10, HIGH ); // BLUE
 digitalWrite(11, LOW ); //GREEN
 }

 hf = h;
}


  Serial.print("hf = ");
  Serial.println(hf);
  Serial.println();
  
}

 

  • Insert the electronic inside the 3D printed piece [or any piece you are playing with]:

LED stripes in the bottom of the piece.