New Fish

Long overdue update – the tank is going well, but there are a number of obstacles I’m currently trying to navigate.

The good news, finally purchased a pair of Apistogramma Caucatoides Double Reds. They are beautiful fish and I’m loving them so far.

The problems, in no particular order:

  • Covid-19 has really thrown a wrench into the tank – among other things.
  • I recently installed a Raspberry Pi running Node-Red and a Mosquitto MQTT broker. This acts as the main hub now. All of my esp8266 and esp32 boards communicate with Node-Red on the Pi. Fantastic system.
    • The problem is that there is something fishy going on – I am not sure if the Pi is overheating or if something is causing esp32 that run the lighting system to falter, but the automations stop after a day or so. Ordinarily, I would be home to trouble shoot, but with the pandemic still flared high, I am staying with my partner at her house and can’t be home to problem solve.
    • I am fairly certain the problem has something to do with the Micropython code I wrote. I’ve been learning more about try & except statements and it seems like this could be the culprit. Essentially, something in the program periodically throws an error which stalls the program.

  • A follow up problem to this issue with Node-Red umqtt automations is that it will fail with, obviously, the lights on or the lights off. So either the tank experiences 48 hours of blasting light or 48 hours of darkness. I’ve been stopping by my house every two days to check in (safely).
  • This, in turn, has kicked off some serious algae growth. Nothing too crazy yet, but without vigilant monitoring, I’m having trouble both understanding what is happening as well as well as fixing it.
  • As stated in previous posts, my naturally hard water is probably not making it any easier. I have added Indian Almond leaves, but I think CO2 is necessary. I purchased one of those cheap DIY baking soda/citric acid reactors, but it is not working very well. Depending on how the future shakes out with everything, I am seriously debating purchasing a proper regulator and pressurized co2 cylinder.
  • Also, due to Covid-19, I haven’t made it out to any pet stores recently to restock on food. The new cichlid don’t love the cheap flake food the guppies eat and I just ran out of frozen blood worms. I’ve been digging up earth worms for the Apistos, but I am not sure if they are big enough yet to go after earth worms.
  • I’ll be receiving a package of frozen food today, along with a few new aquatic plants (because why not) and some brine shrimp eggs. I’m going to try raising some baby brine shrimp and see how they do in terms of food for the Cichlids.

On another note, my lights are up and working. As of now, they are triggered by a MQTT message from Node-Red on the Pi. Its okay… but not cool enough, so I’ve order a pcb with 5 Meanwell LDD 700 PWM drivers. I’ll be using this to control the lights eventually. The advantage to this is that you can control the duty cycle on the LEDs with the drivers and thus the dimming/brightness of each LED string. So essentially, colour mixing with Red, Blue, Cool White and Warm White. I have to figure out what to do with the 5th driver.

I’ve written a code that can be triggered by MQTT and run transition fades from one duty cycle value to another. You would have to call these functions within the section listening for messages from the MQTT broker.

from machine import Pin, PWM import utime # This is still in BETA testing.  # The below light() function transtions between start value and stop values by increments as stated in the increase_X = variable.  # Still need to develop all of the various transitions and write the MQTT stuff.  r = PWM(Pin(16)) b = PWM(Pin(17)) ww = PWM(Pin(18))  cw = PWM(Pin(19)) def dark_sunrise():     red = 0     blue = 0     cool = 0     warm = 0     increase_r = 1     increase_b = 2     increase_cw = 3     increase_ww = 4          while True:         utime.sleep_ms(30)         while r.duty(red) != (1000):             if red > 300:                 print(str(r.duty()) + ' r.duty') # print() statements are for testing                 print(str(red) + ' red lights')                 break             else:                 print(str(r.duty()) + ' r.duty')                  print(str(red) + ' red lights')                  red += increase_r             break         while b.duty(blue) != (1000):             if blue > 300:                 print(str(b.duty()) + ' b.duty')                 print(str(blue) + ' blue lights')             else:                     print(str(b.duty()) + ' b.duty')                 print(str(blue) + ' blue lights')                 blue += increase_b             break         while cw.duty(cool) != (1000):             if cool > 300:                 print(str(cw.duty()) + ' cw.duty') # print() statements are for testing                 print(str(cool) + ' Cool White')                 break             else:                 print(str(cw.duty()) + ' cw.duty')                  print(str(cool) + ' Cool White')                  cool += increase_cw             break         while ww.duty(warm) != (1000):             if warm > 600:                 print(str(ww.duty()) + ' ww.duty') # print() statements are for testing                 print(str(warm) + ' Warm White')                 break             else:                 print(str(ww.duty()) + ' ww.duty')                  print(str(warm) + ' Warm White')                  warm += increase_ww             break         if red > 300 and blue > 300 and cool > 300 and warm > 600:             break

