Social Icons

Pascal - História


Homenageado Blaise Pascal
Pascal é uma linguagem de programação estruturada, que recebeu este nome em homenagem ao matemático Blaise Pascal. Foi criada em 1970 pelo suíço Niklaus Wirth, tendo em mente encorajar o uso de código estruturado.

Criador da Linguagem


O próprio Niklaus Wirth diz que Pascal foi criada simultaneamente para ensinar programação estruturada e para ser utilizada em sua fábrica de software. Simultaneamente, a linguagem reflete a liberação pessoal de Wirth das restrições impostas após seu envolvimento com a especificação de ALGOL 68, e sua sugestão para essa especificação, o ALGOL W.
Pascal originou uma enorme gama de dialetos, podendo também ser considerada uma família de linguagens de programação. Grande parte de seu sucesso se deve a criação, na década de 1980, da linguagem Turbo Pascal, inicialmente disponível para computadores baseados na na arquitetura 8086 (com versões para 8080 no seu início).



Pascal é normalmente uma das linguagens de escolha para ensinar programação, junto com Scheme, C e Fortran. Comercialmente, a linguagem foi sucedida pela criação da linguagem Object Pascal, atualmente utilizada nos IDEs Embarcadero Delphi (Object Pascal), Kylix e Lazarus. Academicamente, seus sucessores são as linguagens subsequentes de Niklaus Wirth: Modula-2 e Oberon. A partir da versão 2005, o Delphi passou a se referir a sua linguagem de programação como Delphi Language.
Assim como a linguagem C, que foi padronizado pela ANSI (ANSI C), o Pascal possui padrões pela ISO, como o Pascal Standard e o Advanced Pascal.


É acima de tudo uma linguagem de Alto Nível, embora não seja considerada por muitos, é excelente para iniciar em programação, sendo mais voltada para cálculos e outros algoritmos simples, ainda é baseado no sistema operacional de linha de comando (não gráfico), legal para estudar a programação em códigos fonte e fórmulas onde até pra inserir 'janelas' é necessário desenhar utilizando ASCII, e tem todos procedimentos do tipo declarações de variáveis, etc.

Pascal - Início

Hoje, finalmente, iremos começar a programar de fato, e fazer o nosso primeiro programa! Quanto a linguagem, iremos utilizar a Linguagem Pascal num primeiro momento. Apesar de muitos não concordarem com o uso dela, eu a considero a melhor escolha para o ensino da programação, por ter uma sintaxe clara e fácil de ser entendida.



Para escrever e compilar (transformar o código escrito em um arquivo executável), utilizaremos o Pascal Zim, um ambiente criado pelo departamento de Ciência da Computação da Universidade de Brasília, para o auxílio no ensino da disciplina de Algoritmos. Atualmente, ele encontra-se na versão 5.01. O link para download você encontra aqui. Algumas pessoas podem preferir utilizar o Turbo Pascal, da Borland. Eu optei pelo Pascal Zim por dois motivos: a última versão do Turbo Pascal é de 1991 (ou seja, já tem 18 anos!!!) e também pelo fato do Pascal Zim ser brasileiro! (vamos valorizar os programadores do Brasil!). Caso queiram utilizar o Turbo Pascal, fiquem à vontade, pois a sintaxe é a mesma.
Após baixarem o Pascal Zim, descompacte-o utilizando o Winrar, PKZip, Winzip, 7Zip, enfim, qualquer um que você tenha aí. Logo após, vá até a pasta pascalzim e execute o Pzim.exe. Teremos a seguinte janela:
pascalzim
Esta é a tela de edição de um programa no Pascal Zim. É nela que escreveremos os comandos que irão compor o nosso programa. A seguir, temos um programa simples em algoritmo que iremos passar para a linguagem Pascal:
1algoritmo ola_mundo
2 
3[Processamento]
4   escreva("Olá, Mundo! Estou no blog do Striker07!")
5[Fim]
Este é um programa extremamente simples, que escreve o texto Olá, Mundo! Estou no blog do Striker07! na tela. Em Pascal, este programa ficaria dessa forma:
1program ola_mundo;
2 
3begin
4   write('Olá, Mundo! Estou no blog do Striker07!');
5end.
Vamos agora explicar passo-a-passo este primeiro programa. Na primeira linha, temos Program Ola_Mundo; Esta linha define o nome do nosso programa, da mesma forma que definimos o nome do nosso algoritmo na primeira linha dele. Perceba que, os comandos do Pascal terminam com ; e se você não colocá-los, ocorrerá um erro na hora de compilar. Logo em seguida temos o Begin, que significa o início do programa. Os comandos do nosso programa começarão a ser escritos a partir deste Begin. Ele não tem ; porque não é um comando, mas uma indicação de que a área de processamento está iniciando. A seguir, temos o comando write(‘Olá, Mundo! Estou no blog do Striker07!’); que corresponde ao Escreva(“Olá, Mundo! Estou no blog do Striker07!”). Perceba, basicamente, é a mesma coisa no algoritmo e no programa, com a diferença de que no Pascal os comandos são em inglês. Outra diferença é que na linguagem Pascal o texto deve vir entre aspas simples enquanto que no algoritmo ele vem entre aspas duplas. Também não se deve esquecer de colocar o ponto e vírgula no final do comando. Encerrando o programa, temos End. que indica o final do programa. Este End deve sempre ser acompanhado do ponto final, indicando que o programa se encerra aí.
Caso você esteja utilizando o Turbo Pascal, precisará incluir a seguinte linha depois do título do programa:
1program ola_mundo;
2 
3uses
4   wincrt;
5 
6begin
7...
Esta linha inclui a biblioteca padrão de comandos. Caso esteja utilizando a versão para DOS do Turbo Pascal, substitua wincrt por crt. No Pascal Zim, a biblioteca é incluída automaticamente, então não há a necessidade de colocar esta linha.
Vamos agora fazer um programa simples, que recebe dois números do usuário e os soma. Primeiro, vamos fazer o algoritmo deste programa:
01algoritmo soma_dois_numeros
02 
03[Declaração de Variáveis]
04   numero1, numero2, resultado : inteiro
05 
06[Processamento]
07   escreva("Digite o primeiro número: ")
08   leia(numero1)
09   escreva("Digite o segundo número: ")
10   leia(numero2)
11   resultado ← numero1 + numero2
12   escreva("O resultado da soma é ", resultado)
13[Fim]
Um algoritmo muito simples, onde lemos o valor de duas variáveis do tipo inteiro, e depois as somamos, armazenando na variável resultado, e mostramos na tela. Agora vamos fazer o mesmo programa em Pascal:
01program soma_dois_numeros;
02 
03var
04   numero1, numero2, resultado : integer;
05 
06begin
07   write('Digite o primeiro número: ');
08   readln(numero1);
09   write('Digite o segundo número: ');
10   readln(numero2);
11   resultado := numero1 + numero2;
12   write('O resultado da soma é ', resultado);
13end.
Este programa tem alguns elementos a mais que o outro não tinha. Na primeira linha, temos o título do programa, da mesma forma como estava no Olá Mundo. Após isso, temos a área Var, onde declaramos as variáveis do tipo Inteiro, no caso da linguagem Pascal, Integer. A seguir os tipos básicos e os seus respectivos nomes na linguagem Pascal:
  • Inteiro = Integer
  • Real = Real
  • Caracter = Char
  • Booleano = Boolean
  • Literal = String
