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

terça-feira, 4 de julho de 2017

Robôs low cost#3 - detetando e contornando obstáculos

Para que o robô consiga ter um comportamento "inteligente", detetando e contornando obstáculos, há que dar-lhe a capacidade de "ver" o que o rodeia. São várias as formas de o conseguir - com detetores de infravermelhos, câmaras, sensores de toque...como o nosso kit low cost vinha equipado com um sensor de ultrassons SR04, foi esse o que o alunos usaram.

O SR04 é dos sensores de ultrassons mais comuns para pequenos projetos. Permite a medida de distâncias entre 2 cm e 4 m com um ângulo de sensibilidade de 15º.

Apresenta 4 pinos, dois para a alimentação (Vcc e GND), um para o trigger (o "disparo" de um sinal) e o restante para receber o som refletido (o eco):


As ligações realizadas foram as seguintes:


Assim, ao robô montado na sessão anterior, acrescentámos o sensor de ultrassons de acordo com o seguinte esquema:

Já aqui no blog tínhamos explorado o sensor de ultrassons no âmbito da programação gráfica. Os conceitos associados a este sensor encontram-se neste post, e por isso não nos alongaremos com mais considerações quanto ao princípio de funcionamento de um sensor deste tipo.

A programação deste sensor em C é facilitada com uma série de livrarias disponíveis que evitam a preocupação de enviar, detetar e analisar sinais, disponibilizando uma série de comandos que incluem todos esses passos. Usámos a Ultrasonic.h, e explorámo-la através dos exemplos dados.

De forma a testar o funcionamento do sensor, usámos o programa seguinte que escreve na porta série a distância (em cm) a que um obstáculo é detetado pelo sensor:

Com o sensor a funcionar, houve que adaptar a marcha do robô de acordo com a distância lida pelo sensor. O objetivo era manter o robô a andar em frente caso o obstáculo estivesse a mais de 20 cm e alterar a sua trajetória caso o obstáculo estivesse mais perto que essa distância.

Nesta fase, os primeiros testes revelaram que o controlo da velocidade através das saídas PWM não é suficiente para as baixas velocidades pretendidas. Na verdade, para valores mais baixos registados nas saídas PWM, os motores não tinham força para se moverem. A opção passou por criar períodos de ponto morto de forma a diminuir a velocidade do robô.


Como ilustração, deixamos o aspeto do robô nesta fase...


...e um vídeo com o robô em funcionamento (quando o vídeo foi feito, o robô ainda só parava na presença do obstáculo. Com o programa proposto, perante o obstáculo o robô anda para trás, gira e retoma a marcha):

terça-feira, 2 de fevereiro de 2016

Espaço Programação e Eletrónica - Servo Motores

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.

A base de trabalho foi uma exploração de programação de servo motores em S4A que realizei o ano passado e que adaptei.

Deixo a seguir a apresentação eletrónica que apliquei nesta sessão. Até breve!




terça-feira, 26 de janeiro de 2016

Espaço Programação e Eletrónicas - Entradas analógicas

Mais uma semana, nova sessão do Espaço Programação e Eletrónica na Escola Secundária D. João II. O dia estava frio e chuvoso e eu receei que o conforto de uma tarde em casa levasse a melhor sobre uma sessão de arduino na escola, mas foi com prazer que pude contar com 10 entusiastas...

Para esta sessão, adaptei a Aula 4 que tinha preparado o ano passado. Fazendo a comparação com o público-alvo do ano passado, não posso deixar de notar a facilidade com que estes alunos repetem as ligações que aprenderam em semanas anteriores. As ligações de LED são já um dado adquirido e há alunos com uma capacidade muito grande de arrumar já os circuitos na breadboard, tornando-os compactos e facilmente compreensíveis. Alguns alunos começam também a interpretar de forma natural os circuitos esquemáticos que vou apresentando (e nesta fase estou a apresentar primeiro o esquemático para interpretação, e depois mostro a vista de breadboard para que procedam à montagem nos seus lugares).

Quanto à programação, nota-se um aumento de autonomia. Todos os alunos cumpriram as tarefas propostas, sendo que nem foi necessário mostrar uma solução para o último exercício - todos os alunos o cumpriram de forma autónoma e praticamente sem ajuda.

Deixo a apresentação explorada nesta sessão:



segunda-feira, 18 de janeiro de 2016

Espaço Programação e Eletrónica - Entradas e saídas digitais

De acordo com o previsto, iniciou hoje, no âmbito das atividades do Clube de Robótica da Escola Secundária D. João II, o Espaço Programação e Eletrónica tendo por público-alvo alunos de 10º ano de Ciências em regime de voluntariado.

Durante o primeiro período, foram realizadas workshops de introdução à programação de arduinos a todos os alunos das quatro turmas de 10º ano da área de Ciências e Tecnologia e ainda uma sessão a uma turma do 11º ano (a sessão realizada ao 11º ano esteve inserida na iniciativa Hour of Code), num total de 150 alunos.

No início do 2º período, fui à sala de aula de cada um dos 10º anos, informei quanto ao horário deste espaço e fiz o levantamento dos alunos interessados em frequentá-lo. Fiquei assim com 21 contactos, para os quais enviei um email mais pormenorizado quanto à minha proposta de trabalho. 15 desses alunos estiveram presentes na primeira sessão que hoje decorreu.

