Tenho visto algumas coisas bizarras relativas a programacao do LM35 na IDE do Arduino. Entao, resolvi apresentar um codigo mais elegantes aos robistas. O primeiro ponto e a tensao de referencia que deve ser empregada pelo conversor AD do ATmega328 (o microcontrolador do Arduino), que deve ser ajustada para 1,1V e nao 5V como visto por ai. Melhorando a resolucao da conversao significativamente. O segundo ponto e a equacao de transformacao que deve converter o numero digital puro do AD para o valor de temperatura, utilizar ponto flutuante e deveras pessimo em termos de desempenho e consumo de memoria. Os detalhes tecnicos podem ser encontrados no meu livro AVR e Arduino: Tecnicas de Projeto, Secao 19.4, para aqueles que apenas gostariam de usar o codigo, segue comentado. //LEITURA DE TEMPERATURA COM O LM35//sensor no pino A4unsigned int valor_temp=0;void setup(){ Serial.begin(9600); //definicao da tensao de final de escala para a conversao (1.1V) analogReference(INTERNAL); }void loop(){ //equacao de conversao otimizada valor_temp = analogRead(A4) + analogRead(A4)*19/256; Serial.print("Temperatura = "); Serial.print(valor_temp/10); Serial.print("."); Serial.print(valor_temp%10); Serial.write(186); Serial.println("C"); delay(1000);}/* O LM35 apresenta uma saida de 10mV/C. O valor de leitura do AD e dado por ADC = Vin*1024/Vref, como Vref = 1,1V, para converter o valor do AD para graus Celsius, e necessario multiplicar o valor ADC por 1100/1024 (considerando uma casa decimal antes da virgula). Utilizando a simplificacao matematica e mantendo a variavel temperatura com 16 bits, resulta: 1100/1024 = 1 + 19/256 */ OBSERVACAO: not for Dummies! Para aplicacoes relativamente simples um microcontrolado de 8 bits e suficiente. Entretanto, quando se necessita mais desempenho, memoria e perifericos, e preciso um microcontrolador mais turbinado e com motor mais potente. Minha escolha foi o Arduino Due devido aos inumeros Shields disponiveis e por poder ser programado no Atmel Studio, incluindo o FreeRTOS e todas as ferramentas necessarias para um desenvolvimento profissional de firmware. Comecei a programacao com alguns programas basicos para entender a complexidade dos registradores de configuracao do ATSAM3X. O datasheet da Atmel e algo terrivel, pesadelo para estudar e compreender (a Atmel deveria evitar que estagiarios escrevessem datasheets!). Assim, resolvi disponibilizar os codigos desenvolvidos e materiais de suporte para ajudar os iniciantes. Bueno, vamos ao que importa: PRINCIPAIS CARACTERISTICAS DO ARDUINO DUEPinagem compativel com o Arduino Uno (Shields compativeis), cuidado deve ser tomado pois o Due trabalha com 3.3V (5V pode danifica-lo permanentemente).Entrada de alimentacao externa 9 VDC.Gravacao atraves de conversor serial-usb com bootloader (similar ao Uno).Conector SPI.Conector JTAG para programacao e depuracao.Botao de reset.Botao para apagamento da memoria do microcontrolador.Possui um microcontrolador ATSAM3X8E.54 pinos de I/O.12 entradas analogicas (ADC).4 UARTs.1 USB OTG.2 saidas DAC. PINAGEM aqui. (obrigado Rob Gray, te pago uma gelada quando te encontrar) PRINCIPAIS CARACTERISTICAS DO ATSAM3X8EProcessador de 32 bits (ARM - Cortex-M3).512 kB de memoria Flash.96 kB de memoria RAM.84 MHz de frequencia de operacao maxima.Oscilador interno (PLL) para geracao precisa de sinais de frequencia para os seu trabalho.Controlador DMA9 Timers de 32 bits com modos de comparacao, captura e PWM.RTCUSB 2.0 On To Go4 UARTs2 I2C2 CAN1 Ethernet MAC10/100 com DMA dedicado.16 canais AD de 12 bits de 1 Msps (com