A short synopsis of a round about plan / chasing waterfalls.

Just to catch up:
Been kind of absent lately. I had a little trouble with my server – I think they’re kind of skeezy and running a racket, anyway – I had to jump through all these hoops to appease them and I didn’t want to do too much here as the possibility of having to start from scratch if I couldn’t figure out my server issues was a real scenario. Then all the holiday stuff and short art school retreat/vacation etc – anyway, we’re back.

What I want to do in this post is just outline a couple aspects of this project and where they stand in terms of progress, change of direction, new ideas etc. Like a kind of a train-of-thought working list.

  1. Operation DEAL BREAKER: Deal Breaker is the name of the arduino set-up and program files I wrote to monitor aspects of the Paludarium. My original plan was to build the entire thing and then add wifi connectivity to the project with the assumption that adding this functionality would be as easy as adding a new sensor or switch ( I didn’t think that it was that easy, but it was definitely humbling to realize that despite Arduino’s impressive modularity, this wasn’t really included – or at least the way I had thought about it).

    After trying for a while to add an ESP8266 chip to my MEGA2560, I eventually came to the point that it wasn’t possible the way I had thought.  After posting a few questions on Reddit, I purchased a Lolin32 ESP32 dev board for 16.50CAD from Amazon and decided that I would slowly start migrating the project over to this board. It has something along the lines of 36 GPIO pins, so not quite as expansive as the Mega, but because they can operate in a mesh network, I could theoretically split the project up and just have different aspects of it communicate.

    The other twist in this part of the project is that I’ve decided recently to begin the process of learning Python, and while doing so I am also going to practice Micro Python (a version of python designed specifically for use on Microcontrollers). So, while I am going to leave the main ‘brain’ of the tank controller intact as is (and in Arduino code), I am going to start trying to write new aspects of the project in Micropython and designed to be IoT capable.

  2. This leads me to the second big change. Lights!
    Hopefully in the next week I will be posting a build guide to making a high powered DIY LED lighting system. It will be made using 5 colours of 3W LEDs mounted on an aluminum frame and controlled by the ESP32 with Micropython. So far, I think the supplies have run me about $140 or so.
  3. Website: So I was really enjoying this blog. I know that I stopped writing for a little while, but as I explained above, I had some shit to do and a couple haters standing in my righteous path. Anyway – one thing I was experimenting with was replacing this blog with a ‘personal’ wiki instead.

    My thought was that I could use it much more thoroughly as a research and development repository as well as an archive. Things like data sheets for specific parts, coding examples and other resources could be catalogued for future use and what not. I also like the very low key and austere graphics of the wiki format. Its like the internet from 1997.

  4. DIY-ish Co2 is in.
    The only problem is that it doesn’t really work. I am doing something wrong, I know that much. It keeps working through the solutions much too fast – like the longest I’ve got it to work for is roughly 20 hours – and barely that.
    I don’t really understand the mechanics of the device yet, so its hard to tweak it as I can’t identify the variables at play. I’m kind of being lazy about it, but I’m hoping I can get it up and running shortly. If not, I’ll have to start looking at getting a something a little more conventional – like a paintball gun co2 setup.
  5. Motorized Valves.
    I am still very much pursuing this, but will be slow walking the entire thing. Like most things that I start, I stupidly have to teach myself a bunch of new stuff in order to do the project, so this has to be a lower priority for now. But, I have been actively trying to find cheap Stepper Motors on Bunz and Aliexpress. I’m also going to start figuring out how to use the 3D printing labs that the Toronto Public Library offer. Eventually, this project will be implemented, but it just doesn’t make sense to drop a bunch of work that contributes to the core functionality of the project to focus on this (admittedly super awesome) aspect of the automation.
  6. A good example of something that I don’t want to drop to pursue some super sexy motorized valves is the automated refill system. This wasn’t super high on my priorities list, but then I went away for a week and was absolutely wracked by fear of my water levels. There are like three problems here: 1) The heaters are all in the sump, so if the water drops too low and can’t complete the plumbing loop, the paludarium temp will start dropping and fish, plants & bacteria might die. 2) The motor might burn out 3) The motor makes a lot of noise (which is annoying for my housemates) when the water drops below the threshold.

    My idea is to install a soil moisture sensor into the reservoir/pump chamber of the sump and basically program it as a yes/no switch. I believe these sensors measure the capacitance of the medium they are in, so if they are completely out of the water, I should be able to trigger a pump from backup reservoir to turn on for say 20 seconds or something. The second stage of this is adding a second capacitance sensor near the rim of the sump that either stops the pump or begins to close the outflow valves to avoid a flood.

  7. I will also be order 2 sheets of PolyCarbonate plastic soon to cover the paludarium display tank. I got them priced out and I think its about 60 bucks for both sheets (my tank has a brace in it..) Hoping this addresses the insane amount of evaporation, mitigates the noise from the moving water, and makes it easier to bring down the pH (if I don’t have refill the tank as frequently, I can more easily use distill water to do it and combat the accumulation of hard water agents.)