Na linguagem Pascal, todas as variáveis devem ser declaradas nesta seção. Caso queira declarar variáveis de tipos diferentes, deve-se fazer igual a um algoritmo:
01// No Algoritmo
02[Declaração de Variáveis]
03   soma : inteiro
04   inicial : caracter
05   media : real
06 
07{ Em Pascal }
08var
09   soma : integer;
10   inicial : char;
11   media : real;
Uma coisa importante que eu tinha esquecido de falar é que a linguagem Pascal não distingue maiúsculas de minúsculas. Ou seja, Real é a mesma coisa que  real ou rEaL ou reaL. Da mesma forma se você declarar uma variável Media, não poderá declarar outra com o nome de media.
Continuando o código, temos o início do programa. O primeiro comando escreve uma mensagem pedindo pra o usuário entrar com o primeiro número. Em programação, esse tipo de mensagem é conhecido como prompt. Em seguida, temos a função readln() que lê um valor do usuário e o armazena em uma variável. Depois, repetimos os dois comandos para ler o segundo número da soma. Em seguida, temos o cálculo da soma. Perceba que, na linguagem Pascal, o operador de atribuição é representado por := em vez da seta que representamos nos algoritmos. Na última linha, temos a apresentação do resultado na tela, através da função write(), onde colocamos entre os parênteses o texto e  a variável que queremos exibir na tela.
Para concluir este primeiro post, vamos fazer um último programa que calcula a sua idade, baseando-se no seu ano de nascimento, utilizando o conceito de constantes. Teremos, então o seguinte algoritmo:
01algoritmo calculo_idade
02 
03[Declaração de Constantes]
04   ano_atual = 2009
05 
06[Declaração de Variáveis]
07   ano_nascimento, idade : inteiro
08   nome : literal
09 
10[Processamento]
11   escreva("Olá! Poderia me dizer qual é o seu nome? ")
12   leia(nome)
13   escreva("Em que ano você nasceu? ")
14   leia(ano_Nascimento)
15   idade ← ano_atual - anoNascimento
16   escreva("Prazer em conhecê-lo, ", nome, ".")
17   escreva("Você tem ", idade, " anos.")
18[Fim]
Passando este algoritmo para a linguagem Pascal, teremos o seguinte:
01program calculo_idade;
02 
03const
04   ano_atual = 2009;
05 
06var
07   ano_nascimento, idade : integer;
08   nome : string;
09 
10begin
11   write('Olá! Poderia me dizer qual é o seu nome? ');
12   readln(nome);
13   write('Em que ano você nasceu? ');
14   readln(ano_nascimento);
15   idade := ano_atual - ano_nascimento;
16   writeln('Prazer em conhecê-lo, ', nome, '.');
17   write('Você tem ', idade, ' anos.');
18end.
Basicamente, temos apenas um detalhe novo em relação ao último programa: a inclusão da área Const para a declaração de constantes. A declaração ocorre da mesma forma que nos algoritmos, ou seja, sem a definição do tipo, utilizando o operador = para indicar o valor da constante. Outro detalhe é a utilização da função writeln(). Mas qual a diferença entre write() e writeln()? Ao utilizar a função write(), o cursor ficará posicionado logo após o final do texto. Já na função writeln(), o cursor pulará para a próxima linha ao escrever o texto. O emprego dessas funções deve priorizar a estética na tela, deixando o programa com um visual mais “agradável”.
Para encerrar este tópico, vou deixar alguns exercícios para praticarem a elaboração de algoritmos e a programação em Pascal:
1. Desenvolva um algoritmo para calcular a média de 4 números fornecidos pelo usuário.
2. Desenvolva um algoritmo para calcular a expressão S = (A + B) / (A – B).Os valores A e B deverão ser fornecidos pelo usuário.
3. Desenvolva um algoritmo para calcular o volume de um cilindro, dado por Pi R² H, onde R é o raio, H é a altura e Pi uma constante equivalente a 3,14. Os valores de R e H deverão ser fornecidos pelo usuário.
4. Desenvolva um algoritmo para calcular a área da esfera, dada por 4 Pi R² e o seu volume, dado por 4 Pi R³ / 3, onde R é o raio e Pi uma constante equivalente a 3,14. O valor de R deverá ser fornecido pelo usuário.
5. Desenvolva um algoritmo para calcular a altura do cilindro, dada por V / 4 Pi R², onde R é o raio, V é o volume e Pi uma constante equivalente a 3,14. Os valores R e V deverão ser fornecidos pelo usuário.
6. Desenvolva um algoritmo para calcular a função F(x,y) = 2x + 2y², em um domínio real. Os valores X e Y deverão ser fornecidos pelo usuário.
7. Desenvolva um algoritmo para calcular o troco a ser devolvido a um cliente. Deve ser lido (fornecido pelo usuário) o valor  a ser pago e o valor dado pelo cliente.
8. Desenvolva um algoritmo para calcular o valor absoluto da diferença entre A e B. Os valores A e B deverão ser lidos.
9. Desenvolva um algoritmo para calcular (converter) graus Farenheit (F) em graus Centígrados (C) , utilizando a seguinte fórmula: C = 5 (F – 32) / 9. O valor F deverá ser lido.
Algumas dicas:
- Função para calcular a raiz quadrada: sqrt(número)
- Função para calcular o valor absoluto de um número: abs(número)
Tentem fazer os exercícios. Qualquer dúvida, postem nos comentários

