Este texto tem o objetivo de alertar aos pais e alunos sobre os riscos de se trabalhar com eletricidade sem o conhecimento de como trabalhar com segurana e desmistificar alguns conceitos antes de pensarmos em fazer qualquer coisa envolvendo eletricidade. Introduo: Este Blog tem o intuito de compartilhar com alunos, educadores, tcnicos e engenheiros o meu hobby, a robtica, alm de compartilhar o conhecimento da forma mais didtica possvel com o uso de kits vendidos no mercado, sempre que possvel. Porm, a programao de kits eletrnicos que so ligados diretamente a computadores costumam ter partes de circuitos energizados e totalmente expostos, o que pode por em risco a sade, ou at mesmo, a vida do aluno ou educador. Por isto, este ser o primeiro mdulo de todos e deve ser lido por todos que pretendem copiar ou utilizar qualquer contedo escrito ou publicado por mim. Recomendaes: A primeira coisa que o leitor deve ter em mente que todo material pode ser condutor ou isolante, dependendo apenas da tenso eltrica aplicada sobre o mesmo, por isto, muito bom ter cuidado ao trabalhar com eletricidade. Eu recomendo que o leitor sempre use calado com solado de borracha, que no seja uma sandlia com dedos aparecendo, esteja mido ou molhado. O leve detalhe dos dedos aparecendo a posio dos ps, pois os dedos vo tocar o cho e vai fazer o mesmo efeito de estar descalo. Quanto a gua, ela contem sais minerais que a tornam um condutor eltrico, potencializando o efeito do choque. A curiosidade o fato da gua pura ser isolante. Mas, quando eu digo gua pura, eu me refiro a uma gua que s pode ser encontrada em laboratrios qumicos contendo apenas molculas de gua, sem mais nenhum tipo de material diludo. No me refiro a gua pura de beber. Cadeiras com ps de metal que possam entrar em contato com o corpo tambm no so recomendadas e o mesmo se aplica aos ps da mesa se forem metlicos ou de algum outro material no isolante. Animais de estimao como ces e gatos tambm so excelentes para estragar um bom isolamento quando tocam no dono, principalmente com o focinho molhado. Choques Eltricos: Ao contrrio do que muita gente pensa, o que mata no a tenso eltrica, a corrente que passa pelo corpo, onde o risco pode variar de acordo com o caminho percorrido. Imagine que um choque gerado por uma corrente que passa do p direito para o p esquerdo menos perigoso do que um choque onde a corrente passa da mo esquerda para os ps, pois o corao vai ser afetado. O mesmo se aplica a choques onde a corrente passa pela cabea. Mas, de qualquer forma, sempre h o risco causado pela eletrlise do sangue ou tecidos durante um choque. Tenses Eltricas: A Maioria dos circuitos apresentados funcionaro com tenses entre 3.3V a 24V e no tero perigo ao serem tocados. A maior ressalva que eu fao para quando o circuito estiver ligado ao computador e o mesmo estiver ligado a tomada eltrica, pois, devido a uma questo de custo e tamanho, muitas fontes de computador, principalmente desktop, os no note books, tm um transformador do tipo auto-transformador, que no um transformador isolante. Por isto, muitos computadores do choque na lateral. As fontes de note book tambm no so seguras, pois so do tipo chaveada e tm ligaes diretas com a tomada eltrica. Eu recomendo que o leitor esteja devidamente isolado na hora de ligar o circuito no computador, caso este contenha partes eletrizadas expostas, e se possvel, com o note book ligado apenas na bateria, reduzindo drasticamente o risco de acidentes. Mas ateno, no adianta desligar o note book da tomada e deixar o mesmo ligado a outros circuitos ligados a tomada, como monitores, televisores, impressora ou antenas de TV compartilhadas com mais de um aparelho. Para desligar o computador da tomada e reduzir o risco de choques se deve desligar toda e qualquer conexo fsica com outros aparelhos. Pequenos Choques e Eletricidade Esttica: comum alguns computadores darem pequenos choques que costumam ser ignorados por montadores mais experientes, mas, este um grande erro, pois, mesmo o choque no sendo perigoso, a tenso mais elevada do que os circuitos so feitos para suportar o que faz o circuito queimar durante o choque, alm de poder queimar a porta USB ou a placa me inteira. O mesmo se aplica a choques de eletricidade esttica, muito comuns em regies com baixa umidade do ar, fazendo necessrio o uso da pulseira de descarga esttica e mais algumas medidas para equilibrar a diferena de potencial eltrico na bancada. Apenas lembre-se que pulseiras de descarga esttica costumam ser uma ligao direta ao aterramento do laboratrio potencializando o risco de choques eltricos. Uma curiosidade tomar cuidado com a espuma que vem as vezes com os circuitos integrados ou placas eletrnicas. As espumas so condutoras e tm a finalidade de igualar a diferena de potencial eltrico protegendo o equipamento de descarga eletrosttica. Mas, como estas espumas so condutoras, NUNCA use elas de apoio para circuitos ligados, pois elas conduzem e podem queimar o circuito. Partes Mveis: Muitos dos dispositivos apresentados neste Blog contero partes mveis que podero ser acionadas assim que energizadas, por isto sempre bom tomar cuidado para no se machucar, principalmente com dedos e olhos muito prximos. Concluso: Embora o texto torne a eletricidade meio assustadora, ela no apresenta riscos a sade quando mesma tratada com o devido respeito as normas de segurana, sendo o maior risco de todos causado pela cultura do risco, onde pessoas costumam dizer no vai acontecer nada no! e coisas do tipo. Tambm lembro a pais e educadores que no se deve deixar crianas mexerem em circuitos mecnicos, eltricos ou eletrnicos sem a devida superviso.
Ardulno - lnLroduo WRI TT E N BY : KEMP E R - AUG- 2 5- 1 1
Mdulo: Arduino Aula: Arduino Bsico I Ttulo: Introduo A forma mais fcil e barata de adicionar capacidade de processamento a nossos robs utilizar uma placa Arduino baseada nos C AVR da Atmel. Introduo: O Arduino um projeto italiano feito para facilitar o acesso a um hardware de baixo custo, totalmente aberto e documentado, permitindo a hobbistas, tcnicos, e at mesmo, artistas criarem hardware para as suas necessidades. A sua programao baseada em Wiring, um framework feito em C, porm, com algumas caractersticas prprias que sero descritas aqui, juntamente com todo o conhecimento de hardware necessrio. Conceitos Bsicos: Porm, antes de usar a placa Arduino, temos que aprender alguns conceitos bsicos de eletrnica digital, tais como: Microcontrolador ( C ) e Microprocessador ( P ): O P a unidade principal de todos os computadores modernos, e ele quem o responsvel por realizar clculos, operaes lgicas e executar os comandos do cdigo fonte para uma tomada de deciso correta. O primeiro P da histria foi o Intel 4040, um P de 4 bits extremamente revolucionrio para a poca. Ele foi o precursor da revoluo digital e gerou muitos dos padres que usamos hoje em dia. O mais interessante foi o fato dele permitir a reduo e flexibilizao das placas de circuito, pois, antes do primeiro P, os circuitos eram feitos de forma especfica para atender uma necessidade, no permitindo alteraes caso houvesse alguma necessidade nova. Porm, o Intel 4040 e todos os P consecutivos necessitavam de componentes externos para poder funcionar, tais como memria para o cdigo fonte, memria para arquivar os dados temporrios, expanso de barrabento para aumentar a quantidade de pinos disponveis e controle de barramento, responsvel por gernciar o fluxo de dados entre o P e os perifricos necessrios para o seu funcionamento. A vantagem do P era o fato dele ser muito flexvel e poder ser expandido de acordo com a necessidade do circuito, porm, o excesso de perifricos externos necessrios para o seu funcionamento tornavam o circuito caro e complexo. Por isto, logo em seguida surgiu os primeiros C, um circuito similar ao P, porm, com todos os perifricos necessrios para o funcionamento contidos no prprio circuito integrado. A grande vantagem do C foi o fato dele encapsular todos os perifricos necessrios para o funcionamento de P em um nico circuito integrado. A desvantagem, foi o fato de no valer a pena gastar dinheiro para expandir suas capacidades, sendo melhor escolher um modelo de C mais complexo, que no necessite expanso para a aplicao em questo. Byte e bit: Os primeiros computadores eltricos da histria eram analgicos e se baseavam em valores de tenso para representar dados. Porm, esta no uma abordagem segura e os circuitos ficam muito complexos e caros, por isto, em seguida foram criados os computadores digitais, com a capacidade de processar apenas dois valores de tenso, representando uma parte do circuito ligada ou desligada, ou 1 e 0 respectivamente. Com esta abordagem, os circuitos passaram a ser capazes de processar apenas nmeros em binrio, base 2, onde os nmeros s podem ser representados por 0 e 1. Porm, esta uma base numrica na qual no somos acostumados a trabalhar, e nos fora a agrupar os dgitos em grupos de 8, onde a menor unidade de todas um bit e o agrupamento dos bits em grupos de 8 chamado de byte. Embora parea estranha, a base 2 no funciona de forma diferente da base 10, e no final, tudo se baseia na teoria bsica dos nmeros. Exemplo: Na base 10, os nmeros vo de 0 a 9, e aps o ltimo dgito necessitamos adicionar um dgito mais significativo e comear a contagem do dgito menos significativo novamente, ou seja, 10, 11, 12 e assim por diante. Na base 2, o que muda o fato de haverem apenas dois dgitos, 0 e 1, ou seja, aps o 1, temos que adicionar mais um dgito significativo, assim a contagem fica, 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111 e assim por diante. Memria RAM: Os P e C necessitam de memria para arquivar dados temporrios, e a memria deve permitir o acesso de qualquer dado a qualquer momento, por isto, em ingls ela chamada de Random Access Memory, ou memria de acesso aleatrio. Esta um tipo de memria feita para receber os dados do programa em tempo de execuo e no tem a capacidade de manter os dados quando a alimentao do circuito desligada. O interessante neste tipo de memria so as variaes de capacidade. Enquanto nos P feitos para executar programas muito complexos, elas so medidas em GB, nos C, feitos para processar cdigos muito especficos, elas tem a capacidade medida em bytes ou kilobytes, mas, no se espante, para programas que no tm interface grfica, esta capacidade extremamente eficiente. Memria ROM: Os primeiros computadores tinham uma memria fixa para arquivar o programa e a tecnologia usada na poca s permitir a gravao uma nica vez, tornando os computadores muito pouco flexveis, pois, para se rodar um programa novo era necessrio remover a memria fisicamente e colocar outra no lugar. Esta era uma memria usada apenas para arquivar o programa, por isto, ela era apenas para leitura e era chamada de Read Only Memory em ingls. Com o passar do tempo, este tipo de memria ganhou novas capacidades e passaram a permitir a escrita dos dados mais de uma vez e de forma muito simples, por isto, os C modernos como o AVR permite que a memria de cdigo seja apagada e escrita novamente durante a execuo do cdigo. Vetores de Interrupes: Vetor de Interrupo uma caracterstica comum a todos os C e P, onde o cdigo em execuo pode ser interrompido a qualquer momento para executar uma outra parte especfica, sub-rotina, em decorrncia de um evento interno ou externo. Imagine a sub-rotina como sendo a capacidade do C de reagir a um evento qualquer, como a ativao de um sensor, onde o cdigo em execuo interrompido, a sub-rotina executada, e em seguida o cdigo original continua como se nada tivesse acontecido. Timers / Contadores: Os timers so circuitos derivados da eletrnica digital e tem a capacidade de interromper o programa a intervalos regulares ou sempre que a contagem de um evento chegar a um determinado valor. Na prtica, eles so usados para controlar a velocidade das portas seriais ou monitorar eventos a intervalos regulares. Sadas PWM: O funcionamento e a utilidade do PWM foi descrito em uma aula de robtica bsica e o C tem a capacidade de gerar o PWM de forma automtica, necessitando apenas que se passe os valores. Porta de comunicao serial: Uma porta serial tem a vantagem de comunicar dados com o uso mnimo de pinos do circuito e vo ser muito utilizadas durante todas as montagens. O que muda, de acordo com o tipo de porta escolhida, o protocolo usado, porm, isto ser visto em detalhes mais adiante. O que todas elas tm em comum o fato do dado fluir bit a bit, o que requer um tempo maior de comunicao para os bytes passarem, porm, elas facilitam a criao da placa de circuito impresso. Portas de comunicao paralela: A vantagem da aporta de comunicao paralela o fato dos bytes flurem de uma nica vez, o que possibilita o ganho de tempo, mas, ela complica muito a construo da placa de circuito impresso devido ao acesso de trilhas necessrias. ALU: A Unidade Lgica e Aritmtica tem a capacidade de processar nmeros e operaes lgicas simples.No caso dos C de 8bits, para se somar um nmero tipo 2011 + 1, so necessrias vrias operaes, pois, 8bits permitem gerar nmeros entre 0 e 255, ou 2. O Arduino: Na verdade, o Arduino nada mais do que uma placa de circuito impresso feita com um C AVR e todos os circuitos necessrios para fazer o C funcionar da forma mais prtica e eficiente possvel sem elevar o custo final do circuito alm do necessrio. Uma grande vantagem do uso do Arduino o fato do site oficial conter uma srie de cdigos prontos e testados, facilitando muito a criao do circuito final. Outra grande vantagem o fato do circuito ser testado e estvel, coisa que nem sempre acontece com circuitos caseiros. A programao tambm bastante simples, baseada em C / C++, porm, de uma forma to simples, devido a grande quantidade de cdigo existente, que para se gerar um medidor de distncia com ultra som, eu necessitei apenas de 3 linhas de cdigo. Concluso: O Arduino uma ferramenta bastante simples e eficiente de se trabalhar, porm, sempre bom ter uma boa base em eletrnica e eletrnica digital para se poder trabalhar de forma mais eficiente e econmica possvel.
Arduino Instalao WRI TTEN BY: KEMPER - SEP 02 11
Mdulo: Arduino Aula: Arduino Bsico I Ttulo: Instalao Continuando a aula anterior, vamos aprender a instalar o ambiente de desenvolvimento Arduino e fazer o nosso primeiro programa. Download: Como o Arduino uma plataforma aberta, a primeira coisa a se fazer entrar no site do Arduino e baixar a ltima verso do compilador, de forma totalmente gratuita. No Windows: Para os usurios Windows, h um arquivo tipo ZIP que deve ser baixado e descompactado. Aps isto, deve ser criada uma pasta de nome arduino-0022, onde 0022 a verso do compilador. Guarde esta pasta em algum local de sua escolha e pronto, tudo o que voc necessita para programar o Arduino est dentro dessa pasta. Nela voc encontrar algumas pastas e arquivos tais como: arduino.exe Executvel do compilador; examples Uma srie de exemplos de cdigo; hardware Documentao e cdigo fonte dos bootloades; libraries Biblioteca contendo todas as classes prontas para uso, tais como sensores e shields; reference Documentao de referncia do Arduino em ingls. No Mac Os: Basta baixar o arquivo tipo DMG e em seguida, arrastar o executvel do compilador para a pasta de Aplicativos e depois instalar o driver da porta USB que vem dentro do mesmo pacote. A grande dica a seguinte, como o Mac Os mais organizado do que o windows, abra a pasta de Aplicativos e procure pelo executvel do compilador. Em seguida, clique com o boto secundrio do mouse e v at Mostrar Contedo do Pacote. Ele deve abrir uma nova janela e dentro dela deve haver uma pasta de nome Contents, abra a pasta e v para Resources e em seguida Java. Dentro dela esto contidas as mesmas pastas do Windows com a mesma funcionalidade. Instalado novas classes na Biblioteca: A funcionalidade da biblioteca arquivar cdigos prontos de forma a no se necessitar rescrever o cdigo sempre que necessrio, alm de ser ela quem contem os cdigos responsveis por fazer funcionar os sensores e shields, por exemplo. Agora imagine que voc quer usar o sensor HC-SR04 descrito no artigo HC-SR04 Um sensor de Ultra Som barato. A primeira coisa a se fazer adicionar todas as classes necessrias na biblioteca. Para isto, baixe o arquivo contendo todas as classes e extraia o contedo em uma pasta qualquer. Dentro dela deve haver uma pasta com o nome da classe. No nosso caso Ultrasonic. Agora s mover a pasta Ultrasonic com todo o seu contedo para dentro da pasta libraries. Com isto, s reiniciar o compilador e pronto. A nova classe est pronta para uso. Usando o compilador: Compilador o programa responsvel por pegar um cdigo escrito em uma determinada linguagem e rescrever o mesmo cdigo em outra linguagem, com a mesma funo. No caso do Arduino, a funo do compilador rescrever um cdigo escrito em C / C++ e rescrever o cdigo em binrio Atmel AVR. As principais funes do compilador so: Play Faz o compilador analisar o cdigo e gerar o pacote binrio reconhecido pelo C; Stop Para o processo de analise e compilao do cdigo; New Cria um novo documento, em branco; Open Abre um documento contendo cdigo previamente escrito; Save Salva o documento aberto no computador; Upload Transfere para o C um pacote binrio previamente analisado com a funo Play; Serial Monitor Abre um terminal de comunicao serial fazendo a porta USB se comportar como uma porta serial ligada ao Arduino. No menu textual do compilador, tambm h as funes Tools -> Board, usada para escolher o modelo do Arduino em uso, e Tools -> Serial Port, usada para selecionar a porta serial usada na comunicao entre o Arduino e o computador.
Arduino Programao WRI TTEN BY: KEMPER - SEP 14 11
Mdulo: Arduino Aula: Arduino Bsico I Ttulo: Programao Esta aula tem o objetivo de introduzir os primeiros conceitos de programao para C usando C++ para Arduino e Wiring. Introduo: Com o advento da internet, o acesso a informao foi facilitado, porm, isto gerou uma srie de profissionais seguidores de receita de bolo, onde a falta de teoria tem se tornado um grande problema, pois, muitosprofissionais no tiveram que fazer fora para adquirir conhecimento e s fazem melar o mercado com mo de obra barata e sem qualidade, tirando o po de muitos profissionais srios que no tm conseguido pagar suas contas. Pensando nisso, estas aulas vo segui um carter mais terico e menos prtico, com todo o conhecimento necessrio para se formar um bom programador Arduino. Antes de tudo, perceba que programao de qualidade uma arte matemtica e vai muito alm de simplesmente fazer um cdigo funcionar. Cada plataforma tem suas caractersticas e necessidades, cabendo ao desenvolvedor a obrigao de conhecer a sua plataforma a fundo. No caso dos C, onde o tempo de execuo e utilizao de memria so essenciais, a arte da programao levada ao seu extremo, e em muitos casos, um bom programador pode reduzir os custos do equipamento final reduzindo a necessidade de perifricos e expanses externas. Para quem no tem prtica, a regra prtica da indstria diz que todo produto produzido em lotes de mil unidades cada, e por consequncia, cada dlar economizado geram mil dlares de lucro a mais por lote produzido. Bits e Bytes: Como falado anteriormente, todo C tem uma capacidade limitada de memria, tanto para dados, memria tipo RAM, quanto para cdigo, memria tipo ROM. Por isto, extremamente importante entender como os dados so arquivados na memria para se poder otimizar o espao de memria o mximo possvel. Mas, antes de falarmos de dados, temos que entender o conceito de nmero binrio, bit e byte, pois eles so uma consequncia natural de todo circuito digital, sendo o nmero binrio, base 2, a forma matemtica mais direta de se representar um dado digital, e a base 16, hexadecimal, a forma mais fcil para seres humanos compreenderem o dado representado. Como falado em aulas anteriores, todo circuito digital s capaz de processar dois valores, 0 e 1, ou circuito desligado e ligado, o que nos d um bit e sua consequncia direta, nmeros binrios, base 2, uma base onde o nmero decimal 5 ser representado por 101 e o nmero decimal 10 ser representado por 1010. Por sua vez, circuitos podem ter suas sadas agrupadas de acordo com a necessidade, por isto, foi convencionado que o agrupamento de 8 bits seria chamado de byte. Ou seja, bit a menor unidade capaz de representar uma informao digital, e byte o agrupamento dos bits em grupos de oito, no importando se a arquitetura feita para trabalhar com 8 bits, 16 bits, 32 bits ou mais, o byte sempre ter 8 bits. Bases Numricas: Lembrando a teoria bsica dos nmeros, a base 10 chamada assim por conter 10 algarismos, 0 a 9. Sendo 9 o maior valor representado nessa base, e como no h a possibilidade de se representar o prximo valor, o dgito menos significativo reiniciado ao seu menor valor e mais um dgito adicionado, permitindo-se assim representar nmeros maiores do que a base, como seria o caso de 10, 11, 12 e assim por diante. Agora imagine um nmero de trs dgitos, 512 por exemplo. Trs dgitos podem conter quaisquer valores entre 0 e 999, ou mil combinaes, no nosso caso temos: 5*10 2 + 1*10 1 + 2*10 0 =
= 5*100 + 1*10+2*1 = 500+10+2 = 512 Como d para perceber, a teoria bsica dos nmeros diz que um nmero formado da seguinte forma: valor * base dgito n-1 +valor * base dgito 2 +valor * base dgito 1 +valor * base dgito 0
Aplicando-se a mesma teoria a base 2, temos: 101b = 1*2 2 + 0*2 1 + 1*2 0
101b = 4 + 0 + 1 101b = 5 decimal. Porm, representar nmeros apenas com 0 e 1 no uma forma muito prtica para o crebro humano, por isto, muitas vezes ser usada a representao hexadecimal, base 16. A nica coisa que muda na base 16 o fato de haverem 16 algarismos para representar um nmero, onde so usados os nmeros 0 a 9 e as letras A a F. E como na base 10, os valores de 0 a 9, na base 16 os valores vo de 0 a 15, sendo o 10, 11, 12, 13, 14 e 15 representados pelas letras A, B, C, D, E e F respectivamente. Veja a tabela abaixo para entender: Decimal Binrio Hexadecimal 0 0000b 0h 1 0001b 1h 2 0010b 2h 3 0011b 3h 4 0100b 4h 5 0101b 5h 6 0110b 6h 7 0111b 7h 8 1000b 8h 9 1001b 9h 10 1010b Ah 11 1011b Bh 12 1100b Ch 13 1101b Dh 14 1110b Eh 15 1111b Fh
Como voc deve ter percebido, os nmeros so representados por sequncias de bits, e extremamente importante entender esta representao para se entender o espao ocupado na memria por um dado qualquer, pois, muitos dos C AVR usados no Arduino tm apenas 128 bytes de dados para a memria RAM, por isto, no prossiga se no entender esta parte do assunto. Entendendo a Memria e os Tipos: Antes de falarmos mais a fundo sobre os tipos, vamos entender melhor o conceito de dados digitais e ver como isto influencia a organizao da memria interna de um C. Imagine a seguinte linha de cdigo, no incio do programa: unsigned int contador = 255; Ela tem duas finalidades, a primeira dizer ao C para reservar dois bytes e escrever o valor 255, a segunda informar ao compilador para reconhecer o rtulo contador como sendo o endereo reservado ao grupo de bytes. Partindo do princpio que a memria interna estava totalmente vazia, o compilador deve reservar os dois primeiros endereos para a varivel do tipo unsigned int, como na representao da memria abaixo: bi t 7 bi t 6 bi t 5 bi t 4 bi t 3 bi t 2 bi t 1 bi t 0 Val . Dec . Val. Hex . Endere o Rtulo 1 1 1 1 1 1 1 1 255 FF 0 Contado r ( baixo ) 0 0 0 0 0 0 0 0 0 0 1 Contado r ( alto ) x x x x x x x x x x 2 [livre] x x x x x x x x x x 3 [livre]
Uma varivel do tipo unsigned int pode arquivar nmeros entre 0 e 65,535, ou, 0 e 2 16 - 1, e como 2 16 ocupam dois bytes, o compilador vai reservar este espao e o manter reservado durante toda a execuo do programa. Agora imagine o valor mximo da varivel contador como nunca ultrapassando o valor decimal 20, no nosso programa imaginrio. Como o menor espao de memria existente no Arduino um byte, 8 bits, e um byte pode arquivar valores entre 0 e 255, ou 0 e 2 8 -1, fica claro o fato de no necessitarmos escolher uma varivel do tipo unsigned int, por desperdiar um byte a mais, que nunca vai ser usado, alm da execuo do programa necessitar tratar dois bytes a cada interao da varivel contador, em vez de tratar um nico byte e ganhar tempo na execuo do programa. Variveis e Tipos Bsicos de Dados: Todo programa tem a necessidade de arquivar e alterar dados temporrios, chamados de variveis, durante a execuo do programa, cabendo ao programador informar ao compilador que necessita arquivar dados e qual o tipo de informao a ser arquivada em cada dado. Para isto, ele deve seguir a seguinte sintaxe: tipo_do_dado rtudo_do_dado; sendo opcional inicializar o valor desejado da seguinte forma: tipo_do_dado rtudo_do_dado = valor_do_dado; Exemplo: int contador; long tempo; unsigned int contador_ascendente = 0;
No exemplo acima, int representa uma varivel do tipo nmero inteiro contador representa o rtulo pelo qual o programador vai reconhecer a varivel. Na prtica, quando o programador declara uma varivel, ele est dizendo ao compilador para arquivar um espao em memria e aplicando um nome a este espao. As regras so: Os tipos possveis so predeterminados pelo framework Wiring e pela linguagem C; Aps a declarao de tipo deve haver um ou mais espaos separando o rtulo da varivel de seu tipo; O rtulo poder conter letras sem acento, nmeros e underline ( _ ); O rtulo deve comear obrigatoriamente por letra, no sendo aceito nmeros no primeiro caractere; Underline no primeiro caractere no acarretar erro de compilao, mas, variveis inicializadas com um ou dois undeline so reservados pelo compilador e podem dar erro no programa depois de compilado; Alguns compiladores aceitam at 64 caracteres e ignoram os caracteres excedentes; O compilador diferencia letras maisculas e minsculas, sendo contador diferente de Contador; Os principais tipos so: void: Este no necessariamente um tipo, mas, serve para indicar que uma funo no retornar nenhum valor; int: Ocupa dois bytes e aceita receber nmeros inteiros entre -32,768 e 32,767, ou -2 15 e 2 15 - 1. Sendo os bits 14 a 0 usados para arquivar o nmero. O bit 15, o mais significativo, usado para arquivar o sinal, 0 para positivo e 1 para negativo. Exemplo: int pino_do_led = 13; Sintaxe: int rtulo = valor [ opcional ]; Neste ponto, vale salientar a consequncia de se usar o bit mais significativo como sinal. Imagine uma varivel com o valor 32,767 decimal, ou 0111 1111 1111 1111b como no exemplo abaixo. int contador = 32767; contador = contador + 1;
Contador tem o binrio 0111 1111 1111 1111b ocupando dois bytes, porm, ao se somar 1, teremos o binrio 1000 0000 0000 0000b, ou -32,768 decimal. O mesmo ocorre para -32,768. Veja o exemplo: int contador = -32768; contador = variavel - 1;
Contador tem o valor -32,786, ou 1000 0000 0000 0000b e ao se subtrair 1, contador passa a ter o valor 0111 1111 1111 1111b ou +32,767. unsigned int: Ocupa dois bytes e pode receber valores entre 0 e 65,535, ou seja, valores entre 0 e 2 16 - 1. Porm, ao contrrio de int, no h a necessidade de se ocupar um bit para sinal, e todos os bits so usado para o nmero. Mas, vale salientar um efeito parecido com o ocorrido em int. Veja o exemplo: unsigned int contador = 0; contador = contador - 1;
No exemplo acima, contador contm o binrio 0000 0000 0000 0000b e ao se subtrair 1, passa a ter o valor 1111 1111 1111 1111b, ou 65,535. O mesmo vale se o valor de contador for 65,535 e for adicionado 1. O valor contido vai rodar e passar a ser 0. Neste caso, perceba que existe um espao de memria determinado para cada tipo de dado e sempre que o dado arquivado neste espao for maior do que o espao reservado, a parte mais significativa vai ser perdida ficando apenas a parte menos significativa de mesmo tamanho do espao determinado para o tipo. long: Ocupa quatro bytes e pode conter valores entre -2,147,483,648 e 2,147,483,647, ou, - 2 31 e 2 31 -1. E assim como ocorre com int, o bit mais significativo usado para sinal. unsigned long: Ocupa quatro bytes e pode contar valores entre 0 e 4,294,967,295, ou 0 e 2 32 -1. O que vale salientar o fato de ocorrerem os mesmo problemas de int e unsignet int quando trabalhamos com os valores da borda mxima e mnima. boolean: O tipo boolean deveria representar valores binrios, podendo receber true ou false, porm, a linguagem C diz que o tipo booleano ocupa um byte inteiro para representar um nico bit, e portanto no deve ser usado, uma vez que o uso de operaes lgicas podem fazer um byte representar 8 bits distintos de forma muito mais eficiente, do ponto de vista do consumo de memria. byte: O tipo byte, como o nome diz, ocupa um nico byte e serve para arquivar nmeros inteiros sem sinal com valores entre 0 e 255, ou 0 e 2 8 -1. char: Ocupa um nico byte e serve para arquivar letras. A grande caracterstica de char o fato dele arquivar letras na forma de nmeros, conforme a tabela ASCII, e deve ser usado com aspas simples. Apenas perceba o fato de char ser um tipo com sinal, onde o bit mais significativo usado como sinal de positivo, 0, e negativo, 1. Por isto, os valores armazenados vo de -128 a +127, ou -2 7 e 2 7 -1. Exemplo: char letra = A; // valor 65 decimal. unsigned char: unsigned char um tipo equivalente ao tipo byte e pode arquivar valores entre 0 e 255, ou 0 e 2 8 . A dica o fato do grupo Arduino recomendar o uso de byte em vez de unsigned char. word: word um tipo meio fora de padro, pois, ele no leva o modificador unsigned mesmo sendo um tipo sem sinal. Na prtica, como ele ocupa dois bytes, ele uma cpia de unsigned int. long: Ocupa quatro bytes e pode arquivar nmeros entre -2,147,483,648 a 2,147,483,647, ou -2 31 e 2 31 -1. Exemplo: long velocidadeDaLuz = 186000L; L representa um nmero longo e ser visto mais adiante. unsigned long: Ocupa quatro bytes e pode ocupar meros entre 0 e 4,294,967,295, ou 0 e 2 32 -1. float e double: float e double so nmeros de ponto flutuante, os no inteiros, porm, na linguagem C / C++ comum, o double mais preciso do que o float, mas, como o Arduino uma plataforma de 8 bits com pouca memria, ambos os tipos ocupam 4 bytes e tm preciso de 6 a 7 dgitos decimais. Os valores vo de -3.4028235E+38 a 3.4028235E+38, onde E+n representa 10 n.
Na prtica, eles so usados para ler os dados das entradas analgicas e devem ser usados com muita cautela apenas quando necessrio, pois, ocupam muita memria RAM e exigem um algoritmo muito mais complexo para serem calculados, o que leva muito mais tempo e ocupa muito mais memria de cdigo. Uma outra caracterstica desse tipo de nmero o fato deles no serem precisos e em clculos simples tipo 2.0 + 3.0 a resposta nem sempre vai ser 5.0. Na prtica, pode dar 4.9999 ou 5.0001. Exemplo: float fracao = 1.2345; // float deve obrigatoriamente conter ponto, onde, 3 do tipo int e 3.0 do tipo float ou double. Comentrios sobre tipos: Uma caracterstica das linguagens C / C++ fato do comportamento dos tipos mudarem de acordo com a capacidade da plataforma, ou seja, no Arduino, o tipo int tem 2 bytes, mas, em uma plataforma maior, o tipo int pode ter 4 ou 8 bytes aceitando nmeros muito maiores. Esta uma caracterstica da linguagem para poupar recursos do equipamento e devido a pouca memria interna do Arduino existe uma distoro entre os tipos unsigned int e word, onde os dois tipos so iguais.
Mdulo: Arduino Aula: Arduino Bsico I Ttulo: Funes Predefinidas Esta aula tem o objetivo de introduzir e explicar o conceito de funes. Introduo: Nesta aula, vamos ter o nosso primeiro exemplo prtico de funo e acender o LED contido da prpria placa Arduino, sem a necedidade de eletrnica externa. Funes: A funo tem a finalidade de organizar o cdigo, permitindo que o mesmo seja dividido em blocos distintos com finalidades e necessidades distintas, alm de permitir o reaproveitamento de cdigo, uma vez que funes para necessidades especficas podem ser divididas em arquivos especficos facilitando o reaproveitamento em vrios projetos. Imagine um pequeno rob se comunicando com um rastreador GPS. O rastreado GPS emite dados com a localizao do equipamento uma vez por segundo e estes dados necessitam ser tratados para serem usados. Com o uso de funes fica fcil criar um arquivo especfico com todas as funes necessrias para o tratamento da informao de modo a se poder usar o mesmo arquivo em vrios projetos de robs. O esboo da funo sempre o seguinte: tipo_retornado nome_da_funo ( lista_de_parmetros ) { Cdigo . . . Cdigo }
Como exemplo prtico do uso de funes, o programa abaixo usa as funes predefinidas do Wiring para piscar o LED presente na prpria placa Arduino. byte const pinoDoLed = 13;
Explicao Passo a Passo: Na primeira linha do cdigo, trazemos como novidade o uso de constantes atravs da palavra reservada const. Como voc deve est lembrado, a varivel um espao reservado na memria de dados para arquivar dados temporrios e podem ser alterados a qualquer momento pelo programa em execuo. Porm, no nosso caso, a primeira linha de cdigo informa ao compilador para reconhecer o pino do LED como sendo o pino digital 13, e este valor no vai mudar durante a execuo do programa, por isto, o uso de constantes se encaixa de uma forma melhor, reservando um byte na memria de cdigo, e no na memria de dados, para arquivar um valor que nunca ir mudar. Dica Importante: A memria de dados tem muito pouco espao, por isto, sempre que possvel, prefira reservar espao na memria de cdigo atravs da palavra reservada const e sempre use o tipo que ocupar o menor espao possvel para arquivar a informao de forma correta. Em seguida, temos a funo reservada setup (), uma funo que no faz parte da linguagem C/C++, mas, usada pelo framework wiring para inicializar tudo o que for necessrio antes da execuo do programa. Na prtica, ela equivale a funo main () do C/C++ e ser a primeira funo executada pelo cdigo do usurio, no importando se a mesma foi definida no incio, meio ou final do cdigo. Ela sempre ser a primeira a ser executada e mesmo que no seja necessria, deve ser definida. No nosso caso, ela foi usada para inicializar a pino do LED como sendo um pino digital de sada atravs da funo reservada pinMode (). Mas, no se preocupe, falaremos das funes digitais mais abaixo. A outra novidade trazida pela funo pinMode () o uso da constante predefinidaOUTPUT, uma constante do wiring usada para inicializar um pino digital como sada. Aps a execuo da funo setup (), o framework wiring determina que a prxima funo a ser executada a funo reservada loop (), e como o nome diz, ela um lao infinito, ou seja, aps a execuo da ltima linha, o cdigo voltar a executar a primeira linha de cdigo da funo loop () e permanecer assim enquanto o circuito estiver ligado. Pinos Digitais de Entrada / Sada e Suas Funes: O nosso cdigo traz como novidade as funes digitais. So elas, pinMode (), digitalWrite ()e digitalRead (). pinMode (): Esta uma funo predefinida do wiring e tem a finalidade de configurar os pinos do C para poderem exercer a funo de entrada ou sada, mas, devido ao circuito interno do C, um pino no pode exercer as duas funes ao mesmo tempo. Sintaxe: pinMode ( pino, INPUT / OUTPUT ); Dica importante: Embora a maioria dos exemplos do Arduino usem uma varivel tipoint como indicador do nmero do pino, esta prtica ocupa dois bytes da memria de dados sem necessidade. Por isto, usar constantes do tipo byte permitem usar pinos com valores entre 0 e 255, ocupando apenas um byte da memria de cdigo, que por sua vez, muito maior do que a memria de dados. Exemplo errado: int pinoDoLed = 13;
void setup () { pinMode ( pinoDoLed, OUTPUT ); }
O exemplo acima ocupa dois bytes dentro da memria de cdigo para arquivar o nmero 13 e leva mais tempo para ser executado do que o exemplo abaixo, que por sua vez, no ocupa espao em memria de dados e leva menos tempo para ser executado, uma vez que necessita tratar apenas um byte, em vez de dois, sempre que pinoDoLed for usado no cdigo. Exemplo correto: const byte pinoDoLed = 13;
void setup () { pinMode ( pinoDoLed, OUTPUT ); }
digitalWrite (): Esta uma funo de escrita com duas modalidades, de acordo com o valor passado a funo pinMode (). O primeiro caso quando o valor passado a pinMode () for OUTPUT. Neste caso,digitalWrite () vai ligar ou desligar o pino, se o parmetro passado for HIGH ouLOW respectivamente. A dica prestar ateno na tenso de alimentao da placa Arduino, pois, se a sua placa for de 5V, o pino de sada vai apresentar 5V quando for passado HIGH e 0V quando for passado LOW. Porm, se a sua placa for de 3.3V, o pino vai apresentar 3.3V e 0V na sada. O segundo caso quando o valor passado a pinMode () for INPUT. Neste caso, a funodigitalWrite () vai ativar o resistor de pullup quando o valor passado for HIGH e desativar o resistor de pullup quando o valor passado for LOW. Na prtica, existe uma caracterstica das entradas digitais chamada de impedncia, ou resistncia equivalente da entrada em relao ao seu terra. Quando um pino digital usado para entrada, ele assume o estado de alta impedncia, equivalente a um resistor de 100M fazendo que este pino no drene muita corrente dos circuitos ligados a entrada. Isto faz o pino de entrada no ter um valor de tenso definido se o pino no estiver ligado a nenhum circuito externo. Porm, quando ligamos o resistor de pullup, o C liga ao pino de entrada um resistor interno no valor de 20k, forando a entrada a nvel lgico alto at que um circuito externo force o pino de entrada ao nvel lgico baixo. A dica prtica usar o resistor de pullup quando o pino estiver ligado a um boto ou chave mecnica, e desligar o resistor de pullup quando opino estiver ligado a um circuito digital qualquer. Sintaxe: digitalWrite ( pino, HIGH / LOW ); digitalRead (): Esta funo serve para ler o estado de um pino digital usado como entrada e retorna o valor desse pino como sendo HIGH ou LOW. Na prtica, o framework wiring permite um pouco mais de flexibilidade do que os programadores C/C++ esto acostumados e voc pode definir o tipo que achar conveniente, e embora os exemplos do site Arduino adorem usar o tipo int e ocupar dois bytes sem necessidade, eu recomendo que seja usado o tipo byte ou boolean para se economizar memria de cdigo. Sintaxe: HIGH / LOW = digitalRead ( pino ); Exemplo: const byte entrada = 7;
boolean valorLido;
void setup () { pinMode ( entrada, INPUT ); }
void loop () { valorLido = digitalRead ( entrada ); } Dica de desempenho: O Arduino tem uma arquitetura de 8 bits, o que faz o C necessitar trabalhar mais na hora de tratar uma varivel tipo int, word, float, ou qualquer tipo que ocupe mais de um byte, por isto, executar um comando qualquer com um dado tipo byte mais rpido do que executar o mesmo comando com dado tipo int, por exemplo.