Posted on Leave a comment

Simple Arduino Temperature, Moisture and Light Monitor

Simple Arduino Temperature, Moisture and Light Monitor

Recently I planted some succulent seeds indoors, and had to put them in a miniature greenhouse so that they could sprout. I wanted a way to keep an eye on the temperature, moisture and ambient light in the greenhouse, so I whipped this up. It outputs realtime measurements to an LCD. If you’ve seen my ProGrow project, this is a simplified version without any data storage or relays.


I used an old scrap 3D print for the frame; it’s just a block of plastic that I screwed everything to. The electronic parts used are:

A quick overview of each component and why I’m using it:

  • Arduino Nano
    • Extremely low cost (<$3)
    • Ready to go ATMega328p board with voltage regulators and USB
    • Lots of expansion opportunities
  • Arduino Expansion Board
    • Makes life easier for prototyping/wiring with the Nano
  • FC-113 + 16×2 LCD
    • Cheap and easy to use LCD combo
    • Only requires two analog pins for communication
  • Photoresistor module
    • Works just like a photoresistor with an analog signal, but it also has a digital output
    • Has an indicator LED and potentiometer for the digital output
  • DHT11 Temperature/Humidity Module
    • Cheap, easy to use and fairly accurate.
    • DHT22 is a better version, but is more expensive

Connecting everything to the Arduino

Schematic for Temp/Humidity/Light Sensor
Schematic for Temp/Humidity/Light Sensor

The DHT11 module has 4 pins, but only three are used:

  •  Vcc to +5V
  • Signal to Digital Pin 5
  • Gnd to Gnd

The photoresistor module I am using also has 4 pins, and only three are used. The analog output of the module is used over the digital output. You can get the same functionality with just a resistor and a photoresistor.

  • Vcc to +5V
  • Aout to Analog pin 1
  • Gnd to Gnd

The LCD module is connected to the FC 113. The FC 113 is connected in the following manner:

  • Vcc to +5V
  • SCL to Analog pin 5
  • SDA to Analog pin 4
  • Gnd to Gnd


The arduino nano can be powered through USB with 5V, or through the Vin pin with 7V-12V.



Programming the Arduino for this is pretty straightforward. All the Arduino has to do is take a measurement from the DHT11 and photoresistor, and then output them to the display. There are libraries available for the DHT sensor, and the FC 113 module, so the whole process is straightforward.


Before starting

You need two libraries to make things easier, one for the DHT11 and one for the FC 113.

You can download the DHT library I used at:


You can download the FC 113 library I used at:


How to install libraries:


Before Setup

//Temp/Humidity/Light Monitor V0.1
#include <LiquidCrystal_I2C.h> //Import LcrystalI2C for FC 113 + LCD module
#include <dht.h> //Import DHT for DHT11 temperature/humidity sensor
int tempSensor = 5; //Digital pin 5 for temperature sensor
int lightSensor = A1; //Analog pin 1 for light sensor
dht DHT; //Sets up dht11 as DHT

First I include the required libraries.
Then, I establish pin 5 for the temperature sensor and analog pin 1 for the light sensor.
Finally, I set up an object called DHT to handle data from the DHT11 sensor.