Laços de Repetição

Hoje iremos tratar de um tema de suma importância na programação: Os Laços de Repetição. Em nossos programas já estamos lendo dados do usuário. Imagine o seguinte: vamos fazer uma soma de números. Lemos dois números e realizamos a soma. E se quiséssemos fazer uma soma de, por exemplo, 100 números, ou mesmo uma quantidade X definida pelo usuário? No caso da soma de 100 números, teríamos 100 vezes o comando Leia()? E como faríamos pra ler uma quantidade X de vezes? Sem as estruturas de repetição, sem dúvida, seria bem complicado. Além disso, teríamos um código extremamente grande e repetitivo, com comandos iguais pra fazer as mesmas coisas. Os Laços de Repetição foram criados para solucionar estes problemas, deixando os códigos mais compactos, mais legíveis e mais rápidos de serem desenvolvidos.
Os Laços de Repetição que iremos tratar aqui são o Enquanto, Faça e o Para. Descrevendo-os resumidamente, temos o seguinte:
  • Enquanto: testa a condição antes de executar o bloco de código
  • Faça: executa o bloco de código e depois verifica a condição
  • Para: executa um bloco de código um determinado número de vezes
Vamos começar, então, falando do Enquanto. O enquanto possui um funcionamento bem simples, porém é de grande utilidade. Ele compara uma sentença e executa o bloco de código se a condição for verdadeira. Da mesma forma que, por exemplo, no Se, você pode colocar diversas condições, com o uso dos operadores lógicos e e ou, além do não. A seguir temos o exemplo da sintaxe em algoritmo…
1enquanto (nota > 70) faça
2   comandos...
3fim-enquanto
… e em Pascal…
1while (Nota > 70) do
2begin
3   comandos...
4end;
Dessa forma, utilizamos o Enquanto quando vamos executar uma repetição sem sabermos necessariamente o número de vezes que ele será executado. O looping pode, ainda, não ser executado nenhuma vez, caso a condição não seja satisfeita, ou seja, no Enquanto, testa-se a condição antes de executar o bloco de código.
Outra estrutura de repetição importante é o Repita. Ela possui praticamente o mesmo funcionamento que o Enquanto, porém a condição é testada após a execução do bloco de código. Abaixo, temos a sua sintaxe algoritmica…
1repita
2   comandos...
3enquanto(nota <= 70) e (nota >= 30)
… e em Pascal…
1repeat
2   comandos...
3until(nota <= 70) and (nota >= 30);
Neste exemplo acima, utilizei o operador lógico e para condicionar a repetição. Dessa forma, o looping será executado somente enquanto a variável Nota estiver na faixa entre 30 e 70 (para mais detalhes sobre os operadores lógicos, dê uma olhada no post sobre eles).
Por último, mas não menos importante, temos o Para. Esta estrutura de repetição se diferencia das outras por executar a repetição um determinado número de vezes. Como assim? A execução do Para é executada através da verificação e incremento de uma variável inteira, ou seja, determinamos a quantidade de vezes que a repetição será executada através de um limite para o valor da variável. Meio confuso? Calma, nos exemplos abaixo vai ficar mais claro. Primeiro na forma algoritmica…
1para i = 1 até 50 faça
2   comandos...
3fim-para
… e em Pascal…
1for i := 1 to 50 do
2begin
3   comandos...
4end;
No exemplo acima, temos a variável I funcionando como o contador de execução do looping, sendo incrementado automaticamente a cada execução do bloco de código. Dessa forma, o nosso looping será executado 50 vezes, ou seja, enquanto a variável I for menor ou igual o valor 50. Podemos, em vez do valor 50 colocar outra variável ou uma constante pra controlar a quantidade de vezes que o Para será executado.
O Para também possui uma particularidade interessante, podendo realizar decrementos a cada execução do looping. Dessa forma, podemos, por exemplo, criar contadores decrescentes, ou ainda exibir vetores invertidos (para mais informações sobre vetores, consulte o próximo post). A seguir temos a sintaxe do Para com decremento tanto em algoritmo quanto em Pascal:
1para i = 50 até 1 passo -1
2   Comandos...
3fim-para
1for i := 50 downto 1 do
2begin
3   Comandos...
4end;
Bem, pessoal, acho que é isso. Com o tempo vocês verão que a utilização das estruturas de repetição está sempre presente no dia-a-dia de um programador e tem papel fundamental na construção de um código otimizado. Fiquem atentos, pois no próximo post iremos falar de vetores e matrizes. Até lá e bons estudos!

