Uma espécie de diário de uma professora que começou por explorar as potencialidades do Scratch na programação de arduinos...e que depois foi experimentando novos caminhos com os seus alunos!
O circuito estava pronto, havia um programa funcional (caso hoje não se conseguisse fazer nenhum - o que não aconteceu!), preparei um caixa, cartão, junções para fios, cola, tecido de feltro...e propus hoje aos alunos que concluíssem o projeto e que construíssem um programa próprio para ele.
Foi um hora e meia de trabalho árduo, muita colagem, muito fio, tanto fio...mas temos o projeto a funcionar!
Na minha opinião, este é um trabalho fundamental, porque passar da breadboard para o mundo real agrega tantas competências e saberes, exige tanta paciência e capacidade de resistir à frustração que é uma pena que o ensino atual não preveja tempo para este tipo de atividades no período letivo.
Como o Dia dos Namorados já passou, institucionalizámos a Semana dos Namorados. Afinal a celebração do amor e da amizade merece bem um semana inteirinha!
Seguem algumas fotos do projeto terminado...
O nosso coração concluído (vista de frente e vista de cima)
...e um pequeno vídeo com o projeto em funcionamento...
Ao tempo que eu queria experimentar motores de passo (motores passo a passo ou step motor)! Numa das minhas deambulações pelo aliexpress, dei com estelote de dois motores de passo e respetivo controlador a 3,07€ (agora está por metade do preço) e não resisti. Vieram cá para casa dois motores 28BYJ - 48 (tensão de alimentação: 5V) e duas placas com o driver ULN2003 preparadas para ligar ao Arduino.
O motor de passo é controlado através de um sinal digital e pode ser uma boa escolha sempre que se pretender movimentos precisos. O ponto forte de um motor de passo não é a sua força(torque) nem a sua capacidade de desenvolver grandes velocidades, mas a possibilidade de controlar movimentos de forma precisa.
Há vários tipos de motores de passo: os bipolares (4 fios), os unipolares (5 fios), os unipolares / bipolares (série) (6 fios) e os unipolares / bipolares (série/paralelo) (7 fios). Como aquele com que trabalhei foi um unipolar, será sobre esse que incidirá este estudo.
Um motor unipolar tem dois enrolamentos por fase. Os extremos das bobinas correspondem aos quatro fios de controlo; o 5º fio é ligado geralmente à terra (com o controlador que usei, não tive de me preocupar com essa ligação).
O controlo do motor é feito através de combinações digitais de 4 bits. O motor pode operar em passo completo ou em meio passo. A exploração de cada uma das formas de operação encontra-se feita na apresentação que se segue.
Quanto à programação, existem já uma série de livrarias e programas em C para trabalhar com o Arduino, muitas delas disponíveis no próprio software do Arduino (no menu File --> Example). Mas como o intuito deste blog é explorar linguagens gráficas...a minha primeira opção foi experimentar o S4A. Tal como previ, a velocidade de comunicação entre o S4A e o Arduino, não permitia o movimento do motor. Foi então que me deparei com o Snap4Arduino e fui à aventura...com uma atualização dos estados dos atuadores e dos sensores feita a cada 15 ms (contra os 75 ms do S4A), foi possível explorar o controlo do motor de passo com uma linguagem gráfica (comprometendo, claro, a velocidade do motor, que é muito baixa usando este tipo de plataformas).
A adaptação ao Snap4Arduino foi perfeitamente pacífica. O único contratempo foi não conseguir ligar um dos interruptores à entrada 1, não percebi porque motivo - o Snap4Arduino desconectava repetidamente a placa. Acabei por ligar os interruptores às entradas 2 e 3 e não tive nenhum problema.
Deixo então a minha proposta de trabalho para controlo de motores de passo recorrendo ao Snap4Arduino...
...o circuito esquemático do último exercício proposto...
...e um pequeno vídeo com o "circuito de controlo de estores" em funcionamento:
Estando a testar um novo componente eletrónico que adquiri recentemente voltei, à semelhança do que já me tinha acontecido com o SR04, a defrontar-me com a lentidão imposta pelo S4A na comunicação com o arduino, cuja atualização dos estados dos atuadores e dos sensores é feita a cada 75 ms.
No próprio site do S4A, encontrei uma plataforma de programação de arduino por blocos alternativa, o Snap4Arduino, que está a ser desenvolvida pela mesma equipa do S4A. Os pontos fortes e fracos do Snap4Arduino são, de acordo com a equipa que o desenvolve:
Pontos fortes:
Corre em praticamente todas as placas Arduino (incluindo a Mega e a Nano);
Os pinos do arduino podem ser configurados como entradas ou saídas (ao contrário do que acontece no S4A, onde estamos limitados à definição de entradas e saídas imposta pelo firmware);
Faz a tradução de pequenos programas para C (ainda em versão experimental - eu tentei e não consegui...).
Pontos fracos:
Não é compatível com o S4A.
A instalação do Snap4Arduino é feita a partir do respetivo site:http://s4a.cat/snap/
Para que a comunicação entre o Snap4Arduino e a placa de Arduino seja possível, é necessário fazer o upload para a placa arduino do Firmata, pequeno programa que tem a vantagem de estar já incluído nos exemplos do software do próprio Arduino. Assim, há simplesmente que:
Há já algum tempo que tinha a ideia de construir um termómetro cujos valores medidos fossem indicados através de um servo motor.
Porque era o que cá tinha em casa, usei como sensor de temperatura um TMP36. Através da análise da respetiva datasheet, é possível obter a respetiva pinagem (o meu sensor é do tipo TO-92) e as curvas caraterísticas:
Da análise das figuras 5 e 6, apercebemo-nos que o TMP36 é linear entre os 0ºC e os 100ºC (aproximadamente). Eu decidi escolher como valores limites do meu termómetro os 0ºC e os 50ºC.
Liguei então o TMP36 à entrada analógica A0, o servo motor à saída D8 e os LED verde e vermelho às saídas D12 e D11, respetivamente. Sem que consiga explicar porquê, a minha experiência diz-me que, com servo motores ligados, a saída D13 deixa de funcionar devidamente e por isso evito usá-la em projetos com servo motores.
A primeira versão do projeto mostrou-se muito instável, com o sensor a saltar repentinamente para valores incoerentes. Tentei estabilizar o seu funcionamento, ligando dois condensadores na alimentação tanto do sensor como do motor, mas não obtive bons resultados. A estabilização deu-se quando tornei a alimentação do servo motor independente do arduino, ligando-a a uma entrada USB do computador. Estou certa que foi essa a solução que estabilizou o funcionamento do circuito; ainda assim, optei por deixar os condensadores.
Em termos de programação, comecei por transformar o valor da entrada analógica (0-1023) em valores de tensão (0 - 5V):
Depois, houve que, a partir do gráfico da figura 6 da datasheet do TMP36, transformar esse valor em temperatura (em ºC):
Sendo o valor 105,3 o declive da reta b) da figura 6:
A partir do valor da temperatura obtido, tive de definir o ângulo com que o servo motor devia rodar. Como entre os limites que escolhi existe um intervalo de 50ºC, achei que um ângulo de 100 graus seria adequado, com cada ºC a fazer o motor rodar 2 graus. Centrei a atuação do motor entre os 40 graus e os 140 graus. Assim, o ângulo definido pelo motor para cada valor da temperatura é dado por (em graus):
Para que o motor não andasse aos solavancos, o valor da temperatura indicado na equação anterior foi arredondada às unidades.
Caso o valor da temperatura desça abaixo dos 0ºC ou suba acima dos 50ºC, fiz ligar o LED vermelho e "congelei" a posição do motor nos 40 graus e 140 graus, respetivamente.
Deixo a minha proposta de trabalho para o circuito de eletrónica e o programa em Scratch...
...o circuito esquemático...
...e um pequeno vídeo com o termómetro em funcionamento:
A proximidade do Dia dos Namorados levou-me a pensar que podia aproveitar a efeméride para fazer um pequeno projeto no Espaço Eletrónica e Programação, envolvendo os alunos na sua montagem, e dando visibilidade ao trabalho que vamos fazendo junto da comunidade educativa.
Tinha de ser um projeto simples e que os alunos compreendessem em pouco tempo.
Surgiu-me a ideia de fazer um pequeno coração com LED que fossem piscando de forma diferente sempre que alguém acionasse um sensor ou um interruptor. Por experiências anteriores, em pequenos projetos de estrutura pouco robusta, a substituição de um interruptor de pressão por uma fotorresistência pareceu-me a melhor opção.
E portanto a ideia é esta:
Como, em S4A, as saídas digitais do arduíno estão limitadas a quatro, usei, à semelhança do que já tinha feito no Projeto Jardim iluminado de forma automática, o LM324, que integra 4 amplificadores operacionais. Ligando a saída de cada amplificador a 4 LED, consegui controlar 16 LED (em grupos de 4). Também neste projeto a alimentação dos LED teve de ser autónoma do arduíno, usando para isso outra porta USB do computador.
Imaginei 3 formas diferentes de fazer ligar os LED e, em vez de criar uma sequência definida, fiz o programa escolher aleatoriamente um delas cada vez que a fotorresistência é acionada.
Deixo a minha proposta de trabalho para o circuito de eletrónica e o programa em Scratch...
...o circuito esquemático...
E um pequeno vídeo com o circuito em funcionamento (cancelei para este vídeo o fator de aleatoriedade, de forma a passar sequencialmente por todas as formas de fazer os LED piscar):
Apesar de fugir ao âmbito da programação de arduinos, não posso deixar de partilhar o início dos trabalhos do Espaço LEGO da Escola Secundária D. João II.
Com o prémio obtido no projeto Rato da Biblioteca, a escola obteve dois conjuntos LEGO EV3 com os quais começámos agora a trabalhar com alunos do 7º ano, todas as 4ªF à tarde na biblioteca da escola.
Uma informação sobre o início deste espaço, com o respetivo horário, foi lida em todas as turmas do 7º ano e deixámos cartazes na biblioteca, mas o que trouxe os alunos foi mesmo trazer os kits da LEGO para a biblioteca da escola e começar a montá-los e a programá-los. Os alunos que por ali estavam, ou nos computadores ou em pequenos grupos, aproximaram-se e criou-se um grupo espontâneo que, achando graça aos trabalhos, prometeu voltar na semana seguinte.
A programação dos robôs foi feita através do programa da LEGO Mindstorm, em tablets, e também através de aplicações, mais limitadas, nos telemóveis dos alunos.
Criei um pequeno manual com alguns dos blocos fundamentais do software da LEGO que partilharei na página de facebook, por achar que é material que foge ao âmbito deste blog .
Devo dizer que conto com a ajuda inestimável de três alunos do curso vocacional que, tendo apetência para esta área, ajudam os colegas na montagem e programação dos robôs.
E a brincar, a brincar, já falámos de programação, sensores e motores. E foi só a primeira sessão!
Quando a ideia é encaminhar os trabalhos de forma a que os alunos estejam aptos a desenvolver os seus próprios projetos, a exploração dos servo motores é essencial, já que é um componente relativamente barato que pode ser usado de forma simples e com várias aplicações (cancelas, braços de robôs, apontadores...).
O controlo de servo motores é muito fácil a partir do S4A. O interessante é a elaboração de programas em que os servo motores sejam um componente de um circuito maior, com um fim específico.
Nesta sessão, há a registar:
Os alunos estão já a fazer as suas ligações em breadboard partindo do circuito esquemático - são alunos que nunca tinham trabalhado com circuitos eletrónicos e estão a fazê-lo depois de apenas três sessões. Estou muito motivada com esta evolução!
O facto de eu me ter envolvido muito menos nos seus trabalhos. A montagem de circuitos precisou já de muito pouco apoio e o desenvolvimento em S4A do exercício sugerido, de um grau de dificuldade maior que nas sessões anteriores, foi feito de forma muito autónoma, na base da experimentação e da tentativa - erro.