Busy Board for Toddlers : Rocket Launch

Busy Board for Toddlers : Rocket Launch

A digital busy-board for young children.
Launch and control a rocketship with zero fine motor skills!

Hi Everyone.

Because it sounds like fun (and also to help keep me motivated), I’m going to blog my project here. If you’d like to contribute or build along, I’d love the company :smiling_face_with_three_hearts:.

Links

Parts

| SKU       | Description                                                      | Qty |
|-----------|------------------------------------------------------------------|-----|
| A000062   | Arduino Due                                                      | 1   |
| ADA3487   | Arcade Button with LED - 30mm Translucent Green                  | 1   |
| ADA3490   | Arcade Button with LED - 30mm Translucent Blue                   | 1   |
| ADA473    | Arcade Button - 30mm Translucent Red                             | 1   |
| ADA4974   | Cherry MX Mechanical 4-Key Tester: Blue Black Red Brown Switches | 1   |
| ADA512    | Analog 2-axis Thumb Joystick with Select Button + Breakout Board | 1   |
| ADA5530   | Anodized Aluminum Machined Knob - Red - 20mm Diameter            | 1   |
| CE07501   | GlowBit™ Rainbow                                                 | 2   |
| CE08033   | GlowBit™ Matrix - 8x8                                            | 4   |
| CE08035   | GlowBit™ Stick - 1x8                                             | 1   |
| CE09101   | Potentiometer Knob - Blue                                        | 1   |
| CE09105   | Rotary Potentiometer Knob - Green                                | 1   |
| CE09446   | 7 Segment Display (2-Wire, 0.5")                                 | 1   |
| CE09447   | 4x3 Button matrix keypad                                         | 1   |
| COM-09939 | Rotary Potentiometer - 10k Ohm, Linear                           | 3   |
| COM-11310 | Toggle Switch and Cover - Illuminated (Red)                      | 1   |

Sketch

3 Likes

Hi PixMusix,

Sounds like a great idea! That LED matrix makes me think of Tim’s efforts to diffuse and contain each LED in a matrix, could be worth a look for inspiration:

1 Like

Hi James

I did have a read of Tim’s LED Project when I was looking into glowbits. Tim’s attention to user interface, accessibility, and low barrier to entry is excellent. Making anything code-less is hard, particularly rendering.

Tim was in JavaScript so I’ll need to make my own rendering engine in C++.
Does anyone know of a good Math Matrix/Vector library for Arduino?
I just need a simple way to add, subtract, limit, and multiply two vectors so I can get some simple euclidean animations going.

1 Like

Is there any video tutorial of this busy board?

1 Like

Hey @Rooppoor212784.

This is still in production and open source.
I’ll be blog as I go here, and will make a full tutorial when the finished project has been completed and debugged.
I expect to be completed in 6-12 weeks.

2 Likes

So that was a cute thing for me to say wasn’t it? Totally adorable Jonny! :man_facepalming:

Progress…

361525913_9951582258215798_8491388430617697931_n-Animated Image (Small)

I have made some progress.

  • I’ve learned how to solder. (thanks @James)
  • I’ve tested all my components. (thanks @Trent5487676)
  • I have working c++ classes for each of my components.

353464178_6688605224505604_3600335484508449397_n-Animated Image (Small)

Joysticks are just pots with extra steps?

The hardest component to code up turned out to be the joystick.
It did eventually click for me when I read that it really was just two perpendicular pots. I ended up coding it that way and it worked.

class Slider {
// ...
}

template<byte pinX, byte pinY> class Joystick {
  private:
    Slider axisX;
    Slider axisY;

  public:
    Joystick() : axisX(pinX), axisY(pinY) {}
// ...

I’ve also had quite some trouble with those fancy 3x4 Keypads. Admittedly I destroyed the first one while learning to solder so I’m taking the L on there. I’m still playing around with this library which I found on this article. It all seems legit, but I haven’t quite figured it out. I’ll come back to it later in the project after I’ve brought my moral back to acceptable.

Next Week

Next week I’m going to work on testing my code for multiple glowbit 8x8 matrix.
I’m planning on 4 8x8glowbits tiled in a square and I’ve written this fancy struct for handling the pixel logic. I’ve got the 4th and last glowbit coming probs next week and looking forward to debugging and testing images and animations at last.

struct Led64 {
  CRGB matrix[64] = {};
};

struct Led256 {
  CRGB matrix[256] = {};
};

struct QuadMatrix {
  LedStrip<DISPLAYPIN_NW, LEDMATRIX_COUNT> NW;
  LedStrip<DISPLAYPIN_NE, LEDMATRIX_COUNT> NE;
  LedStrip<DISPLAYPIN_SW, LEDMATRIX_COUNT> SW;
  LedStrip<DISPLAYPIN_SE, LEDMATRIX_COUNT> SE;

  void drawTo(Led256 px) {
    /* This func splits the 256 element array into 4 64 element arrays.
    It devides the 16x16 square into 4 quadrents of 8x8: NW,NE,SW,SE Quadrants. 
    p and q allows us to clarify which array we need to push to.
    The link below demonstrates the equation that converts the idecies correctly. https://www.desmos.com/calculator/4a8hztwpvy */
    int xdim = LEDDISPLAY_XDIM;
    int ydim = LEDDISPLAY_YDIM;
    Led64 subMatrix[4] = {};
    for (int j = 0; j < ydim; j++) {
      for (int i = 0; i < xdim; i++) {
        int idx = i + (j * ydim);
        int subidx = (int)floor((((idx - 8) % 16) + idx) / 2) % 64;
        int p = floor(i / 8);
        int q = (floor(j / 8) + 1) * 2;
        subMatrix[q + p - 2].matrix[subidx] = px.matrix[idx];
      }
    }
    NW.drawTo(subMatrix[0].matrix);
    NE.drawTo(subMatrix[1].matrix);
    SW.drawTo(subMatrix[2].matrix);
    SE.drawTo(subMatrix[3].matrix);
  }
}; 

(This is maybe the part where a CE staff member politely informs me that they have already written a c++ glowbit library that handles this way better. I’m prepared to hear it; the truth will set me free).

Wish me luck!

2 Likes

Sorry we skimmed over your already-bolded question! I think I remember spending a while recalling a C++ maths library one of my maths lecturers mentioned, never got to it :frowning:

Since you’re writing it in C++ on a fast Arduino, you’re already going to be quite fast, the only thing I’d recommend giving a look is the ARM CMSIS libraries, they are optimised for the Cortex chip in your Due, and have quite a few signal processing functions available:
https://arm-software.github.io/CMSIS_5/DSP/html/index.html#intro

Since Glowbits are based on the common WS2812Bv5 LEDs, most of the regular suspects for the Arduino (FastLED etc), work just fine, and we mainly wanted to support the beginner-friendly nature of microPython. For an interesting dive, we’ve published videos on the challenges of getting speed out of microPython: https://youtu.be/zC-vDwFpGXU

3 Likes

Thanks @James

I ended up porting Ben Fry, and Casey Reas’ excellent PVector class from Java to C++. This ended up being a good c++ learning exercise for me anyway.

FastLED is working very well for me. I was just asking incase I was about to re-invent the wheel. :slight_smile:

2 Likes