Estruturas de Repetição "SE" "IF"

Os programas geralmente, baseados em algum dado, selecionam porções do código a serem executadas, realizando operações diferenciadas a cada execução. Para representar essa seleção em nosso programa utilizamos as estruturas de seleção.
A primeira estrutura de seleção que iremos conhecer é o Se. O Se é utilizado quando esperamos por uma condição. O bloco de código referente só sera executado se a condição for verdadeira. A seguir temos um exemplo algoritmico da utilização dessa estrutura e sua implementação em Pascal.
1leia(numero)
2se (numero MOD 2 = 0) então
3   início
4      escreva("O número é par.")
5   fim
1readln(numero);
2if (numero MOD 2 = 0) then
3   begin
4      write('O número é par.');
5   end;
Neste exemplo, lemos do usuário a variável numero. Se o resto da divisão do conteúdo da variável for igual a zero, será mostrada na tela a frase O número é par. A partir disso, podemos criar condições para o nosso programa, executando determinadas tarefas somente se algumas condições forem satisfeitas. Mas e se, por exemplo o número não fosse par? Ele seria ímpar… mas como faríamos isso no programa? A estrutura do Se é composta do Senão, que é executado caso a condição do Se não seja satisfeita. A seguir temos o exemplo da utilização do Se com o Senão na forma algoritmica e na linguagem Pascal:
1leia(numero)
2se(numero MOD 2 = 0)
3   então
4      escreva("O número é par.")
5   senão
6      escreva("O número é impar.")
7fim-se
1readln(numero);
2if (numero MOD 2 = 0) then
3   begin
4      write('O número é par.');
5   end
6else
7   begin
8      write('O número é ímpar.');
9   end;
Dessa forma, se o número digitado fosse par, a mensagem O número é par. Caso contrário, a mensagem O número é ímpar. seria exibida. Além disso, podemos encadear vários ‘Ses’, criando uma série de condições. Podemos também, colocar mais de uma condição ou negar uma condição, com a utilização dos operadores lógicos e, ou e não.
1leia(idade)
2se (idade < 13)
3   então
4      Escreva("Criança")
5senão se (idade >= 13 e < 21)
6      escreva("Adolescente")
7   senão
8      escreva("Adulto")
9fim-Se
01readln(idade);
02if (idade < 13) then
03   begin
04      write('Criança');
05   end
06else if (idade >= 13 and idade < 21) then
07   begin
08      write('Adolescente');
09   end
10else
11   begin
12      write('Adulto');
13   end;
Ah, um detalhe. Percebam que em Pascal, somente o último End de uma sequência de Ifs tem ponto-e-vírgula! Observando o exemplo acima, podemos realizar diversas tarefas, encadeando diversos Ifs / Elses. Apesar de simples, esta estrutura é vastamente utilizada na programação. Porém, quando precisamos conferir o valor de uma variável frente a muitos valores, o uso de Ifs encadeados torna-se trabalhoso, principalmente ao programador, além de deixar o código repleto de Begins e Ends. Para resolver problemas do tipo, utilizamos uma estrutura chamada Escolha ou Case. Com ela, podemos comparar o conteúdo de uma variável frente a diversas constantes, de uma forma bem mais organizada que o simples encadeamento de Ifs. A seguir, temos um exemplo de um programa de apuração de votos, com a utilização do Escolha.
1...
2escolha (votos)
3   caso (votos = 1) : candidato1 ← candidato1 + 1
4   caso (votos = 2) : candidato2 ← candidato2 + 1
5senão
6   escreva("Voto inválido")
7fim-escolha
1case votos of
2   1 : candidato1 := candidato1 + 1;
3   2 : candidato2 := candidato2 + 2;
4else
5   write('Voto inválido');
6end;
Neste caso, a variável votos foi comparada com os valores 1 e 2. Dependendo do seu conteúdo,  incrementa-se a variável correspondente ao candidato. Caso o voto não confira com nenhuma das opções do case, ele irá executar o comando para escrever Voto inválido na tela. Nesta estrutura, assim como no se, o uso do senão é facultativo, ou seja, ele não precisa necessariamente estar presente, sendo utilizado de acordo com a necessidade. Outro ponto é que os valores constantes comparados não precisam ser necessariamente inteiros. Podem ser, por exemplo, um tipo caracter.
Bom, pessoal, é isso. No começo pode ser que vocês estranhem um pouco estas estruturas, mas com o tempo elas virão a estar presente em praticamente todas as aplicações que vocês fizerem. E lembrem-se que, em caso de dúvida, podem  simplesmente deixar um comentário aqui no blog.
Obrigado pela visita e até o próximo post com as Estruturas de Repetição. Abraço a todos! :)

Operadores Lógicos

Bom Agora que ja se sabe um pouquinho sobre a estrutura simples vamos começar a Relação de Dados, estrutura teórica e prática de Operadores Lógicos.


Operadores Relacionais Matemáticos Seria uma boa leitura antes desse texto abaixo...

Bom, os operadores lógicos são usados em todas as engenharias acredito eu, pois são a base do pensamento lógico racional, eu mesmo uso MUITO em Eletrônica, e MUITO em programação,....
Todo Operador Lógico tem uma condição de entrada e análise para condiçaõ de saida.


E : Operador Lógico Inclusivo.As 2 Condições declaradas tem de ser verdadeiras para poder sair um dado verdadeiro. Explicando melhor com exemplo.