void setup(){
Serial.begin(9600); //Establishes serial at 9600
lcd.init(); //Initialize the lcd
lcd.backlight(); //Initialize LCD backlight
lcd.clear(); //Clear LCD
Serial.print(analogRead(lightSensor)); //Print currently photoresistor value to serial; for troubleshooting purposes

The setup just consists of initializing the LCD module, and printing a simple message to the serial monitor as an optional self-check.


void loop(){
DHT.read11(tempSensor); //Reads information from tempSensor(pin 5), stores in DHT
lcd.setCursor(0,0); //Sets cursor of LCD to very first position
lcd.print("H: "); //Prints H: , for humidity
lcd.print(DHT.humidity); //Outputs humidity
lcd.setCursor(0,1); //Sets cursor of LCD to first position, second line
lcd.print("T: "); //Prints T: , for temperature
lcd.print(DHT.temperature); //Outputs temperature
lcd.print(" C"); //Prints C for celcius
delay(4000); //Delays for approximately 4 seconds
lcd.clear(); //Clears the LCD
lcd.setCursor(0,0); //Resets cursor to first position
lcd.print("Lux: "); //Prints Lux, for light level
lcd.print(analogRead(lightSensor)); //Outputs lux value
delay(4000); //Delays for 4 seconds before looping

The loop starts by reading the DHT11 sensor, and storing the values in the DHT object. Then, it outputs the information to the LCD. It delays for a few seconds, and then it reads the light sensor. It continues in a loop like this, reading and then outputting.

Posted on Leave a comment

FLSUN 50mm Blower Upgrade for Volcano

Upgrading my FLSUN to a 50mm Blower fan

When I upgraded my FLSUN Delta with a volcano kit from Aliexpress, I didn’t reinstall a part cooling fan. Mainly because I didn’t want to go back to the old 40mm fans I was previously using. I wanted to upgrade to a 50mm blower fan, and design a custom shroud for it.

You can find a 50mm blower fan on Aliexpress at this link.


Installing a blower onto the stock effector was pretty simple. Only one screw hole was available because of the design of my blower fan, so I opted to use a bit of epoxy for a stronger connection. Just the fan by itself worked quite well. It moved a lot of air towards the build plate, but it was pretty weak on freshly printed plastic. Since I’m using my delta to print at layers thicknesses up to 0.6mm now, I need stronger airflow around the tip of the nozzle.


Nozzle Designs

I went looking around, and I found a circular nozzle design on thingiverse. It worked pretty well! I found that it sent some of the airflow upwards towards the hotend, though. Using the snap-fit connector as a base and Fusion 360 for designing, I made three different attachments. The first attempt worked, but it suffered from the same problem as the circular nozzle. I used two channels to direct air downwards at a slight angle, but far too much air was directed to the hotend.

50mm Blower Nozzle V1
Nozzle V1


On the second attempt, I separated the channels from each other and added some chamfers to help direct airflow. I left some space on the front for air to move forward, still thinking that it would help or something. I also doubled the height of the channels. It worked much better than the first attempt, and the airflow was impressive. I still wasn’t satisfied with the amount of air that was being directed around the nozzle.


Next, I moved the openings to the bottom of the nozzle. I used large chamfers to control the direction of airflow as much as possible. The resulting part is quite effective, and has no problems keeping up with my printing. There’s definitely a lot of room to improve, though. For starters, the outputs are different sizes so the airflow is going to be uneven. I tried to make one output larger to compensate for the fact that it has bends and is offset from the nozzle, but I wasn’t sure exactly how to do it. Still, parts are turning out much nicer with the new fan and attachment installed.

50mm Blower Nozzle V3
50mm Blower Nozzle V3

The files can be downloaded here, on thingiverse.

Posted on Leave a comment

FLSUN Upgrade with AliExpress Volcano Knockoff

Volcano Clone Installed

Volcano Nozzle Upgrade on FLSUN Delta

I purchased a knockoff E3D V6 and volcano nozzle set on Aliexpress through Anycubic, because I wanted to upgrade my FLSUN Delta. The volcano upgrade is a nozzle set designed to allow significantly more filament to be extruded, so you can print tougher parts in less time. Genuine volcano kits are available for around $50 or more, but I’m a cheap bastard so I am going to use the chinese clone. It was around $11 for the entire kit when I purchased it in early March 2017. Shipping took a long time as expected with Aliexpress, but everything was there and it looked good. It came with a full clone J-Head assembly, including a 30mm fan, heating element and thermistor as well as a separate volcano kit. The volcano kit came with a larger heating block and four nozzles that range from 0.6mm to 1.2mm. Quality looked pretty good, and it’s definitely going to be an upgrade over my old, worn-in E3D V5 clone.


This slideshow requires JavaScript.


Upgrading my FLSUN delta was straightforward. Installing the new hotend was essentially the same process as removing the old one. I removed the old hotend by disconnecting the bowden tube, electronics and the two screws that hold it in place. I took the old hotend assembly out of the bracket. On the FLSUN delta, only two screws have to be loosened to remove the hotend assembly from the effector so it’s pretty easy. I put the new volcano hotend assembly into the bracket and tightened it into place. There is a screw that is used to adjust the auto-leveling function of the effector, and I had to make sure to readjust that to be accurate.

I soldered the fan to some extension wires so that I could run it down to the control board. The polarity of the thermistor and heating element don’t matter, so reconnecting them was easy. It took about fifteen minutes to install the new hotend, and run the wires. I had some trouble removing my old hotend assembly, because it melted into the plastic effector slightly over time.


This slideshow requires JavaScript.


Systems Check

Temp Graph

I accidentally overtightened the thermistor, which caused it to short and throw a temperature error. I checked the thermistor using a multimeter, and found that the resistance was 0Ohms which confirms a short circuit. I wanted a reading between 70k and 80k to confirm that it was working. I fixed my mistake by putting some kapton tape on the exposed wire, and then I carefully put it back into place. I wrapped the hotend in some ceramic insulation, and then I wrapped the insulation in aluminum tape.

I ran a quick self check, and then a PID tune. If you need to do a PID tune, I personally referenced Tom’s guide for configuring Marlin. Everything looked great, and the temperature was surprisingly stable after my first check. The temperature graph shown is from the purple vase print that’s coming up.



I loaded a scripted vase into Simplify3D, and sliced it in vase mode. I wasn’t sure was settings to use to start with, so I went with the following:

  • 0.8mm nozzle
  • 0.4mm layer height
  • line width of 1.0mm

I thought that using a line width of 1.0mm would cause the layers to squish together firmly, increasing strength. I primarily wanted the volcano to quickly print strong objects, so I thought that a vase would be a perfect way to test speed and the strength of walls/layers.

Right off the bat, there was some cooling issues due to the lack of a part fan. The thick lines were holding onto too much heat, and they started to sag. I added a small desk fan to help with air circulation, and the print quality increased quite a lot. Printing slower would also help. I have some blower fans coming in the mail that I will install on the effector for a more permanent solution. I stopped the vase print after 15 minutes to examine it. The surface finish is beautiful, where the part was properly cooled. The thick layers have a charming texture and the way that they line up nicely is quite satisfying. It’s also incredibly strong, the thick lines give the vase some real structure even though it’s only one layer thick. The infill left a lot to be desired, lots of missed gaps because of the huge extrusion width. I can fix that with settings, though!

Purple Vase 0.4mm Layers
Purple Vase 0.4mm Layers

I tried some cable chains at 0.4mm without any part cooling, at around 80mm/s print speed. I printed four links at once, to give each piece some time to cool down. They came out quite ugly with 0.4mm layers, but they functioned well enough and were very strong. Most importantly, they printed FAST. It only took about 2 minutes to print each link, which is at least two times faster than my original Prusa i3 Mk2s with the stock setup.

This slideshow requires JavaScript.

I started tweaking the settings a bit, and settled on the following for my next test:

  • 0.3mm layer height
  • 0.8mm line width
  • 25% overlap
  • 200C nozzle
  • 80mm/s print speed

I noticed that the volcano nozzle has significantly less oozing than the stock nozzle, so I reduced my retraction from 6mm to 3mm. I put a desk fan in place to act as part cooling, and printed some test nuts & bolts. I printed two bolts and two nuts at the same time, with the bolts spaced apart to test retraction. I added a 2-layer brim to the parts to make sure they stayed put on the bed. They came out looking pretty nice, and the total print time was only around 10 minutes! Retraction seemed perfect. They worked right off of the build plate and they are incredibly strong. There are some minor banding and over extrusion issues, but for the third print after upgrading the quality impresses me.


I adjusted some acceleration settings to help compensate for the heavier hotend, and then I ran another vase mode print. I printed another scripted vase, this time at 160% scale. Still using the 0.8mm nozzle, and a layer height of 0.3mm. An hour into the print, my filament ran out, so I had to stop the print. I managed to print about 85% of the vase, so I’m not calling it a total failure. The vase came out incredibly strong, and the surface finish is getting better with every print.

This slideshow requires JavaScript.



I’m quite happy with how the upgrade went, and I’m surprised at how low the cost was considering the quality of components. It took forever for the parts to arrive, but when you consider the incredibly low cost you can’t beat it. The seller ANYCUBIC also refunded me on a set of 5 nozzles that took an extremely long time to arrive, and they were responsive to questions. A genuine volcano setup would most likely produce higher quality parts, and it’s going to be made with higher quality materials and more stringent quality control. On the other hand, you really can’t complain about the knock off when you basically get two functional hotend setups for around $11 Canadian. It was basically a straight replacement for the stock nozzle on my FLSUN delta. There was some minor fidgeting to get the fan attachment on with the stock effector, but it ended up working out fine. It took about 30 minutes to change the hotend and get printing. Half of that time was spent doing a PID tuning.

The strength of printed parts and increase in speed is awesome. I primarily use my original Prusa i3 for prints where quality is important, so it’s great to have this option on my delta to rapidly produce tough parts. The volcano clone still produces high quality prints under the right conditions, and it will only get better as I tune in my settings. It’s also nice to have a higher quality hotend assembly on the Delta, so that I can reliably print materials other than just PLA.


I seriously suggest this upgrade to anyone that’s considering it. The monetary investment, and time spent is so small compared to the time it will save when printing. Upgrading from a 0.4mm nozzle to a 0.8mm nozzle immediately cuts print time in half. Thicker lines also mean less layers and stronger layer adhesion, which results in much stronger parts. Plus, bigger individual lines means less individual movements and it results in smaller gcode files that are easier to process! The only downside ( other than aesthetic quality ) is that the upgrade doesn’t come with a dedicated part cooling fan, so I’m going to have to improvise. I’ll probably just hot glue a blower fan onto the effector and call it a day.


Posted on Leave a comment

3D Printed Arduino + Bluetooth Tank

3D Printed RC Tank

I’ve been working on a new remote controlled tank in my spare time. My goal with this project is to make a cheap, printable RC tank kit. This post goes back and forth between talking about the tank, and a basic tutorial on how the components and code work together.

Currently it’s a working prototype. The tank uses an Arduino Nano clone (ATmega328) as the primary board. An L298n H-Bridge is used to control the left and right motors independently, allowing it to quickly turn or revese. It uses the HC-06 Bluetooth module to receive commands. The power comes from two 18650 batteries that are connected in series.

3D Printed RC Tank



I purchased the majority of the hardware from Aliexpress, because it’s so cheap. The links below are to the stores that I used, but you can find the same parts on many websites other than Aliexpress.

  • Arduino Nano V3 Clone ( AtMega328p ) – Link
  • L298n H-Bridge Motor Controller – Link
  • HC-06 Bluetooth Module – Link
  • 2x DC Motor + 64:1 Gearbox – Link
  • 2x 18650 Battery – I took mine from an old laptop, wired them in series for 7V+
  • 1x 500mA Polyfuse – Optional, put between power source and VIN


I salvaged some steel weights from an old set of window blinds, and super-glued them to the base to add some weight.

Tank Front View
Tank Front View



The frame of the tank was printed as a solid piece. There are four mounting spots for wheels. The two at the front are designed so that small bearings will slot into them, so that the front wheels spin freely. The other two of the mounts are designed to hold the gearbox motors. I made a T-shape in the center of the frame so that I can mount a breadboard on top of the frame. The frame design leaves much to be desired, it’s much too thin and flexible.

This slideshow requires JavaScript.

The front and rear wheels have teeth that are spaced out, so that they catch on the inside of the cable-chain tracks. The teeth are tapered slightly to keep the tracks aligned, and there is a guard on the front wheels to ensure that they stay on. The battery holder has holes in the sides and bottom so that wires can pass through. Screws hold the wheels in place.

RC Tank Sideview
RC Tank Sideview



The Arduino and L298N are powered using two 18650 batteries. These are fairly common rechargeable batteries, with an output around 3.7V. I wired my batteries in series. My schematic says 7.2V, that’s a typo, it’s really 7.4V+. I use the VIN pin on the Arduino Nano to power the chip.

The 5V output on the Arduino powers the HC-06 module. Make sure that you’re using an HC-06 module with a breakout board like mine, so that it is 5V tolerant. This is because the raw HC-06 chip is NOT 5V tolerant.

Pins 2 and 3 are connected to the HC-06, and pins 4 through 7 are connected to the L298N. On the L298N, pins ENA and ENB are used for PWM control of the outputs, so that you can achieve finer speed control. I don’t utilize these, so they are set high.




There are only two main components to control other than the Arduino itself, they are the HC-06 and the L298n. The HC-06 is going to receive data from an external source, and then pass it to the Arduino. Then the Arduino will make a decision, and send signals to the L298N to turn on the motors.

There is a link at the bottom to download the full code, or read through and copy/paste the example blocks.



The program imports the SoftwareSerial library, and establishes pins for motor control. A char named btData is used to handle incoming Bluetooth data. Then pins 2 and 3 are declared as RX and TX using SoftwareSerial.

//SoftwareSerial library is included so that we can utilize pins 2 and 3 for the HC-06
#include <SoftwareSerial.h> //Pins 4, 5, 6, 7 used for motors.
const int motorRF = 4; //RF = Right motor, Forward direction 
const int motorRR = 5; //RR = Right motor, Reverse direction 
const int motorLF = 6; //LF = Left motor, Forward direction 
const int motorLR = 7; //LR = Left motor, Reverse direction 
char btData; //char used for bluetooth data - receives commands like "1", "2", "a", etc. 

SoftwareSerial HC06(2,3); //RX, TX - Pins 2 and 3 used for HC-06 Module



Serial communication is set up, and a string saying “Hello” is sent as a self-check. Then digital pins 4, 5, 6 and 7 are declared as outputs, in order to send signals to the L298n.

void setup() {
  HC06.begin(9600); //Begin serial at 9600 baud as "HC06"
  HC06.println("Hello."); //Sends "Hello." through serial, to acknowledge startup

  pinMode(motorRF, OUTPUT); //Sets pins 4 through 7 to OUTPUTs, to control the L298N
  pinMode(motorRR, OUTPUT);
  pinMode(motorLF, OUTPUT);
  pinMode(motorLR, OUTPUT);



The loop works by cycling until data is available at the HC-06 module. When data is received, it enters the loop and then makes decisions. In this case, I use the numbers 1 through 4 to control the state of the L298N. When a ‘1’ is received, the Arduino sets pins 4 and 6 to HIGH, so that the L298N enables the outputs in a manner that turns both motors forwards. I use a delay function, so that it keeps the motor on for a second.

void loop() {
  //Loops until data is sent to HC06
  if (HC06.available()){ //When data is available in the HC06, do this
    HC06.println("Reading."); //Prints "Reading." through serial, to acknowledge incoming data
    btData =; //Reads "HC06" and stores the value into the char "btData"

    if (btData=='1'){ //If the HC-06 receives a 1, do this
      HC06.println("Forward."); //Sends "Forward." through serial, to acknowledge that a 1 was received
      digitalWrite(motorRF, HIGH); //Activates the motors so that the tank moves forwards
      digitalWrite(motorLF, HIGH);
      delay(1000); //Delays for approximately one second
    if (btData=='2'){ //If the HC-06 receives a 2, do this
      HC06.println("Reverse."); //Sends "Reverse." through serial, to acknowledge that a 1 was received
      digitalWrite(motorRR, HIGH); //Activates the motors so that the tank moves backwards
      digitalWrite(motorLR, HIGH);
      delay(1000); //Delays for approximately one second

    if (btData=='3'){ //If the HC-06 receives a 3, do this
      HC06.println("Left."); //Sends "Left." through serial, to acknowledge that a 1 was received
      digitalWrite(motorRF, HIGH); //Activates the motors so that the tank rotates left
      digitalWrite(motorLR, HIGH);
      delay(1000); //Delays for approximately one second
    if (btData=='4'){ //If the HC-06 receives a 4, do this
      HC06.println("Right."); //Sends "Right." through serial, to acknowledge that a 1 was received
      digitalWrite(motorLF, HIGH); //Activates the motors so that the tank rotates right
      digitalWrite(motorRR, HIGH);
      delay(1000); //Delays for approximately one second

    digitalWrite(motorLF, LOW); //Turns all of the motors off, by setting everything to LOW
    digitalWrite(motorLR, LOW);
    digitalWrite(motorRF, LOW);
    digitalWrite(motorRR, LOW);

Download the full code here.


Connecting to the HC-06

I use the mobile app Bluetooth Electronics to connect to and send commands to my HC-06 module. I like using my phone since I can follow the car around. You can also use PuTTy, or another program to send serial commands to the HC-06 from a laptop or desktop.

The HC-06 becomes available for pairing when it is powered on. Pair your device with it, using the default password of “1234“. Once your device is paired with the HC-06, you’ll be able to connect to it using your program of choice.

To connect to it using Bluetooth Electronics, make sure that you’ve paired your device with the HC-06 and then open Bluetooth Electronics. Click “connect” at the top, and select your HC-06 from the list. Assuming you wired it correctly and it’s paired, you will now be able to send commands to it through the app. The app makes it incredibly simple to create a customized GUI for sending commands to the tank.


Future Design Ideas

I plan on making a lot of changes to this tank. I’m going to redesign the majority of the frame and the connection points on the wheels so that they are stronger. I want to increase the number of batteries to 3, so that it’s capable of higher speeds. The battery holder design is a little bit too short, requiring tape to stay closed, so I’ll fix that in the next revision.


I am working on a standalone program so that the project can be controlled in an easier manner. Instead of having it drive for predetermined lengths of time according to command-line strings, I plan on having a GUI with realtime feedback. There are a lot of options for making a program like this. I have been experimenting with python to some success, but I might resort to using one of the many application builders that are available. For right now, the Bluetooth Electronics app meets all of my requirements so I’ll continue down that path until I need more complicated functionality.


A great upgrade for the system would be to use an ESP8266. It would provide greater control options, and it would lower the cost and footprint. The extreme simplicity of the Arduino and HC-06 combination make it very easy to use and adapt, so I am going to continue using it for this project. Plus, I have a bunch of Nanos and HC modules sitting in a drawer collecting dust; it’s about time I turned them into something. My next RC vehicle project will hopefully utilize wifi.


More on this project is coming.

Thanks for reading!


Posted on Leave a comment

Designing and 3D Printing a Multi-Color Business Card

3D Printed Business Card
3D Printed Business Card
3D Printed Business Card


Earlier today I was experimenting with multiple shades/colors and materials using my Prusa i3 Mk2s. I have some black PETG from Fused Filaments, and some natural NextPage PLA. I wanted to see if I could combine them, so I tried to make a minimalistic business card.


Designing The Card

I used 3DS Max to design this card. Virtually every 3D modeling software has tools that let you follow the basic steps that I outline here. I tried to keep it as simple as possible. The basic design idea is split into two parts –

  • solid background in one color or material
  • raised features like text/border/design in another color or material

This slideshow requires JavaScript.


I made the base of the card by creating a 90mmX50mmX0.4mm rectangle. I chamfered the edges so that it would be more comfortable to hold.


I made a text spline and then extruded it to be 0.4mm thick. Then I positioned it on top of the base.

I find that Arial Round MT Bold is a great font to use for 3D printing, because it has nice corners and good legibility.


I made an outline of the edge of the card, and positioned it on top of the base like I did with the text. It is 0.4mm thick, like the text.

3D Printed Business Card
3D Printed Business Card


I sliced the model using the latest version of Prusa3D Slic3r. I used the following settings on my Prusa i3 Mk2S:

  • 100 micron layers (0.4mm standard Optimal setting)
  • 215C 1st layer
  • 205C PLA layers ( 2nd to 4th layer )
  • 240C PETG layers  ( 5th to 8th layer )

I uploaded the model to the Slic3r ColorPrint webpage and used their tool to modify the G-Code. I simply set it to request a color change after completing the background. When I inserted the PETG, I had to make sure to adjust the temperature to 240C using the tune option on the LCD panel.


Design Thoughts

I thought that it would be best to use my natural PLA for the background, and the PETG for text to get a sharp contrast. The opposite would work well, but I thought that the transparency of the natural PLA would be nice as a background. The PETG also requires a printing temperature of ~240C, so it has no problem adhering to a PLA surface. Printing PLA onto PETG might have adhesion problems, because of the lower printing temperature of PLA.

There was minor stringing with the PETG because I was using my standard PLA settings, and only changed the temperature during the color change. It still turned out quite nice considering how little effort I put into it. I started by printing one card, and then I printed six cards at once. Both batches turned out nice.

Stringing on PETG lettering
Stringing on PETG lettering

The cards are pretty flexible but still firm with a 0.4mm base and 0.4mm border. The text gives a really nice tactile feedback when you run your fingers across it. I’m going to try printing them with a base thickness of 0.6mm instead of 0.4mm. The 90mmX50mm size profile is standard, but you could go any direction with the shape or size or design. There’s so many options.

The PETG lettering stuck firmly to the PLA. I twisted, bent and crushed one of the cards and it didn’t break or lose letters. I had to use a knife to peel the letters off, and they were pretty stubborn. The borders didn’t stick as well as the letters, though. I was able to peel the border off of two cards with my fingernails. Perhaps it was too thin.

Crushed Business Card
Crushed Business Card

I am going to experiment with further modifying G-Code, so that I don’t have to manually adjust the temperature after a material switch. Maybe I should pick up some black PLA so I that I don’t have to fuss with temperatures.


Posted on Leave a comment

ProGrow Update #5 – Bluetooth using HC-06

Progrow Side - Feb 16 2017. HC-06 visible in the top right

I’ve been severely neglecting the ProGrow the past couple of weeks. The cat grass died a while ago, but I’m planning on planting some catnip in the future. Right now, I’m going to try to focus on getting some wireless functionality into it. I have an ESP8266 module that is capable of adding Wifi to the system, but I also have an HC-06 Bluetooth module. I’m going to test out the Bluetooth for now, so that I can send commands to it from my phone or PC.

The HC-06 and HC-05

HC-06 with Breakout Module Front View
HC-06 Bluetooth chip with breakout module, Front View

The HC-06 and HC-05 are inexpensive and easy to use Bluetooth modules. The 05 and 06 are virtually the same, but the HC-06 is only capable of acting as a slave, while the HC-05 is capable of acting as a master/slave. The blue board in the picture above is a breakout board with a voltage regulator for the primary chip.

Adding the HC-06

It’s incredibly easy to wire up the HC-06. All I had to do to connect it to my Arduino UNO was:

  • VCC to 5V
  • GND to GND
  • TX to Pin 2
  • RX to Pin 3

If your module has a breakout board attached, then it will be 5V tolerant. If it is a bare module, you’ll need to make a voltage divider in order to provide 3.3V to the chip.


HC-06 with Breakout to Arduino UNO Schematic
HC-06 with Breakout to Arduino UNO Schematic

Connecting with the HC-06

I’m using the library SoftwareSerial to utilize my digital pins 2 and 3 as RX/TX,  instead of 0 and 1. This is because when you have something connected to pins 0 and 1, and try to upload to the board via USB, it can cause a communication issue. At least it did that for me.

All I had to do was include the SoftwareSerial library, and then initialize pins 2 and 3 using:

SoftwareSerial HC06(2,3); //RX, TX

That way I can use “HC06” for serial functions on different pins. It has to go before the setup function.


I’m using a Bluetooth dongle on my PC to send commands to the HC-06. I can connect to it with the Windows Bluetooth interface, using the default password of 1234. I’m using PuTTY to connect to the COM port that is associated with sending data to the HC-06, and then I send commands through the PuTTY terminal.

I can read data that is sent to the HC-06 using:

btData =;

Then I can use a simple if statement to make decisions based on whatever value I sent to the module. For example:

if (btData=='1'){
    displayData(); //displays all sensor values on screen


What’s Bluetooth needed for?

Right now I use the Bluetooth to issue basic commands wirelessly. I can send commands to the ProGrow from my computer using Putty. I can have the system output to the display, water the plant, write to the SD card, change the automatic sample delay and force a measurement.


What’s next?

I want to use an HC-05 module instead, which will give me many more connectivity options.

I am going to design new cases for all of the modules. My goal is to create a single box that will house all of the primary components, instead of having them distributed across the front or side of the container. I also want to get some catnip planted.





Posted on Leave a comment

ProGrow Parts List

Pro Grow

This is a rough list of the parts that I have used to make the first few ProGrow prototypes. Everything that I have used for the ProGrow prototypes has been purchased through AliExpress, because I’m super cheap. There are many alternative parts that you can use and find on your own that will achieve the same or better results. I’ll try to explore some alternative options. You can use this as a guide for what sort of modules you might want for your own personal projects.

Pro Grow
Pro Grow System

Parts List:

Main board:

An Atmega 328P development board is used as the main controller in the ProGrow. It’s basically an Arduino UNO clone. Any Atmega based development board should be able to do the same job. You could also potentially use an ESP8266 for integrated wireless function, but that is a different story.


Aliexpress – – – Adafruit – Sparkfun – Arrow


Board Enclosure:

I use a simple acrylic enclosure on the Arduino UNO to make it easier to mount it to stuff. I have also had great success using a 3D printed UNO case, so I’ll include a link to that if you want to print one for yourself.


Aliexpress – Arduino UNO Case by Torsten


LED Display:

I use a green LED display from RobotDyn as my primary means of display and system monitoring. They’ve got all sorts of display types, modules and boards available, so I’ll include a link to their store page.

The display uses the TM1637 library.


Green LED Display – RobotDyn Store Home Page


Air temperature & humidity sensor:

I use the DHT22 as my air sensor. It’s capable of fairly accurate temperature and humidity measurements using the DHT library. It interfaces painlessly with the Arduino using only one GPIO for data, so it has a lot of function in a small footprint.

You can also use the DHT11 as an alternative. The only differences are that the DHT11 is cheaper and slightly less accurate.

You can use the DHT library that is accessible through the Arduino IDE.

Aliexpress DHT22Aliexpress DHT11 DHT22 – DHT22


Soil Moisture Sensor:

I use the dirt cheap soil moisture sensors that you can find online. The ones from Aliexpress are less than a dollar, and they have worked fine for me for almost a year now. It’s always good to buy extra at these prices, though.

I use the sensors analog output with the Arduino, so that I can have the arduino make decisions based on the moisture value.

Some of the modules have the ability to be set so that they will output a logic high when at a certain moisture threshold. If the description doesn’t say it, you can look for this functionality by looking for a potentiometer on the board that connects to the sensor. You can do the same thing with programming, though.



Relay Module:

I use a relay module to control the water pump in the ProGrow. A relay module is a bit overkill for such a small DC pump, but it allows a lot of expansion opportunities and interfacing it with the Arduino is dead simple. I went with a prebuilt module, since I could just sticky-tape it right onto my project. You can buy relays of all shapes and sizes on Aliexpress.



BH1750 Light Sensor:

I use a BH1750 light sensor with the ProGrow. There are many light sensor alternatives out there that work great and basically do the same thing.


Aliexpress BH1750Aliexpress Generic Light SensorAliexpress RobotDyn Light Sensor


DC Water Pump:

I use a simple submersible DC pump to move water into the container for the ProGrow. Any pump will work, as long as you can control it using the relay and Arduino.


Aliexpress –


SD Card Module:

I use a generic SD card module to record data to a MicroSD using the SD and SPI libraries that are built into the Arduino IDE.





I use 170-point breadboards for handling the circuitry for the ProGrow. I love them because they make it very easy it to attach basic circuits to your prototypes.
There are all shapes, sizes and price points available online.

Aliexpress – Aliexpress Generic Breadboard Search


Push Buttons:

I use the cheapest, simplest push buttons that I could find. They slot into a board, and go clickity-click! You can find them anywhere, in all sorts of shapes and sizes and colors. I use momentary push buttons.




I’ll update this as things change or if I think of something I missed.


Posted on Leave a comment

Designing & 3D Printing A Star Vase With 3DS Max

Star Vase printed with transparent purple AMZ3D PLA

I’m going to describe the basic process I go through to design and then 3D print a vase using 3DS Max. The basic techniques can be applied to many different modeling programs.


Step 1:

Navigate to the splines section and select the Star tool.

Step 1

Step 2:

Place a star spline with your desired dimensions and number of points. The filet option can be used to smooth the edges.

Step 2


Step 3:

Select the star. Select Extrude from the Modifier List. Enter the desired height. Use 1 vertical segment for this example, with the rest of the settings at default.


Step 3

Step 4:

Select the star. Right click, and select Convert To: Editable Poly

Step 4


Step 5:

Select the top face of the object, and twist it.

Step 5


Step 6:

With the top face still selected, shrink it to your desired size to create a taper.

Step 6


Step 7:

Export the model as an STL from 3DS Max, and import it into your slicing program. I use Slic3r and repetier host.

To use vase mode, you have to have:

  • 1 External Perimeter
  • 0 Top Layers
  • Spiral vase mode enabled (obviously)

I find that using 3 bottom layers is fine, but you can use more to make it less tippy.

Step 7

Step 8:

Once the model is sliced, print it using your printer and desired settings. I printed this one using transparent purple PLA from AMZ3D. It came out alright; I should have printed a bit slower.

Star Vase printed with transparent purple AMZ3D PLA
Star Vase printed with transparent purple AMZ3D PLA


You can download the model on Thingiverse:


Thanks for reading! I hope you learned something. Have a great day.

Posted on Leave a comment

Arduino – Spare Parts Robot Car Prototype

Arduino Robot Car

Last night I was pretty bored, so I decided to build a simple robot car. I’ve only put a few hours of work into it so far, but it drives and steers! Sort of.

This slideshow requires JavaScript.



Parts used:

1x Arduino Nano

1x LiPo Battery

2x TIP120 Transistor

1x Servo Motor

1x DC Motor Gearbox

2x 2k Resistors

1x Breadboard

4x Wheels


The TIP120 transistor was only used because I had a bag of them within arms reach. The TIP120 works fine for this application, but it is inefficient and has lots of drawbacks. A FQP30n06l is much better for this application.



Schematic View of Car Circuit
Schematic View of Car Circuit


Literally all this code does is make the car accelerate gradually and wiggle the steering.

#include <Servo.h>
Servo steering;
int driveMotor = 3; //Digital 3 used for TIP120 on drive motor
int steerMotor = 6; //Digital 6 used for TIP120 on steering servo
void setup() {
    steering.attach(9); //Attach the Servo motor to digital PWM pin 9

void loop() {
    analogWrite(steerMotor, 255); //Turns the TIP120 on for the steering servo
    steering.write(90); //Sets the steering to 90 deg
    delay(250); //Waits a bit, for the servo to get to place
    analogWrite(steerMotor, 0); //Turns off the TIP120 to the servo
    analogWrite(driveMotor, 255); //Turns on the drive motor

    for (int i=80; i<=255; i++){  
        analogWrite(driveMotor, i); //Gradually accelerates by switching TIP120, starting at 80/255
    analogWrite(driveMotor, 0); //Turns off the drive motor
    analogWrite(steerMotor, 255); //Turns the TIP120 on for the steering servo
    steering.write(45); //Sets the steering to 45 deg
    delay(250); //Waits a bit, for the servo to get to place
    steering.write(135); //Sets the steering to 135 deg
    delay(500); //Waits a bit, for the servo to get to place
    analogWrite(steerMotor, 0); //Turns off the TIP120 for the steering servo


The body of the vehicle is a 94:1 gearbox and the DC motor that drive the rear wheels. I attached a breadboard to the top of the gearbox to hold the circuitry. The servo motor responsible for steering is mounted on the front of the gearbox, and a 3D printed bracket holds the front wheels to the servo horn. It’s a pretty poor steering system, to be honest. I used zip ties and double-sided tape to keep everything stuck together.

Frame Design
Frame Design

The front wheels are some old attempts at Emmets Bearings that I found in my failed print bin. They spin well, but are awfully ugly. I designed the rear wheels myself using 3DS Max.

Rear Wheel Design
Rear Wheel Design

The obvious next step is to add a dedicated supply for the Arduino, so that the car is completely independent. It also needs basic wireless control; I’ll likely use IR. It also needs an actual frame and some proper wiring… and a lot more. It’s a work in progress.





Posted on Leave a comment

My New 3D Printer! Why I Chose Prusa instead of Flashforge or Rostock

For the past few months, I’ve been seriously considering buying a second 3D Printer. Currently I have a heavily modified FLSUN Delta, which still works beautifully, but I need to expand my options. I am constantly wanting to print multiple things at a time with different filaments, and I regularly have to wait for my printer to finish to start a new print. I set my budget around $1000-$1200 CAD and went out exploring my options.


Rostock Max V3

I was originally looking at the Rostock Max V3. I have heard nothing but great things about the Rostock line of delta printers. After asking multiple Rostock V3 owners on Reddit, the general consensus is that the printer has a very straightforward assembly and reliably produces beautiful prints with minimal effort. My time with my FLSUN Delta has also given me quite a lot of experience with delta printer design and troubleshooting. The build volume of 265mmx400mm is also very attractive. Unfortunately, I wasn’t able to source a Rostock Max V3 in Canada for less than $1400 CAD all things considered, which was unappealing. The Max V2 is available for around $1,000 CAD, but I wasn’t sure that I wanted the V2. Maybe I just wasn’t looking in the right place?


Flashforge Creator Pro

Then I set my sights on the FlashForge Creator Pro. Quite a big change from the Rostock. It’s aesthetically pleasing and enclosed, has dual extruders and has great reviews. Sadly, it has a fairly small print volume ( around 225mm x 145mm x 150mm ) and the price ($1200 CAD) was still above what I felt comfortable with. I also feel like the dual extruders would turn out to be more trouble than they are worth.


The enclosed build space is attractive and would be great for ABS prints, but isn’t really required for most other common filaments.


Turns out that the FlashForge is just a clone of the Makerbot, though, and there are plenty of other clones! Two other very popular printers that are virtually identical to the FF Creator Pro are the Qidi Tech I and the PowerSpec Ultra. The PowerSpec Ultra wasn’t easily available to me, but the Qidi is available for a flat $999 CAD on


After researching the Qidi, a lot of users complained about a lack of proper cooling fans for the printer and an outdated board. Other users said the opposite, though, so I contacted Qidi directly about the printer. They assured me that their December 2016 Tech I version has improved cooling and an updated board. I was almost settled on the Qidi, but then I looked into the Prusa i3 again.


Original Prusa i3 MK2

Honestly, I had put the Prusa on the backburner because of what I’ve heard and seen about it. After looking at it more, though, I realized that everything bad I’ve heard or seen was about cheap Prusa i3 clones, and not the actual original Prusa Mk2. I guess I don’t pay close enough attention.


After researching the actual i3 a bit more, the one built and sold by Prusa Research, I was sold. Reviews for it are golden, and the price ($700 USD, about $1050 CAD) was right in my sweet spot. The Cartesian design is new to me, but it’s going to be a fun learning experience. The amount of upgrades and changes that can be made to the stock printer are also very appealing to a tinkerer like myself. The huge open source community surrounding the Mk2 is a big plus as well.


My Prusa Mk2 is on backorder right now. It will be about 5 to 7 weeks for the kit to ship, so expected delivery is early March. I ended up getting the black printed parts kit. I hope the wait will be worth it!