One of the best things about the Arduino platform is that it is open source, this is a big part of why it is so popular. The Arduino platform is quite possibly the most documented DIY project in history, you can find a seemingly infinite number of tutorials and articles online covering every step of a project. Documenting our work is important so that we can contribute to the growing pool of knowledge. By documentation I mean more than simply writing things down. I want to talk about some different tools and resources that you can use for documenting your projects and passing what you have learned on to others, and doing so in a manner that does not feel like a disruption to your work. The code that you write for the Arduino needs to be well documented.
I feel that the most important thing is to write self-documenting code. By that I mean code that has intelligently named variables and functions, so that someone reading the code can infer what is going on simply by reading the code itself. Of course comments are necessary and very helpful too, and good commenting practice is important. If you get to making large projects, then you might even want to consider an automated documentation system like Doxygen has been around for a very long time. Next I should mention documentation hardware, the easiest way to do this is simply to have pictures and videos of your project, but beyond that there are some tools that are very useful for documenting hardware, such as Fritzing.
If you want to make a circuit diagram you can also use software like Fritzing, and if you are making your own circuit boards, this is definitely the way to go. I found a different, but very simple solution that I actually rather enjoy doing, and that is to take some graph paper and draw the circuit myself with a pen, then scan it into my computer as an image, that might sound very clunky and old -fashioned, but I find it to be very efficient. It seems that no matter how hard you try there is always some small symbol that you just can not quite get right with software, but this is very easy when using pen and paper. I find it to be the most enjoyable part documenting a project.
If you're writing a lot of programs you might also want to consider using revision control software, there are many exceptional revision control systems available for free. If you are a single developer, then you may find that the very old RCS (revision control system) has everything you need and often times the simplest solution is the best solution, and it does not get much simpler that RCS. I think a better idea is to use something like Git which although it's intended for large distributed projects, works just as well for individuals if you're willing to get past the initial learning curve. Git has a great advantage that it works seamlessly with Github. Github is a hugely popular source code hosting service that offers unlimited free public repositories, and also offers private repositories for a fee. This way your tools for enabling productive work merge with tools for sharing with others.
If someone wants a copy of your code, you just give them the URL of your Git repository. You can also go with SourceForge which is the original open source project hosting site that existed long before Git was popular. Once you've finished a project, have well-documented source code, and a freely available place to put your source code, you should include your other documentation, with it, eg circuit diagrams.
There are other ideas to consider, one is to start your own blog, not only is it a great way for you to share information but it's also a way you can earn some income with ads or links. It is unlawful that you will make a lot of money, but makes your work seem a little more enjoyable and a little more worthwhile. Other sites like Instructables or Squidoo are great too. Also consider submitting your work to blogs or social bookmarking sites like reddit.com
Source by Danny Franke