There are 6 basic steps;
- Idea
- Selection
- Prototype
- Design
- Verify
- Produce
Selection. This is the most time consuming step. This is the part where we have to define exactly what our requirements are error margins, physical limitations, electrical limitations, etc. In the case of the Temperature & Humidity Sensor module, we have to ask, what is an acceptable margin of error for the temperature and humidity, obviously 10 degrees Celsius is far too much. After we determine what margins are acceptable we then have to find parts that meet those requirements, this is somewhat easy. The hard part is that while we’d love to deliver a module with 0.000001C margin, the cost would be outrageous, so we have to balance delivering awesome with affordable. This step is mostly spent on my favourite parts supplier (Digikey) and Google. Reading dozens (feels like hundreds of thousands by the time you're done) of datasheets. Reading user reviews and any other source of information on the part.
Prototype. This is where it starts to get fun. At this point we have to order engineering samples or purchase the parts we’re going to use, set it up on a breadboard or ProtoModule and figure out how to use it. I’m not a C/++ developer and working so low level on the uC is a new process for me so I often start by making the device work with my Netduino Classic first. This lets me understand how to use the hardware before I try to write the firmware for it I also use this code to ensure that the part meets my requirements. Then I have to write the firmware for it. Most of the modules are using the STM8S so I have to write an 8-bit C driver (I could use C++ or ASM but I prefer C) for the part. Now that this is done, I have to add the Go!Bus communications to the firmware and write a Managed Code driver to run on your Netduino Go. Then we test it, while it’s still on a breadboard or ProtoModule. I do this now, so I can use the module for a bit to make sure that it meets the requirements we’ve laid out.
Design. This is the boring part of the process. Here we just have to layout the parts on a breadboard and get the traces routed. Again this has to keep in mind the requirements, when using analog sensors we want to avoid having the analog lines cross things they shouldn’t and the like. At this point we talk with Secret Labs who verifies that we comply with the Go!Bus protocol and grants us a license to use the Go!Bus Logo on our board.
Verify. This is the most exciting part. We order prototypes of the PCB we’ve designed. Waiting sucks, and while waiting for them to come in I tend to go over the design 3-4 more times. I will continue to feel like I’ve forgotten something until the day when they arrive. Then I promptly stop whatever I’m doing (eating can wait until later ) and assemble the first one. Flash the firmware, and it’s time to start testing. This is where I start to get a bit giddy if its working (ProtoModule) or rather crabby when it’s not (12-key keypad). When we have one working I’ll start to play with it and see what can be done to make it better. “Do we need an LED?” “Should this be moved?” If were happy with it we move on to the next step, if we're not it’s back to the Design step.
Produce. This is when we make pre-orders available. It’s time to send the designs off to the manufacturer to have the PCBs produced, order the hardware to go on them, and arrange the delivery with the assembly house. Then it’s back to waiting again, about a week for each assembly and manufacturing plus shipping on both. Once everything is in my hands we visually inspect and verify everything, then start flashing them with a test firmware to ensure that everything is behaving. Finally we flash them with the production firmware, update the quantity available on the website and ship any pre-orders.
This process usually takes me about 80-100 hours from beginning to end (even for simple modules) and usually has me collaborating with several people, whom also spend significant amounts of time on the project. It’s quite honestly the most fun I’ve had in in a long time as well. Many thanks to