A conjunção é verdadeira se e somente se os operandos são verdadeiros
A B   Resposta
V V   V
V F   F
F V   F
F F   F

Percebemos que somente quando A e B São Verdadeiras a Resposta é verdadeira.


OU: Só Resultara em FALSO quando todas forem falsas. Se uma ou outra for verdadeira ele resulta em verdadeiro. por isso OU, A ou B.

AB  Resposta
VV  V
VF  V
FV  V
FF  F

NÃO: A negação da proposição "A" é a proposição "~A", de maneira que se "A" é verdade então "~A" é falsa, e vice-versa.Ou Seja se a afimação for verdadeira ele retorna falsa se for falsa retorna verdadeira.

A ~A
V F
F V

[Vídeo-Tutorial] Fazendo Jailbreak no iOS 4.3.1, 4.3.2 e 4.3.3

Jailbreak.





Importante:
  • Jailbreak untethered (pode reiniciar)
  • Válido para iPod touch 3g e 4g, iPhone 3GS e iPhone 4 e iPad 1
  • Redsn0w 0.9.6RC14 para Windows: [link]
  • Redsn0w 0.9.6RC14 para Mac: [link]
  • Download do arquivo de firmware: [link]
Atualização 06/05: o redsn0w foi atualizado funcionando no 4.3.3.



Fonte: itouchbr.com.br

Jeremy Blum Projects - Arduino Parte [10]

Este é da semana 10, trataremos sobre Interfaces SPI, Debouncing, Interruptores
Para quem não viu os outros(Recomendo seguir a Ordem):
Semana [1]
Semana [2]
Semana [3]
Semana [4]
Semana [5]
Semana [6]

Semana [7]
Semana [8]
Semana [9]
---------------------------------------------
----------------------------------------------



GNU GPL LicenseDistribuido apartir de GNU General Public (Open-Source) License.
Por Favor Compartilhe como "quiser".

Jeremy Blum Projects - Arduino Parte [9]

Este é da semana 9, trataremos sobre Interfaces SPI, xBee, Wi-fi, Wireless, 
Para quem não viu os outros(Recomendo seguir a Ordem):
Semana [1]
Semana [2]
Semana [3]
Semana [4]
Semana [5]
Semana [6]

Semana [7]
Semana [8]
--------------------------
 - Códigos Usados
 - Peças Usadas
--------------------------



GNU GPL LicenseDistribuido apartir de GNU General Public (Open-Source) License.
Por Favor Compartilhe como "quiser".

Um monitor de batimentos cardíacos para o ARDUINO







monitorBatimentos_01



Parte 1: “Vendo” os pulsos

Introdução

A Eletrônica nos permite criar aparelhos que são de fato extensões de nossos sentidos, como aqueles que são capazes de captar certos sinais fisiológicos que normalmente somos incapazes de sentí-los. Uma vez captados por algum tipo de sensor esses sinais podem ser amplificados e digitalizados, depois podem ser alterados e até mesmo controlados com alguma forma de feedback. Um desses sinais fisiológicos é o número de batimentos do nosso coração. Emoções fortes como raiva e excitação causam um aumento da taxa de batimentos do coração humano. Outras emoções como tristeza e pesar fazem essa taxa diminuir. Meditação, contemplação e outros estados mentais tambem mexem com essa taxa. Com a ajuda do Arduino e um amplificador de alto ganho com sensor ótico podemos monitorar nossa taxa de batimentos cardíacos na tela do nosso PC. Fica fácil assim montar um instrumento que pode ser usado para experiências com controle de stress, respiração, relaxamento e biofeedback





Hardware





Nosso protótipo foi montado numa pequena placa perfurada de 3,5 x 5,5 cm para ser encaixada sobre o Arduino como um shield. Veja a figura 1. Os componentes são interligados com pequenos fios no lado da solda da placa.

Nesse projeto utilizamos o par de amplificadores operacionais dentro do LM-358N.  O circuito completo está na figura 3, e é um projeto por nós adaptado para o Arduino a partir de um circuito originalmente publicado pela revista inglesa Elektor em 2008, sob o título “Stress-O-Meter”. Esse tipo de monitor de batimentos cardíacos é uma variante de um aparelho médico-hospitalar chamado pletismógrafo, que serve para medir (e registrar) variações no volume de um orgão como resultado de flutuações rítmicas da circulação do sangue pelo corpo humano. Normalmente nesse tipo de aparelho essas flutuações são captadas por um sensor ótico posicionado em um lado do lóbulo de uma orelha, ou um lado da ponta de um dos dedos, e com a fonte de luz alinhada no lado oposto. Diferentemente, nosso aparelho mede as pulsações no fluxo de sangue na ponta do dedo de uma das mãos do experimentador com o sensor e a fonte de luz colocados num mesmo plano e montados numa caixa separada do amplificador. Veja a figura 2 abaixo. Em nosso protótipo usamos como sensor de pulsações um LDR comum com uma resistencia de 1 Mohm sem nenhuma luz incidente, e 400 ohms com incidencia de luz natural direta.





Como fonte de luz para o sensor usamos um LED vermelho comum de 3 mm. O experimentador deve posicionar o lado oposto à unha de seu dedo indicador sobre o LDR, e a dobra entre a ponta e o meio do dedo sobre o LED. A luz que é emitida pelo LED atravessa a pele da dobra e é refletida pelo osso sobre uma pequena concentração de artérias bem em cima do LDR. O volume de sangue nesse grupo de artérias pulsa em sintonia com as contrações do músculo cardíaco. Essa informação vai modular a resistência do LDR.





No circuito do monitor o resistor R1 limita a corrente direta atraves de LED1 em cerca de 20 mA. O LDR e o resistor R2 formam um circuito divisor de tensão cuja saída pulsante será função da resistência do LDR que é função da luz refletida pelo dedo do experimentador.  

