Adorable ASCII Aquarium Lives On Your Desk

[Kert Gartner]’s ASCII Aquarium turns a cheap yellow display (CYD) into a tiny simulated aquarium, complete with ASCII sea creatures each with their own behaviors. There’s all kinds of options and even timekeeping functionality, so the miniature water world can also pull its weight as a desk clock.

The fish and other animal movements are not a series of canned animations; each creature has its own behaviors and responses to things like feeding, which is accomplished by tapping on the screen. A hidden menu offers a wide range of configuration and display options, and there’s even an option to export screen contents as bitmaps.

Add a 3D-printed enclosure and the whole thing looks like a pretty nice weekend project. There’s even a display flip mode, just in case you have a spare 50 mm beamsplitter kicking around.

It’s a very clever use of a CYD that shows how good color and graphics can look when one designs with the hardware’s capabilities (and limitations) in mind.

The CYD is an ESP32-based development board with integrated touchscreen display, and is known for its affordable price and wide availability. This one would look great next to a CYD electric jellyfish.

26 thoughts on “Adorable ASCII Aquarium Lives On Your Desk

      1. Geezus I just wrote paragraphs as to why that is a bad idea, and I think it was filtered out. Can I just say creativity is too subjective? If even my objections are filtered out…

      1. I know what you mean, but although it’s graphical and not everything is ASCII, I think it still definitely counts as an ASCII aquarium.

        After all, a shark tank can have plants, gravel, and even other fish and still be a shark tank because it’s full of sharks.

        And the fish and other animals in this tank are indeed rendered from glyphs using the ASCII encoding. You can see them in the source code as their genuine ascii selves.

  1. That is honestly adorable. I’m thinking of how you could, reasonably subtly, use system performance values to adjust the behavior of the ecology onscreen.

    1. I’m an aquarium nerd before a tech nerd, but this comment tickled me as I use a product called Matrix in most of my tanks. It’s excellent at housing your filter’s beneficial bacteria which is the basis of which you keep fish alive (nitrogen cycle).

  2. Thousand thanks to [Kert Gartner] for this great project!

    I’ve had lots of fun bulding it yesterday and adpoting the code to my H/W. I also learned some new things… The kids love it too!

    Now I’m watching the fish, which is very relaxing…

    About the character-grid alignment: I think it’s neccecary to keep the fish-motion ‘naturally’ even if real fish do not move like this at all…

    Great project, thanks for sharing!

  3. It makes hack a day. Sound really daft calling this ASCII when it obviously isn’t. ASCII is a character encoding, not a vibe.If you’re not literally sending ASCII codepoints to a terminal or display buffer, you’re not doing ASCII.You’re doing graphics that look like ASCII.That’s cosplay, not the real thing.Why don’t they call it something appropriate like, off the top of my head-
    “bitmap‑font aquarium”
    “monospace‑glyph aquarium”
    “text‑styled graphical aquarium”

    1. Read the code. You are incorrect.

      void drawSeahorse(TFT_eSprite& s) {
      if (!seahorse.active) return;
      static const char* seahorseLeftRows[] = {
      ” ^^ “,
      ” / o) “,
      “[__-/ “,
      ” /| “,
      ” / | “,
      ” \ | “,
      ” ( ) “,
      ” \_/ “,
      };

  4. Neat-looking project but won’t work on my V3 CYD (apparently it has an ST7789 display, not the ILI9341) and the display is interleaved weirdly. Oh well, off to download the project and modify it locally.

    1. For anyone who’s never done this before: Download the .ino from Github, copy the user setup template to a new file and make the appropriate changes (in my case, replace the ili9341 driver include with that of the st7789, and set various parameters), comment out the include of user_setup.h in user_setup_select.h, and then include your new custom setup file.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.