Mostrar mensagens com a etiqueta C. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta C. Mostrar todas as mensagens

quinta-feira, 14 de julho de 2016

Laboratório de física para todos - vamos fazer um digitímetro!

Um digitímetro consta de uma célula fotoelétrica ligada a um marcador de tempo. É usado geralmente para medir o tempo de passagem de um objeto para, a partir desse tempo e das dimensões do objeto, os alunos fazerem o cálculo da velocidade com que o objeto passou num determinado ponto. Sendo um aparelho recomendado em várias experiências de Física do ensino secundário é, pelas escolas que fui passando, um aparelho considerado caro, por vezes demasiado complicado para as tarefas habituais, e que existe em pouca quantidade, pelo que geralmente é feita uma única montagem para todo um grupo de alunos em vez de várias montagens, o que permitiria o trabalho em grupos mais pequenos.

O aspeto de um digitímetro que costumamos encontrar nas nossas escolas (e que ilustra um protocolo experimental proposto pela editora Areal) é o seguinte:



Não querendo parecer esquisita, nunca percebi porque é que o digitímetro é nos nossos laboratórios um aparelho tão pesado, com tantos fios, pouco portátil, demasiado caro para estender o seu uso a níveis de ensino mais precoces...e por isso, achei que conseguia fazer um com um arduino e um PIR.

Material usado: arduino, breadboard, fios de ligação, plug-in para uma pilha de 9V, LCD 1602, sensor PIR.

Para ficar com uma ideia de qual o custo unitário deste digitímetro, fiz uma busca rápida pelo aliexpress e consegui um kit básico de arduino com a placa UNO, a breadboard, fios de ligação e plug-in para a pilha por 5,08€;  um LCD (já com os pinos soldados) por 1,77€ ; um sensor PIR por 0,31€. Podem dar jeito alguns fios com extremidades macho-fêmea (para poder afastar o sensor PIR da breadboard) - conseguem-se 40 cabos de 20 cm por 0,83€. Conseguimos pois, mandando vir o material pelo aliexpress, todo o projeto por 7,99€. E ainda sobrarão muitos cabos para projetos futuros...

Quanto ao esquema, há que ligar devidamente o LCD, o que foi estudado em post anterior, e o PIR. Nesta montagem, optámos pela solução de ligar o pino 3 do LCD (que define o contraste) à saída PWM do arduino (D6) em vez de o ligarmos a uma resistência variável. A saída do PIR foi ligada à entrada digital 13 do arduino (D13). O esquema que proponho é o seguinte:


E a programação? O programa de um digitímetro não tem nada de complicado. Para o compreender, há que rever o funcionamento do PIR e do LCD. Basicamente, a ideia é esperar que o PIR, ligado à entrada 13 do arduino, altere o seu estado de HIGH para LOW (o que revela a presença de um obstáculo dentro da zona sensível do PIR) e medir o tempo até que o sinal volte novamente a HIGH. Esse tempo corresponderá ao da passagem do obstáculo em frente do PIR. O ângulo de deteção é de 35º, razoavelmente pequeno; ainda assim, deve tentar-se que a distância entre o objeto e o PIR seja a menor possível para minimizar o erro na medida devido a esse ângulo. Relativamente aos programas anteriores a única função nova é millis(), cuja descrição pode ser encontrada no site do arduino.

Deixo aqui o programa integral:


Finalmente, partilho um vídeo com o digitímetro em funcionamento:


domingo, 10 de julho de 2016

Introdução à linguagem C - exploração do LCD 1602 (ou como fazer um ohmímetro)

Há algum tempo que estou para explorar o uso de LCD em circuitos programados com arduino. Na verdade, tenho um projeto em mente, mas precisava antes de estudar o uso destes componentes eletrónicos.

Antes de mais, displays há muitos...usei um vulgar, o 1602, que se encontra no mercado nacional por valores que rondam os 7€ e no aliexpress por valores inferiores a 2€ . Enfim, um componente acessível com um potencial importante em projetos que envolvam a interação com o utilizador.


Começo por referir que a maioria dos displays comprados precisa de ser soldado a uma barra de 16 pinos para permitir a ligação à breadboard. Se está a pensar comprar o LCD e não tem recursos de soldadura, justifica pesquisar e pagar mais por um LCD com a barra de pinos já soldada. Na net é possível encontrar tutoriais sobre soldadura de LCD.