Esses pulsos de muito baixa frequencia, entre 1 e 2 hertz, seguem para um filtro passa-altas formado por C1 e R3 e é amplificado pelo primeiro opAmp do LM-358N na configuração não-inversor com ganho de 120. C2 e R5 formam um filtro passa-baixas centrado em 1,5 Hz. Essa frequencia corresponde a 90 pulsos por minuto, que é a metade da frequencia maxima do coração humano. O potenciometro P1, que é a resistencia de carga do primeiro amplificador, controla a entrada do segundo opAmp tambem não-inversor com ganho de 560. Aqui o sinal modulado com os batimentos do coração do experimentador pode ser entregue para tratamento ao Arduino no pino digital 2. O LED2 será programado para piscar com os batimentos cardíacos.



Sugerimos ao leitor primeiro montar o conjunto fonte de luz/sensor. Para o nosso protótipo montamos esse conjunto em uma pequena caixa plástica de 3x4x1 cm, como na figura 2. Nessa caixa foi montada a pequena placa perfurada com o LED vermelho de 3 mm e seu resistor de 270 ohms e o LDR e seu resistor de 39 Kohms.



Lista de componentes
R1 e R10 Resistor 270 ohms x 1/8W
R2 Resistor 39K ohms x 1/8W
R3 e R6 Resistor 68K ohms x 1/8W
R4 Resistor 8K2 ohms x 1/8W
R5 Resistor 1M ohms x 1/8W
R7 Resistor 560K ohms x 1/8W
R8 Resistor 1K ohms x 1/8W
R9 Resistor 1K8 ohms x 1/8W
P1 Potenciometro 10K linear
LED1 e LED2 Led vermelho 3 mm
LDR LDR
S1 Chave miniatura 1/0
C1 e C3 Capacitor 1uF x 25V
C2 e C4 Capacitor 100nF
CI1 LM-358N dual opamp
Outros Placa CI perfuração padrão
Borne 3 pinos parafuso


A distancia entre os centros do LED e do LDR é cerca de 1,0 cm. Da caixa saem tres fios: o de +5 volts, o de saída do divisor de tensão e o comum a esses dois, o terra. O fio de saída do divisor de tensão vai para o capacitor C1 na entrada do primeiro amplificador pelo borne B1.

Software

Depois de conferir mais de uma vez toda a fiação, encaixe o shield no seu Arduino, conecte o sensor e depois o cabo USB no seu PC. Para ver os batimentos cardíacos de uma pessoa carregue no seu Arduino o sketch da listagem 1.

Listagem 1


int pinLed = 3;    

volatile int state = 0;    



void setup(){

pinMode(pinLed, OUTPUT);        

attachInterrupt(0, pulse, CHANGE); 

}

void loop(){

digitalWrite(pinLed, state);     

}

void pulse(){

state = !state;           

}
Esse sketch configura o pino digital 3 como saída para LED2 no circuito, e o pino digital 2 como entrada de interrupção para a função attachInterrupt( ) que chama a função pulse( ) toda vez que uma interrupção externa ocorrer nesse pino. A função attachInterrupt( ) requer tres parâmetros e sua sintaxe é a seguinte:



attachInterrupt(pino, função, modo);
O primeiro parametro é pino e deverá ser 0 para o pino digital 2, ou 1 para o pino digital 3 do Arduino; o segundo é função e se refere à função que será chamada quando a interrupção ocorrer; o último parâmetro modo define o momento em relação ao sinal no pino digital especificado em que a interrupção ocorrerá, que poderá ser de quatro modos: CHANGE, na mudança do nível no pino; LOW, quando o pino for baixo; RISING, quando o pino mudar de baixo para alto; ou FALLING, quando o pino mudar de alto para baixo.

Nesse sketch toda vez que o nível lógico no pino digital 2 mudar, a função  pulse( ) será chamada, e esta vai somente complementar (mudar o estado da) a variável state. A variável state vai mudar de acordo com os batimentos do coração do experimentador e fazer o LED2 acender ou apagar conforme seu estado na função digitalWrite( )

Para testar o circuito basta você repousar a ponta de seu dedo indicador sobre o sensor e girar o cursor do potenciometro P1 para o mínimo ganho até o LED no pino 3 apagar. Depois vá aumentando o ganho até que o LED comece a piscar com os batimentos do seu coração. Depois de algum treino pressionando mais ou menos o dedo sobre o sensor é possível achar o ponto ótimo para ver o LED piscar regularmente. O ajuste fino é feito com o potenciometro.

Podemos enviar nossos batimentos cardíacos pela porta serial para o PC e ver no terminal do Windows ou do Arduino sua forma digital como uma combinação de traços horizontais com caracteres ASCII 95 e 45. Para isso acrescente ao sketch acima uma linha para iniciar a porta serial em 9600 bps e os comandos if que testam a variável state; se esta for falsa o caracter 45 será enviado para o terminal serial com a função Serial.write( ); se state for verdadeira o caracter 95 será enviado. Veja a listagem 2 e a forma dos pulsos na figura 5 abaixo. As pausas de 10 ms entre as transmissões evitam a sobrecarga do buffer da porta serial.

Listagem 2


int pinLed = 3;      

volatile int state = 0;   



void setup(){

pinMode(pinLed, OUTPUT);      

attachInterrupt(0, pulse, CHANGE);

Serial.begin(9600);

}

void loop(){

digitalWrite(pinLed, state);      

if(!state) Serial.write(45);

delay(10);

if(state)Serial.write(95);

delay(10);

}

void pulse(){

state = !state;                   

}



pulsosCardiacosTerminal Arduino 


