quarta-feira, 7 de março de 2012
quinta-feira, 2 de fevereiro de 2012
Imprimir Valor de Porta Analógica Através da Serial
Este exemplo mostra como você pode ler uma porta digital usando um potenciômetro. Um potenciômetro é um dispositivo mecânico simples, que permite variar a resistência quando o êmbolo é girado. Ao passar voltagem através do potenciômetro e através de uma porta analógica do seu Arduino, é possível medir a quantidade de resistência produzida pelo potenciômetro, como um valor análogo. Neste exemplo você monitorará o estado do seu potenciômetro após estabelecer comunicação Serial entre o Arduino e o PC.
Material Necessário
- Placa do Arduino
- Potenciômetro de 10K ohms
Circuito
Conecte os três fios do potenciômetro na sua placa do Arduino. O primeiro fio vai no GND (0V), o pino central na porta analógica zero (A0) e o terceiro pino do potenciômetro vai no VCC (5V).
Ao girar o êmbolo do potenciômetro, você altera a quantidade de resistência em um ou outro lado da trilha na qual o pino central está montado. Isto muda a voltagem no pino central. Quando a resistência entre o pino central e o lado conectado no 5V está perto de zero (e a resistência do outro lado está perto de 10k ohms), a voltagem no pino central fica perto dos 5V. Quando o cenário é invertido, a voltagem no pino central se aproxima dos 0 volts, ou GND. Esta voltagem é a voltagem analógica que você está lendo como entrada.
O Arduino possui um circuito interno chamado conversor analógico-digital que efetua a leitura da variação de voltagem e a converte em um número entre 0 e 1023. Quando o êmbolo é girado em um sentido, teremos 0 volts entrando na porta analógica e o valor convertido é 0. Quando o êmbolo é girado completamente para o outro lado, teremos 5 volts entrando na porta e o valor convertido é 1023. Entre esses valores, a função analogRead() retorna um número entre 0 e 1023 que é a quantidade proporcional de voltagem sendo aplicada a porta.
Esquema Elétrico
Código
No programa abaixo, a única coisa que você precisa configurar na função setup() é a comunicação Serial, na velocidade de 9600 bauds (bits de dados por segundo), entre o Arduino e o PC, utilizando o comando abaixo:
Serial.begin(9600); No laço principal do seu programa, na função loop() do seu código, você precisa estabelecer uma variável para armazenar o valor convertido da resistência do seu potenciômetro (que deve ser entre 0 e 1023, perfeito para o tipo int de variável).
int sensorValue = analogRead(A0); Finalmente, você precisa imprimir essa informação para seu console Serial, convertido em decimal (DEC). Você pode fazer isso com o comando Serial.println() na sua última linha de código:
Serial.println(sensorValue, DEC)Agora, quando você abrir o Monitor da Serial, no ambiente de desenvolvimento do Arduino (clicando no ícone exatamente ao lado do botão “Upload”, na barra de ferramentas), você deverá ver um fluxo constante de números entre 0-1023, correlacionados com a posição do êmbolo do potenciômetro. Ao girar o potenciômetro, esses números deverão refletir o valor convertido quase que instantaneamente.
/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor
This example code is in the public domain.
*/
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
}
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor
This example code is in the public domain.
*/
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
}
terça-feira, 31 de janeiro de 2012
segunda-feira, 16 de janeiro de 2012
Material de Apoio das Aulas do Curso Arduino 2011
Download do Material de Apoio
Abaixo, link para download das apresentações que utilizei durante as aulas do Curso Arduino, durante o ano de 2011.
http://www.seriallink.com.br/util/Curso_Arduino.zip
Os arquivos das Apresentações estão no formato "Curso Arduino - Aula XX.odp", onde XX representa o número da aula. A extensão ".odp" pode ser aberta com o BrOffice.
Abraços,
Renato Aloi
Abaixo, link para download das apresentações que utilizei durante as aulas do Curso Arduino, durante o ano de 2011.
http://www.seriallink.com.br/util/Curso_Arduino.zip
Os arquivos das Apresentações estão no formato "Curso Arduino - Aula XX.odp", onde XX representa o número da aula. A extensão ".odp" pode ser aberta com o BrOffice.
Abraços,
Renato Aloi
quinta-feira, 22 de dezembro de 2011
Laços While & For do Arduino
comando for
Descrição
O comando “for” é utilizado para repetir blocos de comandos inseridos entre chaves. Um contador incremental é normalmente utilizado para incrementar e finalizar o laço. O comando “for” é útil em qualquer tarefa repetitiva, e largamente utilizado em combinação com arrays para processar coleções de dados/portas.
O laço “for” é constituído de 3 partes:
for
(iniciação; condição; incremento) {//comando(s);} A iniciação (declaração da variável contadora) acontece primeiro e exatamente uma única vez. Cada vez que o laço “roda”, a condição é testada; se é verdadeira, o bloco de comandos e seu incremento é executado, então a condição é verificada novamente. Quando a condição se torna falsa, o laço termina.
Exemplo
// Esvanece um LED usando uma porta PWM int PWMpin = 10; // LED em série com resistor 470 ohm na porta 10 void setup() { // nada a ser feito no setup } void loop() { for (int i=0; i <= 255; i++){ analogWrite(PWMpin, i); delay(10); } }
Dicas de Codificação
O laço “for” do C é muito mais flexível que outros laços encontrados em outras linguagens de programação, incluindo BASIC. Qualquer uma das 3 partes (ou todas elas) podem ser omitidas, embora os pontos e vírgulas são obrigatórios. Tanto que os comandos de iniciação, condição e incremento podem ser qualquer comando válido em C, mesmo que as variáveis não tenham relação entre si. E é permitido o uso de qualquer tipo de variável, mesmo float. Estes tipos não usuais para comandos “for” devem fornecer soluções para alguns problemas raros de programação.
Por exemplo, utilizando multiplicação na parte incremental gerará uma progressão logarítimica:
for(int x = 2; x < 100; x = x * 1.5){ println(x); }
Resultado: 2,3,4,6,9,13,19,28,42,63,94
Outro exemplo, esvanece um LED ao ligar e desligar com esse laço “for”
void loop() { int x = 1; for (int i = 0; i > -1; i = i + x){ analogWrite(PWMpin, i); if (i == 255) x = -1; // muda a direção no pico delay(10); } }
laço while
Descrição
Laços “while” vão executar sequencialmente e para sempre, até que a expressão dentro dos parênteses () se torne falsa. Algum evento deve mudar o estado da variável testada, ou então o laço “while” não terminará nunca. Este evento pode estar em seu código, como uma variável incremental, ou uma condição externa, como um sensor de teste, um botão etc.
Sintaxe
while(expressão){ // comando(s) }
Parametros
expressão - um (boolean) comando C que retorne verdadeiro ou falso (true ou false)
Exemplo
var = 0; while(var < 200){ // faça alguma coisa repetitiva por 200 vezes var++; }
Traduzido do Original em Inglês por Renato Aloi
domingo, 11 de dezembro de 2011
Strings no Arduino
Descrição
Strings de texto podem ser representadas de duas formas. Você pode utilizar o tipo de variável “String”, que é parte do Arduino desde a versão 0019, ou você pode fazer uma string a partir de um array de variáveis do tipo “char” e adicionar a terminação nula.
Este artigo descreve o último método. Para maiores detalhes sobre o objeto String, que permite maiores funcionalidades (e também maior custo de memória), veja o artigo mais abaixo.
Exemplos
Todas as formas abaixo são declarações válidas de strings.
char Str1[15];
char Str2[8] = {'a','r','d','u','i','n','o'};
char Str3[8] = {'a','r','d','u','i','n','o','\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";Possibilidades para declaração de strings
- Declare um array de caracteres (char) sem iniciá-lo, como feito em Str1
- Declare um array de caracteres (char), com um caractere adicional, e o próprio compilador acrescentará o caractere de terminação nula, como feito em Str2
- Adicionar explicitamente o caractere nulo, como em Str3
- Inicie com uma constante de texto, contida entre aspas; o compilador vai definir o tamanho do array de caracteres automaticamente, calculando o tamanho da string mais o terminador nulo, conforme Str4
- Inicie um array com o tamanho declarado explicitamente e uma constante de texto entre aspas, vide: Str5
- Inicie um array, deixando espaço extra para strings com tamanhos maiores, conforme Str6
Terminação Nula
Geralmente, strings são terminadas com um caractere nulo, (código ASCII zero [0]). Isto permite que funções (como a Serial.print()) conhecerem onde termina o texto da string. Caso contrário, essas funções continuariam a ler bytes da memória que não fazem parte da string.
Isso significa que sua string precisa ter espaço suficiente para um ou mais caracteres além do texto que você deseja armazenar. É por isso que a variável Str2 e Str5 (acima) precisam de 8 caracteres, mesmo tendo a palavra “arduino” apenas 7 letras – a última posição é preenchida automaticamente com o caractere nulo. Str4 será automaticamente redimensionada para o tamanho de 8 caracteres, sendo uma posição para o nulo. Na variável Str3, nós declaramos explicitamente o tamanho e adicionamos o caractere nulo ('\0') por nossa conta.
Veja que é possível ter uma string sem o caractere final nulo (por exemplo, declarando a variável Str2 com 7 ao invés de 8 caracteres). Isso falhará na maioria das funções que esperam uma string para funcionar, portanto não faça isso intencionalmente! Se você perceber um comportamento diferente, como adição de caracteres estranhos na sua string, este pode ser o problema.
Aspas Simples ou Duplas?
Strings sempre são definidas escrevendo-se um texto contido entre aspas duplas (exemplo: "Abc"), e caracteres sempre são definidos escrevendo-se uma única letra (ou dígito, ou algum caractere da tabela ASCII), contido dentre aspas simples, ou apóstrofes (exemplo: 'A').
Quebrando strings longas
Você pode quebrar strings assim:
char myString[] = "Um texto que começa aqui" " e termina logo" " ali";
Array de Strings
Quando trabalhamos com uma grande quantidade de texto, em um projeto com display LCD, por exemplo, é muito comum fazer uso de um array de strings. Como as strings por si só são arrays de caracteres, um array de string nada mais é senão um array bi-dimensional de caracteres.
No código abaixo, o asterisco após o tipo de variável (“char*”), indica que esta variável é um array de ponteiros. Todos os arrays na realidade são ponteiros de memória, então este é o requisito para fazer arrays de arrays. O estudo de ponteiros é uma das partes mais difíceis para um iniciante, mas é necessário entender ponteiros em detalhes, para usá-los de forma efetiva aqui.
Exemplo
char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};
void setup(){
Serial.begin(9600);
}
void loop(){
for (int i = 0; i < 6; i++){
Serial.println(myStrings[i]);
delay(500);
}
}Objeto String
Descrição
A classe String, parte do Arduino desde a versão 0019, nos permite utilizar e manipular strings de texto de uma maneira mais completa aos arrays de caracteres. Você pode concatenar textos, adicionar trechos de texto, pesquisar expressões no texto e substituir trechos, e muito mais. Consome mais memória que um simples array de caracteres, mas é muito mais útil.
Para referência, arrays de caracteres são declarados como “string” com o “s” minúsculo, e instâncias da classe String são declaradas como “String”, com a letra “S” maiúscula. Repare também que strings constantes, especificadas por aspas duplas, são tratadas como arrays de caracteres, e não como instâncias da classe String.
Funções
Operadores
Exemplos
Tradução por Renato Aloi
Original em Inglês -- http://www.arduino.cc/en/Reference/String
Original em Inglês -- http://www.arduino.cc/en/Reference/String
sábado, 3 de dezembro de 2011
Material de Apoio do Curso Arduino (Aulas 7-8)
Pessoal,
Segue esquema elétrico da solução apresentada nas aulas 7 e 8 do Curso Arduino:
Abaixo temos o código da montagem feita na aula 8, para acionamento de um motor, a partir de um botão:
byte BOTAO = 0;
byte MOTOR = 0;
byte PORTA_B = 10;
byte PORTA_M = 8;
void setup()
{
pinMode(PORTA_B, INPUT);
digitalWrite(PORTA_B, 1); // Liga PullUp!
pinMode(PORTA_M, OUTPUT);
digitalWrite(PORTA_M, 0); // Motor Deslig.
}
void loop()
{
BOTAO = digitalRead(PORTA_B);
if (BOTAO == 0)
{
MOTOR = !MOTOR;
digitalWrite(PORTA_M, MOTOR);
delay(500);
}
delay(1000);
}
Abraços,
Renato Aloi
Assinar:
Postagens (Atom)