A principal vantagem deste LCD é que, usando um driver compatível com o Hitachi HD44780, partilha a pinagem com um grande número de LCD (que são geralmente reconhecíveis por terem 16 pinos) e tem à sua disposição livrarias incluídas já no software do arduino que tornam a sua programação bastante acessível.

A pinagem e a montagem de circuitos entre o LCD e os arduino estão ilustrados na apresentação eletrónica que se segue; também as principais funções associadas à livraria usada para programar com estes LCD estão aí explicadas. Vale a pena acrescentar que, ao contrário de que foi feito nos tutoriais que consultei, é possível prescindir da resistência variável que controla o contraste do LCD - a solução passa por usar as saídas PWM do arduino e está descrita no site BR-Arduino.org.

Acho que merece maior explicação a última tarefa proposta na apresentação eletrónica, a construção de um ohmímetro. Como a estratégia de resolução pode não ser evidente para quem tenha menos prática de eletrónica, vou explicá-la com algum detalhe:

O caminho que proponho é o recurso ao um divisor de tensão. Um divisor de tensão é uma técnica de projeto utilizada para gerar uma tensão elétrica proporcional à tensão de alimentação (e que encaminharemos para a entrada analógica A0):


No projeto em concreto, Vin é ligado à tensão de alimentação, 5V, R1=10 kohm, Vout é ligado à entrada analógica A0 e R2 é a resistência cujo valor se pretende medir:


Claro que o valor lido na entrada A0 não está em volt, mas num valor entre 0-1023, pelo que é necessário, a partir de uma regra de 3 simples, e antes de resolver os cálculos referidos anteriormente, converter o valor lido diretamente em A0 para tensão de valor entre 0-5V.

Em resumo: depois de ligar o divisor de tensão à entrada analógica A0, há que:

  1. Medir o valor da entrada A0 (que estará entre 0-1023);
  2. Converter o valor anterior para tensão: 
  3. Calcular o valor da resistência R:
  4. Enviar o valor de R para o display LCD;
  5. Fazer um delay (eu fiz de 1s) antes de nova medida.

Deixo a apresentação eletrónica com a introdução ao estudo do LCD 1602...



...e um pequeno vídeo com o nosso ohmímetro em funcionamento:

segunda-feira, 30 de maio de 2016

Introdução à linguagem C - servomotor

A terceira sessão de introdução à programação de arduinos em C focou-se no controlo de um servomotor.

Como fiz na sessão anterior, preparei um documento com um resumo das sessões anteriores que distribui pelos alunos para consulta.

A ideia foi começar por compreender a forma de controlar um servomotor com arduino, recorrendo à livraria Servo.h, e depois ir acrescentando componentes até ter uma simulação de controlo de abertura de uma cancela.

A resposta dos alunos presentes foi, mais uma vez, muito positiva e terminámos as tarefas propostas 15 minutos antes do previsto.

Esta será a última sessão com estes alunos este ano letivo. Em jeito de balanço, refiro que, do meu ponto de vista, a introdução à programação de arduinos em linguagem gráfica antes de passar para a linguagem C foi muito gratificante - os alunos envolvidos demonstraram uma facilidade nesta transição que até a mim (que sou pessoa muito otimista) me surpreendeu...

Quanto ao método de trabalho adotado este ano, em regime de clube a que os alunos compareciam voluntariamente, senti que o horário do clube talvez não tenha sido o ideal. Com o intuito de conseguir abrir o clube a todas as turmas de 10º ano de ciências, os 90 minutos do clube foram marcados na tarde livre dos alunos, o que, para alunos de 10º ano, pode ser pesado dado o que lhes é exigido em termos de estudo. Uma alternativa mais viável seria marcar o clube numa hora de almoço (os alunos conseguem comer em muito menos tempo que o intervalo de almoço prevê) ou a seguir a uma última aula, embora essa opção torne difícil conciliar o horário das quatro turmas em conjunto...

Uma última reflexão: as atividades do clube decorreram na biblioteca da escola o que, sendo bastante agradável - a nossa biblioteca é mesmo muito simpática - não permitiu que os alunos pudessem desenvolver trabalho nos seus tempos livres. Um espaço disponível para que alunos, devidamente autorizados, pudessem trabalhar de forma autónoma era mesmo muito bom...hoje uma aluna dizia-me que era uma pena não podermos continuar os trabalhos nas férias - e, de facto, talvez não estejamos a proveitar da melhor forma a disponibilidade da maioria dos alunos nesse período...

