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:
Microcontrolador | ATmega328 |
Tensão de operação | 5V |
Tensão de entrada(recomendado) | 7-12V |
Tensão de entrada (limites) | 6-20V |
Pinos de I/O Digitais | 14 (dos quais 6 fornecem saída PWM) |
Pinos de entrada analógicos | 6 |
Corrente DC por pino de I/O | 40 mA |
Corrente DC Pino 3.3V | 50 mA |
Memória Flash | 32 KB (ATmega328) dos quais 0.5 KB são usados pelo bootloader |
SRAM | 2 KB (ATmega328) |
EEPROM | 1 KB (ATmega328) |
Velocidade do Clock | 16 MHz |
Arduino Duemilanove:
Microcontrolador | ATmega168 ou ATmega328 | ||
Tensão de operação | 5V | ||
| 7-12V | ||
Tensão de entrada (limites) | 6-20V | ||
Pinos de I/O Digitais | 14 (dos quais 6 fornecem saída PWM) | ||
Pinos de entrada analógicos | 6 | ||
Corrente DC por pino I/O | 40 mA | ||
Corrente DC pino 3.3V | 50 mA | ||
Memória Flash | 16 KB (ATmega168) ou 32 KB (ATmega328) dos quais 2 KB são usados pelo bootloader | ||
SRAM | 1 KB (ATmega168) ou 2 KB (ATmega328) | ||
EEPROM | 512 bytes (ATmega168) ou 1 KB (ATmega328) | ||
Velocidade do Clock | 16 MHz |
Arduino Leonardo:
Microcontrolador | ATmega32u4 | ||
Tensão de operação | 5V | ||
| 7-12V | ||
Tensão de entrada (limites) | 6-20V | ||
Pinos de I/O digitais | 20 | ||
Canais PWM | 7 | ||
Canais de entrada analógicos | 12 | ||
Corrente DC por pino I/O | 40 mA | ||
Corrente DC pino 3.3V | 50 mA | ||
Memória Flash | 32 KB (ATmega32u4) dos quais 4 KB são usados pelo bootloader | ||
SRAM | 2.5 KB (ATmega32u4) | ||
EEPROM | 1 KB (ATmega32u4) | ||
Velocidade do Clock | 16 MHz |
Arduino Mega:
Microcontrolador | ATmega2560 | ||
Tensão de operação | 5V | ||
| 7-12V | ||
Tensão de entrada (limites) | 6-20V | ||
Pinos de I/O Digitais | 54 (dos quais 15 fornecem saída PWM) | ||
Pinos de entrada analógicos | 16 | ||
Corrente DC por pino I/O | 40 mA | ||
Corrente DC pino 3.3V | 50 mA | ||
Memória Flash | 256 KB dos quais 8 KB são usados pelo bootloader | ||
SRAM | 8 KB | ||
EEPROM | 4 KB | ||
Velocidade do Clock | 16 MHz |
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