Figura 5: os pulsos do batimento cardíaco

Na segunda parte desse artigo vamos visualizar melhor esses pulsos cardíacos agora digitalizados numa interface gráfica na tela do seu PC usando alguns poucos comandos de uma linguagem open source e muito parecida com a do Arduino, a linguagem Processing.(Já Comentada em Posts Anteriores)...

Até Lá!

Monte seu próprio Arduino ( Muito Fácil)

 



monte seu Arduino

 


As opções de Arduino

O Arduino já montado e testado pode ser adquirido em sites de comercio eletronico tanto aqui no Brasil quanto lá fora. Existe muitas opções de modelos conforme o microcontrolador embarcado, desde o mais simples com o ATmega168 com comunicação RS-232 ou USB e até aqueles com o ATmega1280 com mais memória de programa e mais entradas e saídas digitais. Mas tambem o leitor poderá montar seu proprio Arduino a partir de componentes facilmente encontrados em lojas de componentes eletronicos. Nesse caso propomos um circuito básico com o microcontrolador ATmega8 ou com o ATmega168, alguns resistores e capacitores, um regulador de tensão comum e um conjunto de conectores do tipo mini-latch para placa de circuito impresso. A placa proposta é de face simples e poderá ser confeccionada por qualquer método caseiro, como o já consagrado método térmico a partir de uma impressão a laser. A fonte de alimentação é externa à placa e pode ser qualquer carregador de baterias de aparelhos portáteis, como o de telefones celulares, que forneça tensões entre 9 e 15 volts CC. Veja o circuito completo do nosso protótipo na figura 1 e como ficou a montagem final na figura 2 abaixo.

 

circuito do Arduino
figura 1: circuito proposto para montagem

Hardware

Tanto o ATmega8 quanto o ATmega168 pode ser utilizado na montagem do nosso Arduino. Observe que no circuito não aparece o conversor TTL-RS232. Preferimos separar esse circuito da placa principal por uma boa razão: dar a opção ao montador de escolher que tipo de comunicação serial o seu Arduino terá com um PC, se RS-232 ou USB. Para a comunicação RS-232 existe o conversor MAX-232 que é um circuito integrado muito fácil de encontrar em lojas de componentes eletronicos, e por ser do tipo DIL de 16 pinos é tambem muito fácil de montar em uma pequena placa de circuito impresso e ser conectado por um cabo diretamente entre uma porta RS-232 do PC e o conector “SERIAL” que aparece no diagrama.Num outro artigo mostraremos a montagem de um circuito conversor TTL-Serial para ser usado com o nosso Arduino.

Para a comunicação serial USB o conversor é o FT-232RL, um circuito integrado do tipo SMD de 28 pinos, um pouco mais difícil de encontrar no comercio, bem mais caro que o MAX-232 e de montagem mais complicada numa placa de circuito impresso caseira devido ao tamanho e espaçamento entre seus pinos. Mas tanto um tipo quanto o outro de conversor funciona normalmente com o Arduino. A grande vantagem da USB é que todo PC moderno tem várias dessas portas disponíveis, e só os de mesa, os desktop, ainda estão vindo com duas ou tres portas RS-232.

Descrição do Circuito

O microcontrolador é alimentado com +5 volts nos pinos 7 e 20 provenientes do regulador de tensão integrado LM7805, se o jumper JMP1 estiver na posição “EXT”. Os capacitores C1 a C4 formam os filtros CC de entrada e de saída do regulador. No conector J1 entramos com uma tensão de +9 volts a +15 volts de uma fonte externa ou de um carregador comum de baterias com o positivo no pino central.

O diodo D1 serve de proteção para o circuito no caso de o pino central ser negativo. O LED1, vermelho, acende se a tensão de alimentação do circuito estiver correta. Essa mesma tensão externa tambem é disponibilizada no primeiro pino do conector “POWER”. A tensão de +5 volts do regulador LM7805 alem de ser disponibilizada nos pinos dos conectores “POWER” e “SENSOR” segue tambem para o conector “SERIAL” para alimentar a placa externa com o conversor RS-232.

À direita do diagrama temos o microcontrolador e os conectores ICSP, os dois digitais e o analógico. São 14 pinos digitais (D0 a D13) e 6 analógicos (A0 a A5). O pino de entrada de referência (AREF) para o conversor A/D do Arduino fica no segundo conector digital. O LED de teste e o pino 3 do ICSP estão ligados no pino digital D13. Na área tracejada vemos um cristal de 16Mhz e dois capacitores de 22pF que formam o circuito de relógio para o microcontrolador. Esse conjunto cristal-capacitores pode ser substituido por um ressonador cerâmico de 16Mhz que já inclui os dois capacitores no mesmo encapsulamento.

O microcontrolador uma vez configurado pelo bootloader do Arduino é resetado pelo último pino do PORT C (pino 1do microcontrolador), onde tambem temos um botão de RESET. Esse mesmo sinal de RESET segue para o pino 5 do ICSP e, atraves de um capacitor de 100nF, para o circuito conversor serial externo, para onde vão tambem os pinos digitais D0 e D1 que normalmente são reservados para a comunicação serial do Arduino com um computador PC ou com outro Arduino. Nesse conector  “SERIAL” pode ser ligado um circuito conversor RS-232 ou um USB. Se for usado um conversor USB o jumper JMP1 deve ser mudado para a posição “USB” e com isso o Arduino passa a ser alimentado pela tensão +5 volts da porta USB  do computador PC. É interessante observar que se não dispusermos de um carregador de baterias para conectarmos em J1 nosso Arduino pode ser alimentado por uma fonte externa de +5 volts diretamente atraves do conector “POWER”. O microcontrolador aparece no meio da placa.