Devo referir que, de forma a conciliar horários, a sessão ficou marcada para a tarde livre de cada uma das turmas envolvidas, o que, reconheço, não é simpático para alunos do secundário, que têm já uma carga horária tão preenchida...

Dito isto...hoje tive o prazer de realizar uma sessão de programação de arduinos para um grupo de alunos francamente interessado e com um ritmo de trabalho muito promissor. Os trabalhos decorreram na biblioteca da escola, o que me agrada por sair do ambiente de sala de aula, ser um espaço mais aberto, onde os nossos trabalhos podem co-habitar com outras atividades e outros alunos que por ali passam e ali desenvolvem outras tarefas. Um ambiente menos formal e mais arejado, enfim.

Para este público-alvo, adaptei a aula de entradas e saídas digitais que preparei o ano passado, avançando já com o código de cores das resistências e desenho esquemático. A leitura do desenho esquemático para este nível etário parece-me fundamental, já que são estes os alunos que começarão a procurar projetos na net e é evidente que o que encontrarem estará em esquema e não em vista de breadboard, pelo que esta será uma competência importante a desenvolver.

Deixo a apresentação que explorei hoje e cujas atividades foram cumpridas por todos os grupos numa sessão de 90 minutos.



quinta-feira, 23 de abril de 2015

O sensor de ultrassons SR04 e programação em S4A

O SR04 é dos sensores de ultrassons mais comuns para pequenos projetos. Permite a medida de distâncias entre 2 cm e 4 m com um ângulo de sensibilidade de 15º. A análise da respetiva datasheet, deixou-me bastante confiante e achei eu que planear um pequeno trabalho com este sensor, arduíno e S4A ia ser canja. Toda a gente sabe que a ignorância é muito atrevida...

Este sensor tem 4 pinos, dois para a alimentação (Vcc e GND), um para o trigger (o "disparo" de um sinal) e o restante para receber o som refletido (o eco).


O modo de funcionamento é simples: o envio de um impulso de 10 us (10^-6 s) para o pino do Trigger, resulta na emissão por parte do SR04 de um ciclo de 8 impulsos de ultrassons na gama dos 40 kHz. Nesse momento, o SR04 ativa o pino Echo para 5V que só voltará a 0V no momento em que receber o eco do sinal enviado. Eis o esquema temporal:



Sabendo que o som tem uma velocidade média de 340 m/s, é possível medir a distância que o som percorreu entre ter sido emitido e rececionado de novo. A distância ao obstáculo será metade desse valor.

Continhas, então: d(obstáculo) = d(percorrida pelo som)/2
                             d(obstáculo) = v(som)*tempo(echo)/2

Como vamos medir o tempo do impulso em us e a distância ao obstáculo em cm, há que converter a velocidade do som em cm/us: 340 m/s = 0,034 cm/us.

Assim, d(obstáculo) = 0,017*tempo(echo) ,  tempo(echo) medido em us; d(obstáculo) medido em cm.

Assim..o que poderia correr mal? Liguei o Trigger ao pin13, o Echo à entrada 2 e...nada!!! Por mais impulsos de 10 us que enviasse, não detetava nada na entrada 2. Uma pesquisa mais atenta relativamente à comunicação entre o arduino e o S4A revelou-me que o S4A interage com o arduino atualizando os estados dos atuadores e dos sensores a cada...75 ms! Valor impossível de conciliar com sinais de 10 us!

A solução passou por alterar o firmware que o arduino disponibiliza. Para isso tive a ajuda de um familiar próximo. A ideia foi alterar o mínimo possível o firmware original. Reservámos para o funcionamento do sensor os pinos D13 e A05. O pino D13 passou a funcionar como entrada e saída, o A05 devolve o valor da distância em cm.
Foi gerado um ciclo, que se repete de meio em meio segundo, em que o pino D13, inicialmente uma saída, envia um impulso de 10us. Passa então a ser definido como entrada e lê a duração do impulso do pino Echo. Este tempo é multiplicado pelo valor de 0,017, como explicado acima, e enviado para o pino A05.

O firmware realizado está disponível no seguinte endereço: http://densare.pt/files/zip/S4AFirmware16_SR04.zip

NOTA IMPORTANTE: O firmware disponibilizado só funciona corretamente com o sensor SR04 ligado à entrada 13. Sem o sensor devidamente ligado, o firmware fica à espera de um dado indefinidamente e em ambiente S4A a placa surge como não reconhecida.

Deixo então a minha proposta de trabalho para envolver o SR04 em circuitos programados através de Scratch...


...o circuito esquemático do último exercício proposto...




...e um pequeno vídeo com o circuito do sensor de proximidade em funcionamento:




Como nota final, não posso deixar de referir que levei o circuito do sensor montado para uma aula de Física e Química de 8º ano, onde os alunos estão  a dar o som. Foi interessante porque deu para exemplificar o facto de os ultrassons não serem audíveis, o fenómeno do eco, o funcionamento do sonar. Os alunos identificaram o circuito nas luzes de sinalização de lugar ocupado / livre do parque de estacionamento do centro comercial cá da terra. E pediram um workshop de arduino para o verão. E eu estou com vontade de lhes fazer a vontade...