Deixo a apresentação que explorei nesta sessão...



...e um pequeno vídeo com a "cancela" construída pela Fabiana a funcionar:

terça-feira, 24 de maio de 2016

Introdução à linguagem C - entradas analógicas

Na segunda sessão de introdução à programação de arduinos em linguagem C, concentrámo-nos na exploração das entradas analógicas.

Comecei por distribuir aos alunos um resumo da sessão anterior, com as funções dadas, os símbolos usados, os tipos de variáveis e os comandos relativos à porta série (os últimos slides da apresentação da sessão #1). Distribui também a datasheet do TMP 36, o sensor de temperatura a usar nesta sessão.

Voltei a iniciar a sessão com o BlocklyDuino, que me parece ser uma forma mais simples para esquematizar o programa a partir do qual se desenvolverão os trabalhos. O programa em C gerado pelo BlocklyDuino é sempre alvo de análise, pelo que a intenção é interiorizar a estrutura de um programa em C.

A entrada analógica começou por ser explorada através de uma resistência variável que foi substituída depois por um sensor de temperatura. No final da sessão, os alunos obtiveram um termómetro cujos valores podiam ser lidos na janela da porta série.

Pontos importantes a realçar:
  • A análise da datasheet. Os alunos tiveram que interpretar a pinagem do TMP 36 a partir dos esquemas da datasheet e montá-lo a partir desses dados;
  • Os cálculos envolvidos. Sem que fossem cálculos complicados, foram importantes para refletir sobre a importância da definição do tipo de variáveis;
  • A interdisciplinaridade. O facto de compreenderem a necessidade de obter a equação de uma reta a partir dos gráficos disponibilizados na datasheet. E de adaptarem os dados fornecidos às suas necessidades (o gráfico fornecido teve de ser "redesenhado" de forma a que o eixo dos xx' passasse para yy' e vice-versa);
  • Muito importante: a repetição de instruções dadas na sessão anterior. Como os próprios alunos referiram "não é difícil, é preciso é lembrarmo-nos das funções disponíveis".
Nesta sessão, não foi feita, por falta de tempo (as nossas sessões estão programadas para 90 min) a tarefa "Agora Tenta #4". Todas as restantes tarefas foram cumpridas.

Deixo a apresentação que explorei nesta sessão:


terça-feira, 17 de maio de 2016

Introdução à linguagem C - entradas e saídas digitais

Como já tinha referido em post anterior, foi espontaneamente que os alunos que frequentam o Espaço Programação e Eletrónica (10º ano) sentiram a necessidade de ir além da programação gráfica de arduinos.

Por isso, depois de concluído o projeto da Casa Inteligente, voltámos ao registo de aula mais convencional, com cada um deles num computador, com o arduino , e a seguir as tarefas por mim propostas.

Nesta sessão, explorámos a estrutura de um programa típico em C, os símbolos usados, as funções pinMode, digitalWrite, digitalRead, delay e if. Introduzimos ainda alguns tipos de variáveis e fizemos a comunicação com o computador através de porta série. 

Confesso que quando preparei a aula, a achei muito extensa e presumi que não seria possível terminá-la em 90 minutos. Mas não só a terminei, como a terminei 10 minutos antes, como os alunos continuavam frescos e sem sinais de cansaço.

A facilidade com que os alunos responderam a esta introdução foi motivo de reflexão da minha parte. Devo referir:
  • A montagem de circuitos estava interiorizada das sessões anteriores. Não foi factor com que tivesse de me preocupar;
  • A arquitetura do arduino era familiar a todos. Noção de digital / analógico / PWM, entrada / saída foi algo que pude referir sem perder tempo em explicações;
  • Embora a programação em C exija o conhecimento das funções associadas e dos símbolos usados, o background de uma linguagem gráfica deu aos alunos capacidade de perceber de antemão quais as instruções necessárias para que um programa reagisse de determinada maneira (quando introduziram o interruptor, por exemplo, assumiram logo a necessidade de uma variável).

Em conclusão, foi muito positiva para mim a experiência de iniciar a exploração do arduino em linguagem gráfica com os alunos para depois lhes apresentar a linguagem C. É um método que exige mais tempo, é certo, mas o processo de programação é feito de forma mais natural e acessível para a maioria dos nossos jovens.

Deixo a apresentação que explorei nesta sessão: