sábado, 16 de agosto de 2014

Complexidade dos projetos e adequação

Olá pessoal,

Hoje não vamos abordar um shield ou um componente mas vamos falar de assunto importante para os desenvolvedores da plataforma Arduino: a complexidade dos projetos e sua adequação.
Nestes posts até agora percebemos que à medida que vamos adicionando funcionalidades ao projeto a sua complexidade aumenta e é importante elencarmos os fatores que devemos estar atentos para que o projeto continue funcionando e haja a devida adequação de software (código) ao hardware e vice-versa.
Dentro da minha experiência na plataforma devemos estar atentos aos seguintes fatores:

1) Aumento do tamanho dos sketches

    A medida que o projeto aumenta no uso de shields, componentes e bibliotecas é necessário cada vez mais espaço para armanezar os sketches. Os sketches são armazenados na Flash Memory. Fiz uma relação abaixo das versões do Arduino que utilizei nos meus testes e projetos:

Arduino UNO:

.


MicrocontroladorATmega328
Tensão de operação5V
Tensão de entrada(recomendado)7-12V
Tensão de entrada (limites)6-20V
Pinos de I/O Digitais14 (dos quais 6 fornecem saída PWM)
Pinos de entrada analógicos6
Corrente DC por pino de I/O 40 mA
Corrente DC Pino 3.3V50 mA
Memória Flash 32 KB (ATmega328) dos quais 0.5 KB são usados pelo bootloader
SRAM2 KB (ATmega328)
EEPROM1 KB (ATmega328)
Velocidade do Clock16 MHz

Arduino Duemilanove:



MicrocontroladorATmega168 ou ATmega328
Tensão de operação5V
Tensão de entrada(recomendado)
7-12V
Tensão de entrada (limites)6-20V
Pinos de I/O Digitais14 (dos quais 6 fornecem saída PWM)
Pinos de entrada analógicos6
Corrente DC por pino I/O 40 mA
Corrente DC pino 3.3V50 mA
Memória Flash16 KB (ATmega168) ou 32 KB (ATmega328) dos quais 2 KB são usados pelo bootloader
SRAM1 KB (ATmega168) ou 2 KB (ATmega328)
EEPROM512 bytes (ATmega168) ou 1 KB (ATmega328)
Velocidade do Clock16 MHz

Arduino Leonardo:


MicrocontroladorATmega32u4
Tensão de operação5V
Tensão de entrada(recomendado)
7-12V
Tensão de entrada (limites)6-20V
Pinos de I/O digitais20
Canais PWM7
Canais de entrada analógicos12
Corrente DC por pino I/O40 mA
Corrente DC pino 3.3V50 mA
Memória Flash32 KB (ATmega32u4) dos quais 4 KB são usados pelo bootloader
SRAM2.5 KB (ATmega32u4)
EEPROM1 KB (ATmega32u4)
Velocidade do Clock 16 MHz

Arduino Mega:


MicrocontroladorATmega2560
Tensão de operação5V
Tensão de entrada(recomendado)
7-12V
Tensão de entrada (limites)6-20V
Pinos de I/O Digitais54 (dos quais 15 fornecem saída PWM)
Pinos de entrada analógicos16
Corrente DC por pino I/O 40 mA
Corrente DC pino 3.3V50 mA
Memória Flash256 KB dos quais 8 KB são usados pelo bootloader
SRAM8 KB
EEPROM4 KB
Velocidade do Clock16 MHz
É importante adequar os sketches para utilizar menos código quando você tem um Arduino com menor espaço de armazenamento. Siga algumas dessas dicas:
a) Verifique se há alguma biblioteca desnecessária ao projeto e se for comente-a.
b) Faça debug com a Serial somente nos trechos de código que é realmente necessário checar. Debug na serial consome espaço de código.
c) Se não há mais o que otimizar no código considere a possibilidade de adquirir um outro Arduino com mais espaço para os sketches (Arduino Mega por exemplo).

2) Aumento do uso de variáveis de memória

    O uso de variáveis de memória e estruturas consomem SRAM e dependendo do Arduino podem fazer com que haja reinicializações por conta de falta de memória SRAM . Tive uma experiência em projeto em que o Arduino simplesmente reinicializava se fosse utilizando uma variável float! Siga algumas dicas para usar menos memória:
a) Defina o tamanho das arrays char no tamanho exato.
b) Evitar usar variáveis float quando os valores a serem armazenados possam ser armazenados em variáveis int.
c) Se não há mais o que otimizar no uso de variáveis considere a possibilidade de adquirir um outro Arduino com mais SRAM (Arduino Mega por exemplo). Você pode adquirir também o Arduino Leonardo porém ele tem menos Flash Memory.


3) Aumento do uso de componentes e sensores

    Se o projeto demanda por mais pinos considere utilizar um Arduino com maior quantidade de pinos de entrada/saída. Deve-se ficar atento em relação à alimentação do Arduino quando utilizar muitos componentes nas portas digitais. Relata-se bastante problemas com relês que de alguma forma fazem o Arduino reiniciar.


4) Uso de várias bibliotecas e shields.

    O uso de várias bibliotecas podem aumentar o código além de aumentar a probabilidade de conflito de componentes ou shields por utilizarem os mesmos pinos. Os shields geralmente são empilháveis porém podem trazer algumas dificuldades para conexão.
Dica: ao trabalhar com display LCD prefira os que são I2C pois eles necessitam somente de dois pinos analógicos.

5) Módulos que necessitam de mais corrente.

   Shields GSM e servos podem necessitar de mais corrente que o fornecido pelo Arduino e necessitam de alimentação externa e podem influenciar no funcionamento destes. Fiquem atentos nestes detalhes!

Espero que essas dicas sejam bastante úteis! Se você tem experiências desse tipo relate-nos.

Até a próxima!!

Nenhum comentário:

Postar um comentário