Há algum tempo estava querendo testar o Arduino, pelo menos descobrir o que era e por que chamava tanto a atenção do pessoal.
Depois de descobrir do que se tratava, a vontade de testar passou um pouco, não comprei um arduino pronto, pois mesmo o preço não sendo muito alto lá fora, com os impostos de importação mais o frete acaba ficando um preço bem alto por uma placa tão simples.
Montagem
Decidi montar meu próprio arduino. Tinha um Atmega8 sobrando, uma placa padrão para montagem do circuito e o resto é regulador de tensão, alguns resistores e um max232 para comunicação serial (no arduino oficial usa apenas alguns transistores, mas eu prefiro soldar um max232 :). Ah, acrescentei um display LCD e algumas chaves que também tinha à disposição.

Componentes utilizados para montagem do Arduino.
Depois de algumas horas soldando, cortando fios, resoldando, mudando componentes de lugar, surge o Arduino:

A parte "bonita".
E o trabalho sujo:

A parte feia.
As fotos ficaram bem ruins, estava sem câmera e utilizei a do celular. Mas dá pra ter uma idéia do trabalho.
Problemas
Depois de montado, o primeiro problema. Eu não tinha um cristal de 16Mhz. No lugar dele, usei um de 12Mhz, mas o arquivo hex do bootloader não funcionaria. Tudo bem, só recompilar, certo? Errado!
Já tinha o avr-gcc instalado, tinha o código fonte, botei pra compilar e:
../../avr/bin/ld.exe: address 0x205e of ATmegaBOOT.elf section .text is not with
in region text
make: *** [ATmegaBOOT.elf] Error 1
Isto é, o arquivo bootloader ultrapassava a memória do arduino. Pesquisei em alguns fóruns e vi que era culpa da versão mais nova do gcc que gerava arquivos maiores. Resolvi utilizar o gcc que vem no arduino e descobri que era a mesma versão que eu tinha instalado.
Mais algumas pesquisas e resolvi mudando uma linha do Makefile. Onde tem:
OPTIMIZE = -Os
Substituí por:
OPTIMIZE = -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-ffunction-sections -fdata-sections -fno-split-wide-types -Wl,--relax \
-fno-inline-small-functions -mcall-prologues
Resolvido o problema, funcionou o bootloader e comecei a brincadeira, que contarei outra hora.
Conclusão
Confesso que tinha um certo preconceito contra o Arduino. Depois de mexer um pouco com ele, descobri que a brincadeira é bem divertida.
Uma coisa interessante no Arduino, é que as bibliotecas são escritas em C++, pelo menos as que dei uma olhada. Nos meus projetos microcontrolados, uso sempre C e, quando não tem outra saída, assembly. Usar orientação a objetos, mesmo que minimamente, parece interessante.