Goddamn shit. Tank Update:

  1. Project DEAL BREAKER is going smoothly. It was a little harder than I thought it would be to implement, but that’s because I have switched some of the hardware around and some of the libraries didn’t talk well with one another. It is a reminder that I still have a lot to learn.
    At this point, I have almost everything working in concept. The relays are all working and (in theory can be) triggered by toggles as well as the DS3231 RTC at specific times. I have temps from three different temperature probes, the DHT22 temp/humidity sensor working well and I think I’m very close to have the Flow Rate sensor working. The code that I have for the Flow sensor compiles fine, but gives a funky number. I think its electrical noise, I need to add a resistor into the circuit, but I haven’t had time to do detailed electrical work recently… mostly just been rewatching the Sopranos and mulling over the code. When DEAL BREAKER is fully implemented, I will post the code and a more complete list of components to a post.
  2. After the main DEAL BREAKER stuff is done, the next step will be interfacing it with a ESP01 Wifi Module and start logging inputs on a MySQL database here – ie: PROJECT REAL FAKER.
  3. The above video is the first thing I ever made with an Arduino Uno and my introduction to this stuff. I had a rough idea of what Arduino was – a simple tiny computer that could prompt an output based on an input. If this, do this. So obviously its more complicated than that (or at least, it often is), but I ordered a kit off Amazon for $50 or so and its expanded exponentially since. Two years later and I basically need a barn where I can have an electronics lab, a grow/tank room and a painting/fabrication studio…
  4. Goddamn. I lost my phone. I went to a suburban fish store last week and bought some fish, a couple plants and another thing or two. I was writing an in-depth post for this blog while on the long bus ride back into Toronto proper, when I nearly missed my stop. I grabbed my fish friends and inadvertently left my phone on the seat beside me. In the large scheme of things in the universe – this is insignificant. In the tiny and self involved scheme of the universe- this is a giant pain in the ass. Not only do I not have a phone to appease my nervous fidgeting, I also can’t take photos of the tank as it rapidly progresses in this early phase. The dawning irony that my trip to fish store was about to double or triple in cost due to the replacement of my phone was also not welcome.
  5. I bought five more Panda Corydoras catfish for the tank. A giant and tragic flaw in my system: I recently found three Cory corpses in various stages of the sump weir. I thought that I had protected the opening enough, but it would appear that I had not. It was unfortunate, but I’ve temporarily over-covered the weir. The entire opening is stuff with polyfill. I think in the near future I may order a laser-cut acrylic insert that can be placed over the opening, allowing the full flow of water, but nothing big enough for a fish to get through.
  6. I also bought 8 Ember Tetras (Hyphessobrycon amandae) on the same trip. They seem to be doing well. They are colouring up and I’m looking forward to setting up a brine shrimp hatchery for them. Occasionally they will school together and its very cool – but I think there’s not quite enough of them to display shoaling behaviour all the time.
  7. I think once the tank chills out for a bit and I can get the water parameters under more control (more on that in another post), I would like to get a predatory fish – probably a pair of Dwarf Pike Cichlids so start regulating the Guppy population, and ideally, keep it at an absolute minimum. The guppies are already too numerous and I have a funny feeling that their random swimming behaviour disrupts the Ember Tetras shoaling. I think also just have a calmer tank with more substantial fish personalities would feel more resolved – hopefully, keep the water cleaner too.
  8. I also got a few more plants – a couple bunch of Sagittaria subulata and some Java Fern. Underwater garden is looking good, but they need some time to grow in. My Cryptocoryne Usteriana (I think) is doing pretty well. From what I have read, upon replanting they typically lose a lot of their leaves and send up new shoots and leaves once re-established. 2 of the 3 plants are sending up prominent new leaves, which is great. I would like to start Co2 injection soon, but apparently… this “hobby” is becoming “an obsession” and I have to “manage” my “time” and “money” more “responsibly“.
  9. Experiment update:  A little while ago I mentioned that I was trying to grow some aquatic plants in my hydroton sump tank emersed from the water. I have some Alternanthera reineckii, a rosebud of the same crypts I mentioned above as well as a year old, stunted and struggling Anubias in the sump. The anubias was a last ditch effort to see if the plant was worth keeping at all whatsoever.
    I am happy to report that all three plants are showing emersed growth. The Reineckii is growing the slowest, but you can see it has corrected its direction a couple of times and has tiny new leaves. The crypt is sending up a new leaf just like its buds upstairs and the Anubias is growing brand new, electric green leaves.All in all, the idea of have a sump with a “laborartory” in it is paying off. Any new sump design in the future will emphasize a space to work with plants (not to mention, grow food plants) within the system.