Todos os pinos digitais e analógicos obedecem as mesmas posições e distanciamentos do Arduino padrão. Na parte de cima ficam os conectores digitais e à direita destes o conector “SERIAL” que acrescentamos para ligarmos a placa do conversor serial que será montada à parte. Na parte de baixo da placa está o jumper para selecionarmos que interface serial estamos usando, se RS-232 ou USB, e o conector analógico e o de tensões disponíveis para outros circuitos. À esquerda deste acrescentamos tambem um conector de tres pinos, o “SENSOR”, que é uma extensão do pino analógico A0, a tensão de +5 volts e o terra num só conector. À direita da placa, temos o botão de RESET e acima dele o conector “ICSP”. Mais abaixo do RESET o conector de entrada de tensão para alimentar o Arduino. Os outros componentes são os capacitores e resistores, o regulador de tensão e os dois LEDs. O LED vermelho acende para indicar que o Arduino está corretamente alimentado e o LED verde é o que vai conectado ao pino digital D13 do Arduino e indica quando carregamos programas para o microcontrolador. Em nosso Arduino utilizamos um ressonador cerâmico de 16 Mhz  em vez do cristal e dois capacitores de 22pF que aparecem no diagrama da figura 1. Nossa placa tem somente quatro pequenos jumpers

 

figura 2




Lista de materiais para a montagem do Arduino proposto
Item Componente qtde Obs.
1 Soquete DIL 28 pinos 1 Ou 2x DIL de 14 pinos
2 ATmega8 1 ou ATmega168
3 Cristal 16 Mhz 1 Ou ressonador cerâmico 16 Mhz
4 Regulador LM-7805 1 Não precisa dissipador
5 Diodo 1N4148 1 qualquer um da série 1N414x
6 LED 5 mm vermelho 1  
7 LED 5 mm verde 1  
8 Capacitor 100uFx25V 1 Tipo axial
9 Capacitor 10uFx25V 1 Tipo axial
10 Capacitor 100nFx100V 3 Tipo poliester
11 Capacitor 22pFx100V 2 Dispensados se usar ressonador
12 Resistor 220 ohms x 1/8W 2 Tipo cerâmico
13 Resistor 10 Kohms x 1/8W 1  
14 Botão tipo campanhia   1 Micro-chave para circuito impresso
15 Jumper 3 pinos 1 Jumper com espaçamento 2,54 mm
16 Conector mini-latch 8 pinos fêmea 2 Para os pinos digitais
17 Conector  mini-latch 6 pinos fêmea 1 Para os pinos analógicos
18 Conector  mini-latch 6 pinos fêmea 1 Para os pinos de tensões externas
19 Barra de pinos 6 pinos 90 graus 1 Para a placa serial
20 Conector mini-latch 3 pinos fêmea 1 Para a entrada de sensor
21 Barra de pinos 2x3 fêmea 1 Para o ICSP
22 Conector alimentação femea 1 tipo jack para circuito impresso

 

A placa de Circuito Impresso

A placa de circuito impresso do nosso Arduino tem 7,5 cm por 5,5 cm e é de face simples. Veja na figura 3 o lado da solda e na figura 4 uma sugestão de serigrafia no lado dos componentes na placa.

 



figura 3
Placa PCI Arduino 02

figura 4


A placa de circuito impresso pode ser confeccionada por qualquer método caseiro, como o já consagrado método térmico com impressão ou fotocópia a laser numa folha de papel grassy. Nesse caso deve-se usar o desenho da figura 5, sem inversão do lado da solda. Note que em nossa placa utilizamos um ressonador cerâmico na posição indicada como “XTAL”, se for utilizado um cristal e os dois capacitores ceramicos de 22 pF o desenho da placa deverá ser modificado para acomodá-los. Os pinos 8 e 22 (GND) do microcontrolador já vêm conectados entre si dentro do encapsulamento e portanto no desenho da placa não aparecem conectados.

 

placa PCI Arduino 03
figura 5
Uma vez pronta a placa de circuito impresso, o nosso Arduino pode ser todo montado em umas poucas horas, dependendo da experiência em montagens eletronicas do leitor. As unicas recomendações são para conferir mais de uma vez a montagem dos componentes polarizados, como o diodo, os capacitores eletrolíticos e os LEDs, e para se certificar que o microcontrolador está corretamente alojado e orientado no seu soquete. Confira tambem se os quatro jumpers (são quatro pedaços de fios finos) foram corretamente soldados nos seus respectivos lugares. Por fim, coloque o strap de JMP1 na posição “EXT”.



Alimentando o Arduino

Com o hardware do Arduino montado já podemos alimentá-lo, embora ainda não possamos controlar nada  com ele pois não temos nenhum programa carregado.  Você pode alimentar o Arduino de duas maneiras diferentes: ou com uma fonte externa ou um carregador para aparelhos portáteis com tensões entre 9V e 15V, como o da figura 6 abaixo; ou diretamente com uma bateria comum de 9 volts com um cabo adaptado para o plug da bateria e para o plug do módulo, veja a figura 6. O positivo da fonte deverá ser o pino central do conector macho que vai ligado ao Arduino.







figura 6



Ao conectar qualquer dessas fontes de tensão ao Arduino somente o LED vermelho deverá acender de imediato indicando que o módulo está alimentado corretamente.  Num outro artigo vamos montar um programador para o bootloader e o cabo serial e fazer nossos primeiros experimentos com o nosso Arduino.



 É isso aí, agora se você ja fez seu arduino ou ja tem um siga a página principal de Arduino do Blog e vá seguindo os tutoriais! Bom Proveito!

Não Me Responsabilizo por Nada Aqui escrito, se pegar FOGO é por sua Conta!