Assume I make some cool gadget using Arduino and have someone that wants to invest money to start up a company that manufactures and sells these gadgets.
From other people's past experience, do I stick with Arduino? Is the final product just a nicely packaged version of the Arduino prototype? Or are there reasons for moving to some other microcontroller platform for a commercial product?
It depends upon whether or not you want the final product to be reprogrammable by users (which is a pretty cool feature!) If you stick with Arduino and add a USB port to your final product then it becomes "hackable" (reprogrammable) and gives your product a different character compared to something that is in a "sealed box".
Moving to a different microcontroller platform doesn't prevent this, of course, but sticking to the Arduino ensures that lots of people already know how to reprogram it and have the tools to do so. You could make a PIC-reprogrammable product, an NXP-reprogrammable product, etc. but they all have different development environments and libraries.
If you are not aiming for reprogrammability, then I would choose the least expensive microcontroller for the final project (that is still powerful enough to do the job), which is probably not going to be an Atmel processor (as in the Arduino).
--
The Gadget Shield: accelerometer, RGB LED, IR transmit/receive, speaker, microphone, light sensor, potentiometer, pushbuttons
No, the gadget should not be reprogrammable, so I guess I should remove the USB port and use the smallest cheapest microcontroller that will do the trick.
One other question: Let's just say there WAS still a USB port in the final product for a minute. Is it possible to somehow get the compiled Arduino code and "uncompile" it back to something readable? i.e. is it possible for someone to reverse engineer this -- get the code off, make it readable, modify it, and reload it? I'm guessing no, that that would be harder than just writing the code again from scratch..?
Is it possible to somehow get the compiled Arduino code and "uncompile" it back to something readable? i.e. is it possible for someone to reverse engineer this -- get the code off, make it readable, modify it, and reload it? I'm guessing no, that that would be harder than just writing the code again from scratch..?
You're right, it is much harder to reverse-engineer the code than to just rewrite it from scratch.
Which is to say, it'll take a month rather than a day But it will happen. Personally, I recommend just making it open source. Letting people study and improve/extend your code is a benefit that outweighs the "knockoff factor". Just look at Arduino
--
The Rugged Motor Driver: two H-bridges, more power than an L298, fully protected
The only thing they are gonna pull off is a hex file, which if they can intrpret the hex and know how the microcontroller uses it then they can re use it, but it doesn't tell them the code you used, just the machine commands that are done as put there by the compiler on the IDE.
you couldn't recover a human readable file from the code if you tried for a month, just a whole lot of 0s and 1s that make sense to the controller
You can set the Data Memory Lock bits to prevent hex file readout if I read this correctly:
"SPM is not allowed to write to the Application section, and LPM
executing from the Boot Loader section is not allowed to read
from the Application section."
You then need 12V programning capability to erase the lock bits and memory to be able to program the chip again.
Make sure you design an ISP header so you can have a manufacturer make the board, assemble it and then you or they can flash the code into the chip via this header.
I used the promini a lot as well. Finally designed my own version without all the extra stuff as I usually have offboard power, don't care about the LEDs or Reset, program via FTDI Basic, and found the 2 ground pins were never enough. There are pictures of it at my signature link that cyclegadget sent me.
I am finding I can't see the small stuff for crap anymore, and haven't got soldering under magnifying glass to a workable level yet, so my own assembling needs practice. Wirewrap I can do no sweat! Here's a couple of boards I did when I used the last of my promini's (I built 16 or so into projects), you can see the ATMega328 and its xtal & caps, before I did the mini-uino design, and a promini on a socket in a remote control.
davidnhutch:
Let's just say there WAS still a USB port in the final product for a minute. Is it possible to somehow get the compiled Arduino code and "uncompile" it back to something readable?
The lack of or inclusion of a USB port really has no bearing. I'd some one wants to reverse engineer something, they will open the box and find a way.
Can I build a commercial product based on Arduino?
Yes, with the following conditions:
Physically embedding an Arduino board inside a commercial product does not require you to disclose or open-source any information about its design.
Deriving the design of a commercial product from the Eagle files for an Arduino board requires you to release the modified files under the same Creative Commons Attribution Share-Alike license. You may manufacture and sell the resulting product.
Using the Arduino core and libraries for the firmware of a commercial product does not require you to release the source code for the firmware. The LGPL does, however, require you to make available object files that allow for the relinking of the firmware against updated versions of the Arduino core and libraries. Any modifications to the core and libraries must be released under the LGPL.
The source code for the Arduino environment is covered by the GPL, which requires any modifications to be open-sourced under the same license. It does not prevent the sale of derivative software or its inclusion in commercial products.
In all cases, the exact requirements are determined by the applicable license. Additionally, see the previous question for information about the use of the name “Arduino”.
Assume I make some cool gadget using Arduino and have someone that wants to invest money to start up a company that manufactures and sells these gadgets.
Make the gadget, make it as open as possible, you will probably sell more than if you try to keep it closed, don't waste time boxing at shadows. Why do I say that? Two reasons firstly there is very little on this Earth that is truly new, secondly people will always be able to copy no matter how hard you try to avoid it.
I have a dehumidifier, it is quite clever. I could take it to bits, see how it is assembled and what components it uses. I don't need to look at the code that controls it because I can see how it responds to inputs. If I wanted to I could make my own, in fact without looking at the code I code make a better one (at least as far as the code is concerned, electronics is a mystery but hey if I can take to bits I can make one). In reality I don't bother making a new dehumidifier because the old one is fine at the price and its just not worth the hassle.
I have known people who can read and write programs in hex, simply ignoring assembler. So whilst people will not get back to your original high level source code, if the profit margin is high enough, the underlying algorithm can always be uncovered.
Look at it this way; you make your gadget, you protect it as hard as you can, you sell it. Somebody buys one and says hey this is really great I bet I could make one that does that better for half the price using an arduino (they don't even bother to go to the effort of trying to look at your code).
If you truly think you have something unique then look at patents.
If its done, not a single bug, not a single thing wrong and its ready to rock.....
I'd put the chip in and plan on the PCB FTDI lines so you can use pogo sticks and a jig to burn arduino bootloader to the chip and upload the code.
IF there is bugs port the code to another platform and sort the bugs so it is 100%. There are other platsforms that take C++ AFAIK
I was going to produce a product I prototyped on arduino. I was going to use the pogostick method and just give the chip (AVR 328) the bare bones of what it needed.
It added a bit more than other options on production cost (mainly time for the burning + code) but it would have saved me totally starting again. RRP margin would have still been there to make money.