Tanks up and running. Guppies and 5 Panda Cories. I’m going to let the aquatic plants grow in for a bit before deciding what to do next in the water. The idea is to have a pretty dense curtain of stemmed plants that can block the PVC piping supporting the land area. Need to find more cheap stem plants.

The terrestrial plants are growing in nicely. They need to be trimmed soon.

Sump is working fine except for the noise. I have to figure that out. I know there’s a variable with the way that water moves around the system, but I can’t seem to find it. As of this writing, the tank gurgles and burps incessantly.

I need to find some more biological filtration media. Using Hydroton turned out to be a bad idea. Thankfully it was cheap and I like having it around, but it takes forever to sink (this means that as the water level in the sump fluctuates, the clay balls rise and fall, dislodging seedlings and stirring up any detritus on them. 98% of it is still floating after weeks. On the plus side, the tank is running, cycled and relatively clean right now with the current amount, so its kind of a silver lining to be able to add 130% more filter media. I would like to keep the hydroton as a top layer resting on whatever addition media I scavenge.

I also still need to figure out the lid situation. I want to buy a panel of Polycarbonite Plastic (stuff they use for greenhouse panels) but its an annoying thing to take on the bus, so I keep putting it off. And buying acrylic sheets is expensive. However, I think a lid will make a huge difference in the tank. The humidity shift would be really drastic and I’d be interested to see how the terrestrial plants react – especially some of the mosses that seem to just be sitting there.

I think the tank can sit for a bit and grow out – though I may get tempted to buy a dozen small tetras and a pair of Dwarf Pike Cichlids soon. I added 5 Panda Corydoras catfish to the tank last week and they are fucking awesome. I’m going to purchase 5 more for a nice school. They really do have an interesting behaviour to them – between their sociability and occasional high speed flourishes across the tank and up to the surface to gulp air, they are a great sitcom to watch in the tank.

Next big era of the project is the final phase of the Arduino implementation – code named ‘Deal Breaker’. The goal of operation Deal Breaker is to have the Mega, Relays, sensor boards, LCD, and lights and power supplies hooked up and securely installed in the enclosure.

Operation Meal Maker will be installing the wifi capabilities to that data gathered by the sensors is logged into a MySql database and available on this website.