• Nenhum resultado encontrado

DESENVOLVIMENTO DE ROTEIROS EXPERIMENTAIS PARA DISCIPLINAS DE PROGRAMAÇÃO UTILIZANDO PLATAFORMA ROBÓTICA POLOLU

N/A
N/A
Protected

Academic year: 2021

Share "DESENVOLVIMENTO DE ROTEIROS EXPERIMENTAIS PARA DISCIPLINAS DE PROGRAMAÇÃO UTILIZANDO PLATAFORMA ROBÓTICA POLOLU"

Copied!
73
0
0

Texto

(1)

UNIVERSIDADE FEDERAL DO RECÔNCAVO DA BAHIA CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS BACHARELADO EM CIÊNCIAS EXATAS E TECNOLÓGICAS

DESENVOLVIMENTO DE ROTEIROS EXPERIMENTAIS PARA

DISCIPLINAS DE PROGRAMAÇÃO UTILIZANDO PLATAFORMA

ROBÓTICA POLOLU

MARIANA CARMO DE SOUZA

CRUZ DAS ALMAS/BA 2019

(2)

DESENVOLVIMENTO DE ROTEIROS EXPERIMENTAIS PARA

DISCIPLINAS DE PROGRAMAÇÃO UTILIZANDO PLATAFORMA

ROBÓTICA POLOLU

Trabalho de conclusão de curso apresentado à Universidade Federal do Recôncavo da Bahia como parte do requisito parcial para obtenção do título de Bacharel em Ciências Exatas e Tecnológicas.

Orientador: Prof. Dr. Geydison Gonzaga Demetino

CRUZ DAS ALMAS/BA 2019

(3)

DESENVOLVIMENTO DE ROTEIROS EXPERIMENTAIS PARA

DISCIPLINAS DE PROGRAMAÇÃO UTILIZANDO PLATAFORMA

ROBÓTICA POLOLU

Aprovado em: ___ /___ /____

(4)

Agradeço primeiro a Deus por me dar saúde e forças em toda essa jornada!! Um agradecimento especial a minha Mãe Aurenice Souza, pelo carinho, amor e todo esforço dedicado para que eu conseguisse estar onde hoje estou. Minha gratidão a minha Irmã gêmea Marília Souza por todo carinho, amor, apoio e companheirismos, mesmo com a distância.

Agradeço aos meus irmãos e família que mesmo com a minha ausência ofereceram o apoio e incentivo necessário. Agradeço ao meu companheiro de jornada Lucas Bacelar por todo carinho, amor, compreensão e ajuda na conclusão desta etapa. Ao meu cunhado Caio Valverde pelo apoio e ajuda necessária para o desenvolvimento deste trabalho. Aos amigos de longas datas e aos que conheci nessa caminhada, minha gratidão por todo conforto e ânimo que me deram. Vocês são maravilhosos!

Agradeço ainda aos mestres que muito contribuíram para formação que tive até aqui. Em especial cito o orientador Prof. Dr. Geydison Gonzaga Demetino por estar presentes durante essa jornada, compartilhando seu conhecimento e oferecendo todo o apoio e suporte.

(5)

A persistência é o caminho do êxito. Charles Chaplin

(6)

índices de desistência por partes dos alunos ingressantes em disciplinas iniciais de programação do ensino superior e técnico. Se tratando de disciplinas com conteúdos abstrato de difícil compreensão, o método tradicional de ensino tem sido pouco eficaz, por possuir práticas repetitivas e sem aplicabilidade concreta do programa executado. Por conta disso, busca-se desenvolver práticas experimentais utilizando a “Robótica Educacional” como elemento facilitador e motivador. Esse trabalho trata-se do desenvolvimento de roteiros experimentais utilizando a plataforma robótica 3pi, como instrumento auxiliar de ensino, visando desenvolver habilidades ao aluno como, raciocínio lógico, criatividade e autonomia. Baseado nos conteúdos da ementa das disciplinas de programação, propõe a que a execução do programa que antes se direcionava ao compilador, visto na tela do computador, seja direcionado para o mundo real, através das ações que o robô executará. O robô 3pi mostrou-se satisfatório em executar e demonstrar os programas criados em testes com os roteiros propostos.

(7)

rates of students entering in initial programming disciplines in higher and technical education. In the case of disciplines with abstract content difficult to understand, the traditional method of teaching has been ineffective, because it has repetitive practices and no concrete applicability of the program executed. Because of this, it is concerned with developing experimental practices through "Educational Robotics" as a facilitating and motivating element. This work deals with the development of experimental scripts using the 3pi robotic platform as an auxiliary teaching instrument, aiming to develop student skills such as logical reasoning, creativity and autonomy. Based on the contents of the syllabus of the programming disciplines, it proposes that the execution of the program that was previously directed to the compiler, seen on the computer screen, be directed to the real world through the actions that the robot will perform. The 3pi robot proved to be satisfactory in executing and demonstrating the programs created in tests with the proposed scripts.

(8)

Figura 1: Bloco LEGO Mindstorms NXT com sensores e atuadores ... 21

Figura 2: Plataforma Arduino... 22

Figura 3:Robô Pololu 3pi ... 23

Figura 4: Motoredutor 30:1 do robô 3pi ... 23

Figura 5: Variação das velocidades dos motores do 3pi ... 24

Figura 6: Circuito do sensor utilizado no robô 3pi. ... 25

Figura 7: LCD compacto... 25

Figura 8: LEDs do robô 3pi... 26

Figura 9: Botões de pressão do 3pi ... 26

Figura 10: Conector ISP de 6 pinos ... 27

Figura 11: Vista superior do robô Pololu 3pi ... 28

Figura 12: Vista inferior do robô Pololu 3pi ... 28

Figura 13: Ambiente de desenvolvimento integrado (IDE) do Arduino. ... 30

Figura 14: Programador externo USBasp ... 31

Figura 15: Instalação de drivers apropriados para o programador externo. ... 31

Figura 16:Biblioteca AVR instalada no IDE do Arduino. ... 32

Figura 17: Placa selecionada no IDE do Arduino ... 32

Figura 18: Programador externo USBasp selecionado no IDE do Arduino. ... 33

Figura 19: :(a) Número ímpar o robô 3pi anda para trás; (b) Número par o robô 3pi anda para frente; ... 36

Figura 20: Botões A, B e C de controle do usuário do robô 3pi. ... 37

Figura 21: (a) Ação do robô 3pi ao pressionar o botão B; (b) Ação do robô 3pi ao pressionar o botão A ou C. ... 39

Figura 22: Trajetória em forma de círculo para o robô 3pi. ... 41

Figura 23:Direção da trajetória do robô 3pi e obstáculo de parada. ... 43

Figura 24:Espaço de percurso do robô 3pi delimitado por linha preta. ... 45

Figura 25: Conexão Robô 3pi e computador com auxílio do programador externo. . 50

Figura 26: Código copilado e carregado para a plataforma do robô 3pi. ... 50

Figura 27: Ação do robô 3pi para número par. ... 52

Figura 28: Ação do robô 3pi para número ímpar. ... 52

(9)

Figura 32: Sensor identifica superfície branca e o robô 3pi anda para frente. ... 60 Figura 33: Robô 3pi anda até encontrar obstáculo (linha preta)... 63 Figura 34: Sensor identifica superfície preta e robô 3pi desvia da linha. ... 63

(10)

LISTA DE FIGURAS ... 8 1. INTRODUÇÃO ... 12 1.1. Justificativa ... 12 1.2. Objetivos ... 13 1.2.1. Geral ... 13 1.2.2. Específicos ... 13 1.3. Estrutura do Trabalho ... 13 2. REVISÃO DE LITERATURA ... 15 2.1. Ensino de programação ... 15

2.2. Dificuldades no ensino e aprendizagem de programação ... 16

2.3. Metodologias alternativas ao ensino de programação ... 18

2.3.1. Ensino de programação através de robótica ... 19

2.4. A plataforma Pololu ... 22

2.4.1. Principais componentes ... 23

2.4.2. Mapeamento dos pinos do 3pi no microcontrolador Atmega328-Arduino ... 27

3. MATERIAIS E MÉTODOS ... 30

3.1. Montagem do ambiente de programação para o Robô 3pi ... 30

3.2. Configurando o Arduino IDE: ... 32

3.3. Roteiros práticos para ensino de programação ... 33

3.3.1. Estruturas de tomada de decisão ... 35

3.3.2. Estruturas de repetição ... 40

(11)

5. CONCLUSÃO ... 67

5.1. Considerações Finais ... 67

5.2. Trabalhos futuros ... 67

REFERÊNCIAS ... 68

(12)

1. INTRODUÇÃO

O ensino de programação nos cursos de ensino superior, em particular aqueles voltados a área de exatas, possuem em sua matriz curricular disciplinas iniciais que buscam introduzir a linguagem de programação junto aos alunos recém ingressos.

Uma porcentagem significativa dos alunos que ingressam em cursos que contem em sua ementa conteúdos de programação, o fazem sem nenhum contato anterior com linguagem de programação, e assim acabam tendo dificuldades com a compreensão do assunto passado em sala de aula por serem abstratos e sem aplicação prática visual o que, por consequência, acabam muitas vezes desmotivando-os.

Segundo Coutinho, Lima e Santos (2017) e Pereira (2017) o método aplicado pelos professores, que por muitas vezes só fazem uso de aulas expositivas acabam afastando o aluno da prática do desenvolvimento das capacidades criativas individuais. Desta forma é necessário buscar novos meios de ensino para que haja uma maior compreensão das disciplinas que envolvem programação fazendo com que a assiduidade com os assuntos passados aumente e a taxa de reprovação e de evasão dos cursos da área de exatas, diminua.

Uma metodologia bastante crescente se dá a partir da robótica educacional no ensino-aprendizagem, tornando o processo de aprendizado mais motivador e dinâmico, fazendo com que o aluno compreenda a teoria através da prática. Diversos trabalhos na robótica educacional já estão sendo desenvolvidas com essa finalidade.

1.1. Justificativa

O ensino de programação através da robótica tem sido muito praticado por pesquisadores como (BENITTI, KRUEGER, et al., 2010), (CAMBRUZZI e SOUZA, 2015) e (ZILLI, 2004), esses trabalhos tem demostrado que melhorar a metodologia de ensino de disciplinas de programação através da robótica educacional, transforma o ambiente de ensino, que é tradicionalmente metódico e repetitivo, para um ambiente motivador, atrativo e dinâmico, estimulando a criatividade e o interesse do aluno em aprender.

(13)

Uma pesquisa realizada no Centro de Ciências Exatas e Tecnológicas da Universidade Federal do Recôncavo da Bahia, referente a números de insucessos nas disciplinas introdutórias de programação, nos semestres de 2017.2 e 2018.1 tiveram acima de 60% dos alunos reprovados e desistentes por semestre. Esse número demostra a necessidade de melhorar a metodologia de ensino, visto que porcentagem desses alunos apresentam muitas dificuldades no decorrer nos cursos.

1.2. Objetivos

1.2.1. Geral

Desenvolver roteiros experimentais para o ensino dos principais conteúdos de disciplinas iniciais de programação utilizando plataforma robótica.

1.2.2. Específicos

• Pesquisar sobre o ensino de programação e as dificuldades encontradas pelos alunos nas disciplinas introdutórias de programação;

• Pesquisar métodos de ensino já desenvolvidos que buscam melhorar o ensino-aprendizagem de programação através de ferramentas didáticas;

• Preparar a interface de desenvolvimento de programas para interação do aluno com o robô utilizado;

• Desenvolver os roteiros com os principais conteúdos abordados em disciplinas de programação;

• Realizar testes com o robô 3pi e discutir sobre o método desenvolvido e eficácia do robô utilizado.

1.3. Estrutura do Trabalho

O trabalho conta com uma divisão de 5 capítulos, sendo o primeiro a introdução. No segundo capítulo, é abordado a revisão de literatura sobre o ensino de programação; as dificuldades relacionadas ao ensino e aprendizagem de programação; metodologias alternativas ao ensino de programação e o uso da robótica como ferramenta de ensino.

(14)

O terceiro capítulo apresenta os materiais e métodos utilizados e a elaboração dos roteiros experimentais.

O quarto capítulo mostra os resultados obtidos e os testes realizados com o robô 3pi a partir dos roteiros desenvolvidos.

O quinto e último capítulo contém a conclusão onde são apresentadas as considerações finais desse trabalho e também propostas para trabalhos futuros.

(15)

2. REVISÃO DE LITERATURA

2.1. Ensino de programação

A programação pode ser definida como uma metodologia onde é possível instruir computadores com algoritmos, uma sequência lógica de comandos que são usualmente desenvolvidos para a resolução de um problema ou para a execução de uma tarefa (COUTINHO, LIMA e SANTOS, 2017).

No ensino técnico e superior, principalmente em cursos da área de exatas como Ciências da Computação e Engenharias, a linguagem de programação faz parte do ciclo básico de formação da matriz curricular, considerada uma disciplina base, sendo em sua maioria, obrigatória (CARVALHO, GADELHA, et al., 2016). Ela surge com o objetivo de abordar os princípios da lógica de programação, além de inferir aos alunos conhecimentos necessários para analisar e resolver problemas através de algoritmos (PEREIRA, 2017 ).

Ainda em seu trabalho, Carvalho, Gadelha, et al. (2016) nos diz que as disciplinas introdutórias de programação são vistas por muitos autores como difíceis tanto devido à dificuldade do estudante de associar sua natureza abstrata, quanto por não conter aplicação concreta com o dia-a-dia.

Para Pereira (2017), é na fase ainda inicial que surge a problemática em relação a aprendizagem de programação, onde o aluno precisa compreender e aplicar os conteúdos aprendidos nas aulas, que em sua maioria são conceitos abstratos. O autor ainda nesta mesma obra, completa que para os alunos que alcançam um bom entendimento dos conceitos de programação há uma facilidade na capacidade de escolha da linguagem e aumento na possibilidade de aprender novas.

Países como Inglaterra, Estados Unidos e Austrália incorporaram a linguagem de programação na matriz curricular das séries iniciais de formação escolar, pois notaram importância de programar. A Inglaterra foi uma das primeiras a abrir caminho de introduzir o ensino de programação e robótica, com o aprendizado obrigatório nas escolas. Na Austrália, o ensino de programação entrou para o currículo escolar obrigatório de todos os estudantes maiores de 10 anos de idade. Nos Estados Unidos, alguns estados estão tornando obrigatório o ensino de programação e robótica desde a educação infantil até o ensino médio (HAPPYCODE, 2016). No Reino Unido o

(16)

ensino da programação na educação básica é obrigatório, pois se acredita que a programação tem o potencial de ajudar no aprendizado das demais disciplinas. (GARLET, BIGOLIN e SILVEIRA, 2016).

Segundo Araújo, Rodrigues, et al. (2015) conteúdos de programação não foram introduzidos ainda como parte dos currículos das escolas brasileiras, mas existem algumas iniciativas a respeito desta prática, como as escolas de programação SuperGeek e MadCod, sediadas em São Paulo, e programas como Robótica na Escola, promovido no Estado do Recife. Além disso, pode-se encontrar unidades escolares da Happy Code, uma escola de referência global, instaladas por todas regiões do Brasil, contando 3 unidades instaladas na Bahia (HAPPYCODE).

Existem ainda iniciativas voltadas a disseminar o ensino de linguagem de programação, a exemplo do movimento global, a Hora do Código, que busca mostrar como a programação pode estar ao alcance de todos através de um portal voltado para o ensino e aprendizagem de programação em blocos (CODE.ORG.).

De acordo com Coutinho, Lima e Santos (2017) as sentenças envolvidas no programa de computador diferem nos comandos e instruções das diversidades de linguagens de programação existentes. Entretanto, independente da linguagem de programação utilizada, visto que se diferenciam nas sentenças utilizadas na construção de um programa, é imprescindível o conhecimento da lógica de programação, pois é a fundamentação básica para as linguagens de programação.

Atualmente está cada vez mais notória a necessidade de saber programar, para que as pessoas além de consumidores de tecnologias, possam produzi-las (GARLET, BIGOLIN e SILVEIRA, 2016). Dessa forma, vários os estudos na literatura e iniciativas voltadas a importância, dificuldades e metodologias relacionadas ao ensino e aprendizagem de programação de computadores.

2.2. Dificuldades no ensino e aprendizagem de programação

Estudos tem demonstrado que existe, em termos gerais, uma grande dificuldade em compreender e aplicar certos conceitos abstratos de programação, por parte de uma percentagem significativa dos alunos que frequentam disciplinas introdutórias nesta área. Essas disciplinas tendem a despertar nos alunos habilidades

(17)

de interpretação e resolução de problemas, raciocínio lógico, dentre outras. Entretanto, por não conseguir desenvolver estas habilidades, muitos estudantes acabam mostrando um baixo desempenho nas disciplinas de programação, levando-os à reprovação ou, até mesmo, à desistência do curso (GOMES, HENRIQUES e MENDES, 2008).

Os temas envolvendo problemas e dificuldades no ensino e na aprendizagem de programação é frequentemente abordada em trabalhos científicos, tais como (GIRAFFA e MORA, 2013), (SOUZA, BATISTA e BARBOSA, 2016) e (SILVA e TRENTIN, 2016). Para Giraffa e Mora (2013), apesar dos benefícios adquiridos com disciplinas de programação, é classificada como de difícil aprendizagem, uma vez que exige muita dedicação e prática por parte dos estudantes, contribuindo dessa maneira para as altas taxas de evasão.

O mapeamento sistemático feito por Souza, Batista e Barbosa (2016), teve como proposta identificar os principais problemas e dificuldades no ensino e na aprendizagem de programação, foi feita uma análise de 70 trabalhos relacionados ao tema, entre os anos de 2010 e 2014. Como principais resultados do estudo desenvolvido, está o fato dos alunos apresentarem dificuldades em aprender os conceitos de programação, dificuldade em colocar em prática os conceitos durante a construção de programas e a falta de motivação na realização da atividade de programação.

Estudos como Silva e Trentin, (2016) reforçam ainda mais os problemas enfrentados por professores e alunos na disciplina introdutórias de programação, buscando apontar metodologias alternativas que viabilize o processo do ensino-aprendizagem, servindo assim como tecnologias educacionais. Esses trabalhos são motivados, principalmente, pela importância dos conceitos de programação dos cursos de ciências exatas e computação, onde expõem grande preocupação com os elevados índices de retenção existentes nesses cursos, em virtude das taxas de insucesso dos discentes nas disciplinas iniciais de programação. É frequente a evasão de discentes tanto no início como no decorrer dos cursos, o que dificulta a sua conclusão.

A forma convencional dos professores passarem o conhecimento na sala de aula com aulas expositivas, é um problema a ser resolvido, visto que os alunos

(18)

passam a ser atores passivos no processo de aprendizado. Coutinho, Lima e Santos (2017) falam no seu trabalho que transmitir o conhecimento através de aulas expositivas por meio de slides não são apropriadas para repassar o conteúdo e para o aluno praticar, mediante as características práticas da atividade de programar.

De acordo com Pereira (2017), os métodos tradicionais de ensino baseados na insistência, imitação e repetição são muito frequentes, não contribuindo para o desenvolvimento das capacidades criativas individuais, visto que, são aulas puramente mecânicas e repetitivas. O processo de ensino e aprendizagem de programação é complexo e composto por muitas e diferentes variáveis e, portanto, se torna necessário pesquisar estas variáveis e sugerir novas metodologias e práticas, propondo diminuir os problemas enfrentados pelos professores e alunos nas disciplinas de programação.

2.3. Metodologias alternativas ao ensino de programação

Ao analisar algumas das publicações nos anais de 2015 a 2018 de três dos mais importantes eventos na área de Informática e Educação no Brasil - o Simpósio Brasileiro de Informática na Educação (SBIE), o Workshop de Informática na Escola (WIE), e o Workshop de Robótica na Educação (WRE) - que concentram boa parte dos trabalhos voltados para o ensino de programação, observou-se que os trabalhos tem-se demostrado com o foco em diferentes metodologias de ensino de programação de computadores, com abordagens direcionadas principalmente a utilização de jogos digitais e robôs na educação.

Os jogos digitais inseridos no ensino de programação têm se tornado uma ferramenta motivacional para os alunos, uma vez que possibilitam adquirir conhecimento forma lúdica. De acordo com a revisão sistemática realizada por Scaico e Scaico (2016), a utilização de jogos no ensino de disciplinas de programação apresentam resultados positivos para o aprendizado e participação ativa do aluno. Considerando os requisitos levantados por Silva, Fernandes e Santos (2018), o uso de jogos digitais é baseado pela ideia de serem instrumentos de ensino eficaz qualificado para envolver o aluno no processo ensino-aprendizagem.

Em Ribeiro, Manso e Borges (2016), é sugerido práticas com alunos de ensino médio a partir da adoção do aplicativo App Inventor no desenvolvimento de aplicativos

(19)

móveis. Ainda concluem que o App Inventor possibilita o aprendizado e promove aos participantes uma nova visão sobre programação e a carreira na área de computação. Já no trabalho de Bordin e Quepfert (2018) a ferramenta App Inventor é utilizada no projeto de ensino de programação para alunos de ensino médio de escolas públicas. A metodologia mostrou-se positiva com uma proposta lúdica de montagem de blocos que retira a complexidade das linguagens e ferramentas convencionais, assim através da construção de uma app do tipo quiz mostrou-se o funcionamento dos conceitos básicos de programação, permitindo a compreensão dos conceitos de forma simples, sem que os alunos sentissem desestimulados por não alcançar o objetivo.

Os estudos realizados por Albuquerque, Bremgartner, et al. (2016) é de nível de ensino técnico, no qual utilizaram o Arduino para introduzir atividades no ensino de linguagem de programação, pois através do Arduino é possível estimular o pensamento computacional e auxiliar o aprendizado dos conceitos de programação criando inúmeras situações com a ferramenta. Brito e Madeira (2015) utilizam como ferramenta motivacional, a gamificação no ensino de programação. Nesse trabalho, é pontuado que se motivar e estimular os alunos com as práticas, é possível obter resultados melhores dos que os mostrados com os métodos tradicionais de ensino. Desta forma, surge a necessidade de novos processos e metodologias diversificadas que permitem auxiliar na aprendizagem de programação.

2.3.1. Ensino de programação através de robótica

Na finalidade de tornar o processo de ensino-aprendizagem mais motivador e dinâmico, busca-se personalizar metodologias objetivando torna-las mais eficiente. Um conceito que visa contribuir bastante com a proposta é a inclusão da Robótica no ensino de programação considerado como ferramenta de grande interação entre o aluno e a aplicação prática do conteúdo.

Os ambientes de Robótica Educacional (RE) oferecem a possibilidade de prover uma concretização dos comandos abstratos de programação, sendo pelo comportamento de um robô virtual ou físico (LESSA, FORIGO, et al., 2015). O aluno adquire conhecimentos através da exploração e da descoberta (CAMBRUZZI e SOUZA, 2015) .

(20)

O trabalho desenvolvido por Zilli (2004), diz que a robótica educacional consegue desenvolver as seguintes habilidades: formulação e teste de hipóteses; aplicação das teorias formuladas a atividades concretas; investigação e compreensão; representação e comunicação; raciocínio lógico; resolução de problemas por meio de erros e acertos; relações interpessoais; criatividade; e capacidade crítica.

Dessa forma, utilizar a RE no ambiente de aprendizado faz o aluno pensar, manusear, construir, executar, analisar o certo ou errado e reexecutar, ou seja, compreende a teoria através da prática (CAMBRUZZI e SOUZA, 2015). Nesse sentido, a RE evidencia um local de aprendizado mais motivador, que além de promover a curiosidade, a criatividade e a multidisciplinaridade abrange diretamente a compreensão dos conceitos de programação (BENITTI, KRUEGER, et al., 2010).

Reis, Sarmento e Zaramella (2015) propõe a construção da Plataforma Coffee que contém um robô com um smartphone como processador e um ambiente de programação. Como objetivo final do estudo, foi realizado práticas com os discentes de uma disciplina inicial de programação do curso de Computação. Ao final do experimento constataram que os alunos obtiveram aumento cognitivo associado à aprendizagem de programação através do ambiente de programação visual em blocos.

No artigo de Barros e Pereira (2013) utilizam os kits educacionais LEGO Mindstorm, para alunos de graduação em Ciência da Computação, as aulas foram baseadas em métodos de solução de problemas. Com essa prática é possível observar um comportamento do robô, fazer considerações como verificar um erro no programa do robô, erro na leitura dos sensores ou no valor esperado de leitura, a bateria do robô pode estar fraca, ou ainda, a construção física do robô está incorreta. Sendo, portanto, novas situações que os alunos de programação têm que encarar, (BARROS e PEREIRA, 2013)incluindo aqueles com conhecimento avançado de programação de computadores.

Cambruzzi e Souza (2015) teve a ideia de separar os alunos em turmas diferentes: método tradicional de ensino (turma A) e método utilizando a Robótica Educacional (turma B), utilizando o kit da LEGO Mindstorm como ferramenta metodológica e aplicando testes (qualitativos e quantitativos) no início e no final do

(21)

curso para verificar a eficácia da RE, através dos quais se pode mostrar os resultados positivos da turma B em relação a turma A.

Figura 1: Bloco LEGO Mindstorms NXT com sensores e atuadores

Fonte: (BARROS e PEREIRA, 2013)

No trabalho de Zanetti e Oliveira (2015) com o objetivo de desenvolver o pensamento computacional utilizaram o ambiente de programação S4A (Scratch for Arduíno) como ferramenta de ensino com seis alunos do curso Técnico em Informática integrado ao Ensino Médio, no 1º ano do curso. Na prática desenvolvida os alunos tiveram que solucionar o problema proposto, buscando as ações corretas, estruturas de programação necessárias, e a medida que surgisse problemas, aplicava testes e correção em busca de um melhor desempenho. Como resultados, através de um questionário aplicado ao final das práticas, constatou-se que a RE foi considerada, pelos alunos, uma metodologia mais atraente para aprender, visto que apresentou melhorias no aprendizado, principalmente com relação a verificação de erros.

O ensino de linguagem de programação é promovido através da robótica educacional em outros trabalhos, como o de Ferreira, Jesus, et al. (2016) onde desenvolvem o Se-Robô, um aplicativo voltado para dispositivos móveis, utilizado no ensino de programação de robôs de baixo custo construídos na plataforma Arduino. Esse trabalho foca no ensino de programação e robótica voltado para o público mais infantil, especificamente crianças entre 6 a 12 anos de idade. No trabalho proposto por Costa, Oliveira, et al. (2017), a metodologia foi aplicada para alunos do ensino fundamental da rede pública como obtenção do aprendizado através da construção de atividades práticas. Nas etapas do trabalho utilizou o kit Lego Mindstorms na primeira parte, e a plataforma Arduino na segunda parte do projeto. Ao final do projeto os alunos, com materiais recicláveis, construíram e apresentaram dois projetos robóticos, mostrando resultados positivos.

(22)

Figura 2: Plataforma Arduino

Fonte: https://www.arduino.cc/

Na Revisão Sistemática da Literatura (RSL), pesquisa científica que reúne estudos relevantes a respeito do tema proposto, realizada por Azevêdo, Francisco E Nunes (2017), mostrou avanços das publicações sobre a robótica educacional no processo de ensino e aprendizagem, de 2010 a 2017. Na revisão percebeu-se que robótica tem sido usada no ambiente educacional de maneira potencializadora, através de metodologias motivadoras e didáticas, com o incentivo ao trabalho em equipe, permitindo o aluno ter autonomia para brincar, questionar, construir e discutir, despertando o ser crítico e ativo facilitando a forma de construir esses conhecimentos.

2.4. A plataforma Pololu

O robô 3pi é uma excelente plataforma móvel destinado a pessoas com experiência em linguagem de programação, bem como para iniciantes em aprenderem programação por meio robótica (ALMEIDA, SILVA e MURARI, 2010).

Segundo a empresa Pololu o robô 3pi, Figura 3, é uma plataforma móvel completa de diâmetro 3π centímetros. Composto por dois micromotores, cinco sensores de refletância, um display LCD de 8x2 caracteres, uma campainha (buzzer), quatro pilhas AAA e três botões de pressão. Todos estes componentes estão ligados a um microcontrolador ATmega328, programável em linguagem C / C ++, que pode ser programado usando o Atmel Studio, o Arduino IDE, o WinAVR e outros ambientes de software.

(23)

Figura 3:Robô Pololu 3pi

Figura 4: Motoredutor 30:1 do robô 3pi

Fonte: (POLOLU, 2019)

2.4.1. Principais componentes • Dois micromotores Redutores

O motor DC escovado, é o tipo de motor usado no robô 3pi, o mais frequente na área de robótica. O motor possui uma caixa de engrenagens como um sistema redutor que converte a saída de alta velocidade e baixo torque do motor DC em uma saída de maior torque e baixa velocidade, que é mais adequada para locomover um robô, o redutor utilizado no 3pi é uma miniatura, de relação 30:1, Figura 4, (POLOLU, 2019).

Fonte: (POLOLU, 2019)

No 3pi, são usadas as saídas PWM (Pulse Width Modulation), em português, modulação por largura de pulso do microcontrolador para o controle de velocidade. A velocidade deve ser um valor entre -255 e +255, este valor determina

(24)

a direção e a magnitude do moto, como é demostrado na Figura 5. Uma velocidade de 0 nos dois motores resulta em freio total enquanto uma velocidade de 255 ou -255 resulta em velocidade máxima para frente ou para trás respectivamente (POLOLU, 2019). No primeiro exemplo, o robô ira andar para frente uma vez que as velocidades estão iguais para as duas rodas (180), no segundo caso o robô realiza curva à direita uma vez que a roda direita (120) possui velocidade menor que a esquerda (255), no terceiro caso o robô gira no próprio eixo, uma vez que a sua velocidade tem o mesmo valor mas sentidos diferentes, fazendo as rodas se moverem em direções opostas.

Fonte: (POLOLU, 2019)

• Cinco Sensores Refletivos

O sensor de linha é um sensor de refletância QTR-RC bastante utilizado em aplicações na área de robótica. O sensor de refletância carrega um par de infravermelho LED e fototransistor em um módulo, utilizado para detecção de bordas e linhas. O fototransistor utiliza um circuito de descarga de capacitores, Figura 6, para que a entrada e saída digital do microcontrolador faça uma leitura analógica do infravermelho refletido, medindo o tempo de descarga do capacitor. O menor tempo de descarga do capacitor indica uma maior reflexão. Seu grau de refletância pode variar de acordo com a superfície utilizada, podendo ela refletir os raios infravermelhos com menor o maior grau de intensidade, ou seja, quanto mais clara e lisa há maior reflexão que uma mais escura e menos lisa.

(25)

Figura 7: LCD compacto

Figura 6: Circuito do sensor utilizado no robô 3pi.

Fonte: (POLOLU, 2019) • Display LCD

Um LCD de 8 x 2, ou seja, capacidade para duas linhas de informações com oito caracteres em cada linha, Figura 7, ideal para pequenos projetos de microcontroladores, funciona através de envio de dados de forma serial.

Fonte: (POLOLU, 2019)

• LED

No 3pi, existem dois LEDs (Diodo Emissores de Luz, em português), dispositivos semicondutores que emitem luz a partir de uma aplicação de tensão elétrica em seus terminais na parte inferior, o LED vermelho à direita e o LED verde à esquerda, Figura 8. LEDs adicionais incluídos com o 3pi podem ser soldados no lado superior (POLOLU, 2019).

(26)

Figura 8: LEDs do robô 3pi

Figura 9: Botões de pressão do 3pi Fonte: adaptado de (POLOLU, 2019)

• Botões

Os três botões (A, B e C) do robô 3pi, Figura 9, são utilizados como entradas de controle da interface do usuário e o seu programa (POLOLU, 2019).

Fonte: adaptado de (POLOLU, 2019)

• Baterias

O sistema de energia no 3pi é através de pilhas AAA. Caso sejam utilizadas pilhas recarregáveis para o 3pi, deve-se carregar totalmente antes de usá-las. Nunca tentar gravar o programa 3pi se as baterias estiverem gastas ou descarregadas. A queda de energia durante a programação poderia desativar permanentemente o 3pi (POLOLU, 2019).

(27)

Figura 10: Conector ISP de 6 pinos • Conector ISP de 6 pinos.

O 3pi possui um microcontrolador ATmega328P, que requer um circuito programador externo que é responsável por gravar, o código fonte desenvolvido na IDE, no robô. O programador precisará de um cabo ISP (In-System Programming), em português, programação no sistema, de 6 pinos , também chamado de ICSP (In-Circuit Serial Programming), em português, programação serial em circuito, onde é permitido a programação e reprogramação de qualquer placa baseada em AVR que já se encontra inserida dentro de um sistema completo, como visto na Figura 10 (POLOLU, 2019).

Fonte: adaptado de (POLOLU, 2019)

2.4.2. Mapeamento dos pinos do 3pi no microcontrolador Atmega328-Arduino Nesta secção será mostrado os componentes dispostos na placa do robô 3pi, juntamente com o mapeamento dos pinos do microcontrolador o qual cada componente foi atribuído. A Figura 11 e Figura 12 mostram as vistas superior e inferior do robô, respectivamente, com a demonstração de disposição dos componentes e pinos na plataforma robótica. A tabela 1, mostrada em sequência, exibe os pinos do microcontrolador direcionado a respectiva função no robô 3pi.

(28)

Figura 11: Vista superior do robô Pololu 3pi

Figura 12: Vista inferior do robô Pololu 3pi Fonte: Adaptado de (POLOLU, 2019)

(29)

Tabela 1: Atribuição de pinos do microcontrolador

Arduino - Pin Função 3pi Notas / Funções Alternativas 3 Controle Motor-M2 Timer2 PWM output B (OC2B) 11 Controle Motor M2 Timer2 PWM output A (OC2A)

5 Controle Motor-M1 Timer0 PWM output B (OC0B) 6 Controle Motor- M1 Timer0 saída PWM A (OC0A)

10 buzina Timer1 PWM output B (OC1B)

9 Linha de dados

LCD DB4

botão de pressão do usuário (pressionando o pino de tração para baixo)

12 Linha de dados

LCD DB5

botão de pressão do usuário (pressionando o pino de tração para baixo)

13 Linha de dados

LCD DB6

botão de pressão do usuário (pressionando o pino de tração para baixo)

14 Sensor 1 de

refletância QTR-RC

(unidade alta para 10 nós e, em seguida, aguarde a entrada de linha para ir baixo)

sensor rotulado PC0 (sensor mais à esquerda)

15 Sensor 2 de

refletância QTR-RC

(unidade alta para 10 nós, aguarde a entrada de linha para ir baixo) sensor

rotulado PC1

16 Sensor 3 de

refletância QTR-RC

(unidade alta para 10 nós e, em seguida, aguarde a entrada de linha para ir baixo)

sensor rotulado PC2 (sensor central)

17 Sensor 4 de

refletância QTR-RC

(unidade alta para 10 nós, aguarde a entrada de linha para ir baixo) sensor

rotulado PC3

18 Sensor 5 de

refletância QTR-RC

(unidade alta para 10 nós, então espere a entrada de linha para ir baixo) sensor

rotulado PC4 (sensor mais à direita)

1 LED vermelho LED de usuário (esquerdo)

7 LED verde LED de usuário (direito)

(30)

Figura 13: Ambiente de desenvolvimento integrado (IDE) do Arduino. 3. MATERIAIS E MÉTODOS

A metodologia proposta foi pensada na inserção de roteiros práticos experimentais com uso de uma plataforma robótica, que possa ser utilizado pelos professores e alunos, de forma a criar um espaço didático com ferramenta que auxilie o processo de ensino. A Universidade Federal do Recôncavo da Bahia dispõe de 15 robôs 3pi no Laboratório de Eletrônica e Instrumentação do Centro de Ciências Exatas e Tecnológicas – CETEC, os quais puderam ser realizados nos testes e poderão ser utilizados, com as turmas das disciplinas de processamento de dados da universidade.

3.1. Montagem do ambiente de programação para o Robô 3pi

Neste trabalho foi empregado o Ambiente de Desenvolvimento Integrado (IDE) do Arduino, visualizado na figura 11, como ambiente de fácil interação aluno-robô 3pi.

A IDE é um software utilizado para escrever o programa, salvar, compilar, e gravar na placa Arduino, que é uma plataforma de prototipagem em eletrônica, de fácil desenvolvimento, projetada com o microcontrolador ATmega328. Esse microcontrolador também é usado no robô da Pololu, o que possibilita o uso da IDE do arduino para programar o robô 3pi, facilitando a interface de programação para o aluno. Ao instalar e abrir o IDE, ele demostrará a aparência mostrada na, Figura 13.

(31)

Figura 15: Instalação de drivers apropriados para o programador externo.

O gravador/programador externo utilizado foi USBasp, Figura 14, que é um programador de circuito USB para microcontroladores Atmel AVR. Sendo um gravador com 10-pinos adaptado para 6-pinos com auxílio de jumpers macho/fêmea. Ainda para seu funcionamento no IDE do Arduino precisou-se instalar drivers, Figura 15, para reconhecimento da porta USB.

Figura 14: Programador externo USBasp

Fonte: O Autor

Fonte: O Autor

A instalação da biblioteca AVR, que é disponibilizada no site do fabricante do robô 3pi, foi realizada a partir do download do arquivo “add-on Pololu Orangutan e 3pi Robot para o Arduino IDE”. Para o sistema operacional Windows®, a pasta deverá ser adicionada no subpasta hardware do Arduino - C: \ Usuários \ <nome de usuário> \ Documents \ Arduino \ hardware \ libpololu-arduino. A Figura 16 mostra a biblioteca já instalada no IDE.

(32)

Figura 16:Biblioteca AVR instalada no IDE do Arduino.

Figura 17: Placa selecionada no IDE do Arduino Fonte: O Autor

3.2. Configurando o Arduino IDE:

A placa e o programador externo no IDE foram configurados para programar o microcontrolador ATmega328P, como mostrado na Figura 17 e na Figura 18.

(33)

Figura 18: Programador externo USBasp selecionado no IDE do Arduino.

Fonte: O Autor

Tendo do drivers e bibliotecas sido instalados corretamente, pôde-se desenvolver os roteiros experimentais.

3.3. Roteiros práticos para ensino de programação

Os roteiros desenvolvidos foram baseados em conteúdo abordados em disciplinas introdutórias de programação e será utilizada ações do robô 3pi como interação nos programas a serem executados no IDE do Arduino. Como referência da breve abordagem das estruturas de linguagem de programação C foi utilizado o livro “C completo e total” (SCHILDT, 1996). A linguagem de programação C está presente na ementa das disciplinas de Processamentos Dados I e II da Universidade Federal do Recôncavo da Bahia, campus de Cruz das Almas, e em muitos cursos de programação. Com isso, o fato de o 3pi ser em programável em C ajuda no processo de ensino-aprendizagem, dos conteúdos dessas disciplinas.

O Arduino possui uma estrutura de programação formada por dois blocos de funções, onde serão incluídas outras funções em c/c+. Sendo o primeiro bloco a função setup() é primeira função a ser chamada ao executar um código, sendo chamada apenas uma vez. Na função setup() são atribuídos comportamento dos

(34)

pinos do microcontrolador. O segundo bloco a ser executado é a função loop()- nesta função será armazenado o código principal, o qual será executado indefinidamente. Principais funções da IDE do Arduino:

• pinMode()- Configura um pino do Arduino para ser entrada- INPUT ou saída- OUTPUT digital. EX: pinMode(pino, modo);

• digitalWrite()- Coloca um nível lógico Alto-HIGH (5V) ou baixo-LOW (0V) no pino configurado como saída digital. EX: digitalWrite(pino, valor);

• digitalRead()- Lê o estado do pino digital, podendo ser HIGH ou LOW. EX: digitalRead(pino);

• delay()-Pausa o programa por um tempo em milissegundos. EX: delay(ms); • analogRead()-Lê o valor de estado em um pino configurado como entrada

analógica. Ex: analogRead(pino);

• analogWrite() - escreve um valor analógico (onda PWM) para o pino, o valor de trabalho é entre 0 e 255. EX: analogWrite(pino, valor);

Bibliotecas AVR do 3pi disponibilizada pelo fabricante, que serão utilizadas:

• OrangutanLCD - Esta biblioteca oferece a capacidade de controlar o LCD de caracteres.

• OrangotanMotors - Esta biblioteca lhe dá a capacidade de controlar os controladores do motor no robô 3pi.

Funções da biblioteca AVR do 3pi, que serão utilizadas: • LCD:

OrangutanLCD::clear() - Está função é utilizada para limpar a tela LCD. OrangutanLCD::print() - Função utilizada para exibir mensagens no tela.

OrangutanLCD :: gotoXY(x,y) - Move o cursor para o local especificado no display, x refere-se a linha do display sendo 0- primeira linha e 1- segunda linha e y a coluna do display que varia de 0 à 7 para a posição do caractere. EX: linha superior (0,0) e linha inferior (0,1).

(35)

• Motores:

OrangutanMotors::setSpeeds(M1,M2) – Função que define direção e velocidade dos motores, sendo M1- motor referente a roda da esquerda e M2- motor referente a roda da direita.

3.3.1. Estruturas de tomada de decisão

As estruturas de tomada de decisão são utilizadas em linguagem de programação C como meio de verificar um comando e efetuar decisão do mesmo.

• IF/ELSE

O comando IF é utilizado para executar um comando ou bloco de comandos com base em testes de verificação, caso a “condição1” seja verdadeira, o “comando1 é executado” da mesma forma caso a “condição2” seja verdadeira, o “comando2 é executado”. Sintaxe: if (condição1) { comando 1; } if (condição2) { comando 2; }

No caso de uma determinada condição ser avaliada como verdadeira ou falsa utiliza-se o comando ELSE após o comando IF, caso a “condição” seja verdadeira o “comando1 é executado”, caso seja verificado como falso o “comando2 é executado”.

Sintaxe:

if (condição) { comando 1; }else {

(36)

A seguir será apresentado três problemas práticos, onde será abordado a estrutura de repetição IF/ELSE.

Prática 1: Faça um programa que gere números aleatórios e execute as seguintes ações com o robô:

• Se o número for PAR → Faça o robô andar para frente, Figura 19(a); • Se o número for ÍMPAR→ Faça o robô andar para trás, Figura 19(b). • Imprima na tela o valor do número.

Fonte: O Autor

Para esse código, serão necessárias as funções abaixo:

• random()%X → Função que retorna de 0 até X números aleatoriamente; • OrangutanLCD::clear()→ Função para limpar a tela do display;

• OrangutanLCD :: gotoXY(x,y) - Move o cursor para o local especificado no display;

• OrangutanLCD::print() → Função que exibe mensagem no display; • OrangutanMotors::setSpeeds(M1,M2)→Função que define direção e

velocidades dos motores;

• delay(ms) → Função que pausa o programa em milissegundos. Figura 19: :(a) Número ímpar o robô 3pi anda para trás; (b) Número par o robô 3pi

(37)

Figura 20: Botões A, B e C de controle do usuário do robô 3pi.

Estrutura da interface para desenvolvimento do programa (IDE):

Objetivo: Nesta primeira prática pretende-se induzir o aluno a utilizar estrutura de tomada de decisão “IF …ELSE” com verificação das condições de verdadeiro ou falso.

Prática 2: Elabore um programa que execute as seguintes ações com o robô: Ao pressionar os botões mostrados na Figura 20:

A → o robô vire à esquerda; B → o robô ande para frente e C → o robô vire à direita.

Fonte: O Autor

/*Inserir as bibliotecas: para uso do Display LCD – OrangutanLCD; para uso dos motores - OrangutanMotors */

// declarar variáveis; void setup() {

// Caso necessário configurar pinos utilizados, essa função será executada apenas uma vez.

// Sintaxe:

pinMode(pino, modo); }

void loop() {

// coloque seu código principal aqui, para executar repetidamente // Atribuir valor do pino digital a uma variável. Sintaxe:

digitalRead(pino); }

(38)

Observação: Pedir no display que o usuário pressione o botão (“PRESS”) e imprimir “botão A” “botão B” ou “botão C” para mostrar o botão que foi pressionado.

Para esse código, serão necessárias as funções abaixo:

• OrangutanLCD::clear()→ Função para limpar a tela do display;

• OrangutanLCD :: gotoXY(x,y) - Move o cursor para o local especificado no display;

• OrangutanLCD::print() → Função que exibe mensagem no display; • OrangutanMotors::setSpeeds(M1,M2)→Função que define direção e

velocidades dos motores;

• delay(ms) → Função que pausa o programa em milissegundos. Pinos do microcontrolador: botaoA = 9; botaoB =12; botaoC =13;

Estrutura da interface para desenvolvimento do programa (IDE):

/*Inserir as bibliotecas: para uso do Display LCD – OrangutanLCD; para uso dos motores - OrangutanMotors */

// declarar variáveis; void setup() {

// Caso necessário configurar pinos do Arduino, essa função será executada apenas uma vez.

//Sintaxe:

pinMode(pino, modo);

void loop() {

// coloque seu código principal aqui, para executar repetidamente // Atribuir valor do pino digital a uma variável. Sintaxe:

digitalRead(pino); }

(39)

Prática 3: Elabore um programa que ao ser pressionado o botão B o robô acione os motores e faça um trajeto em forma de quadrado, parando no ponto de partida, Figura 21(a). Caso seja pressionado outro botão o robô gire no próprio eixo, Figura 21(b).

Fonte: O Autor

Observação: Pedir no display que o usuário pressione o botão (“PRESS”) e imprimir botão “B” ou “outro” para mostrar o botão que foi pressionado

Para esse código, serão necessárias as funções abaixo:

• OrangutanLCD::clear()→ Função para limpar a tela do display;

• OrangutanLCD :: gotoXY(x,y) - Move o cursor para o local especificado no display;

• OrangutanLCD::print() → Função que exibe mensagem no display; • OrangutanMotors::setSpeeds(M1,M2)→Função que define direção e

velocidades dos motores;

• delay(ms) → Função que pausa o programa em milissegundos. Pinos do microcontrolador: botaoA = 9; botaoB =12; botaoC =13;

Estrutura da interface para desenvolvimento do programa (IDE):

Figura 21: (a) Ação do robô 3pi ao pressionar o botão B; (b) Ação do robô 3pi ao pressionar o botão A ou C.

(40)

Objetivo: As práticas 2 e 3 tem como proposta que o aluno possa interagir com o robô e aplicar o conhecimento de estrutura de tomada de decisão “IF” utilizando-o como verificação de duas ou mais condições.

3.3.2. Estruturas de repetição

As estruturas de repetição são utilizadas na linguagem de programação c de forma a executar mais de uma vez o mesmo comando ou conjunto de comandos, mediante uma condição ou um contador.

• FOR

A estrutura de repetição FOR cria um laço de repetição sendo utilizado quando se sabe quantas vezes o “comando” deverá ser executado.

Sintaxe:

for (variável de inicialização; condição; incremento/decremento) { //comandos a serem repetidos

}

/*Inserir as bibliotecas: para uso do Display LCD – OrangutanLCD; para uso dos motores - OrangutanMotors */

// declarar variáveis; void setup() {

// Caso necessário configurar pinos do Arduino, essa função será executada apenas uma vez.Sintaxe:

pinMode(pino, modo); void loop() {

// coloque seu código principal aqui, para executar repetidamente //Atribuir valor do pino digital a variável. Sintaxe:

digitalRead(pino); }

(41)

Figura 22: Trajetória em forma de círculo para o robô 3pi.

“condição” contem a expressão a ser usada para determinar o final do laço e o “incremento” define a variável de controle do laço.

No problema prático, apresentado a seguir, será abordado a estrutura de repetição FOR.

Prática 4: Escreva um programa que permita ao robô realizar uma trajetória em forma de círculo e imprimir no display 10 voltas completas, como representado na Figura 22.

Fonte: O Autor

Para esse código, serão necessárias as funções abaixo:

• OrangutanLCD::clear()→ Função para limpar a tela do display;

• OrangutanLCD :: gotoXY(x,y) - Move o cursor para o local especificado no display;

• OrangutanLCD::print() → Função que exibe mensagem no display; • OrangutanMotors::setSpeeds(M1,M2)→Função que define direção e

velocidades dos motores;

• delay(ms) → Função que pausa o programa em milissegundos.

Sugestão: Defina a velocidade e verifique o tempo necessário para uma volta completa.

(42)

• DO...WHILE

O comando DO-WHILE também se trata de estrutura de repetição, semelhante ao WHILE em termos de funcionamento, a diferença está em que no DO-WHILE, o “bloco de comandos” dentro do laço é executado pelo menos uma vez, mesmo que a condição seja falsa. Isso acontece porque a condição de verificação só é avaliada depois que os comandos são executados.

Sintaxe: do {

// comandos a serem repetidos ...} while (condição);

O problema prático, que se refere a estrutura de repetição DO...WHILE será apresentado na prática abaixo.

Prática 6: Elabore um programa que o robô acione os motores e ande para frente até que encontre um obstáculo (linha preta) e pare os motores, como representado na Figura 23.

/*Inserir as bibliotecas: para uso do Display LCD – OrangutanLCD; para uso dos motores - OrangutanMotors */

// declarar variáveis; void setup() {

// Caso necessário configurar pinos do Arduino, essa função será executada apenas uma vez.Sintaxe:

pinMode(pino, modo);

void loop() {

// coloque seu código principal aqui, para executar repetidamente }

(43)

Fonte: O Autor

Informação do sensor: O tempo que o capacitor do sensor leva para descarregar através do fototransistor quando o robô está uma superfície branca é de 100 a 200 microssegundos e quando o robô está na parte preta é de 200 a 1000 microssegundos.

Para esse código, serão necessárias as funções abaixo:

• OrangutanLCD::clear()→ Função para limpar a tela do display;

• OrangutanLCD :: gotoXY(x,y) - Move o cursor para o local especificado no display;

• OrangutanLCD::print() → Função que exibe mensagem no display; • OrangutanMotors::setSpeeds(M1,M2)→Função que define direção e

velocidades dos motores;

• delay(ms) → Função que pausa o programa em milissegundos. Pino do microcontrolador: sensor3 = 16;

(44)

motores - OrangutanMotors */ // declarar variáveis;

// Variáveis usadas para calcular o tempo para o pino do sensor de IR ir baixo. Unsigned long tempogasto;

unsigned long startTime; void setup() {

// Caso necessário configurar pinos do Arduino, essa função será executada apenas uma vez.

//Sintaxe: pinMode(pino, modo); }

//Usar a seguinte função para ler o sensor

void lersensor () { //função para leitura do sensor

pinMode(sensor3, OUTPUT); digitalWrite(sensor3, HIGH); delayMicroseconds(10); pinMode(sensor3,INPUT ); digitalWrite(sensor3, LOW ); startTime = micros(); while(digitalRead(sensor3) == HIGH) {

// Loop até o capacitor descarregar abaixo de ~ 2,3V. }

tempogasto = micros() - startTime;

}*/

void loop() {

// coloque seu código principal aqui, para executar repetidamente //chamar a função lersensor();

(45)

Figura 24:Espaço de percurso do robô 3pi delimitado por linha preta.

Ao utilizar a estrutura de repetição WHILE os “comandos serão executados” repetidamente enquanto a “expressão” for verdadeira. Assim que essa “expressão” se tornar falsa, o laço para executar.

Sintaxe:

while (expressão) {

// comandos a serem repetidos }

O problema prático, que se refere a estrutura de repetição WHILE será apresentado a seguir.

Prática 5: Faça um programa onde o robô ande dentro de um quadrado e possa desviar das paredes (linha preta), de acordo com a Figura 24.

Fonte: O Autor

Observação: Utilizar “informação do sensor” disponibilizada na prática anterior a esta. Para esse código, serão necessárias as funções abaixo:

• OrangutanLCD::clear()→ Função para limpar a tela do display;

• OrangutanLCD :: gotoXY(x,y) - Move o cursor para o local especificado no display;

• OrangutanLCD::print() → Função que exibe mensagem no display; • OrangutanMotors::setSpeeds(M1,M2)→Função que define direção e

(46)

Pino do microcontrolador: sensor3 = 16;

/*Inserir as bibliotecas: para uso do Display LCD – OrangutanLCD; para uso dos motores - OrangutanMotors */

// declarar variáveis;

// Variáveis usadas para calcular o tempo para o pino do sensor de IR ir baixo. Unsigned long tempogasto;

unsigned long startTime; void setup() {

// Caso necessário configurar pinos do Arduino, essa função será executada apenas uma vez. Sintaxe:

pinMode(pino, modo); }

//Usar a seguinte função para ler o sensor

void lersensor () { //função para leitura do sensor

pinMode(sensor3, OUTPUT); digitalWrite(sensor3, HIGH); delayMicroseconds(10); pinMode(sensor3,INPUT ); digitalWrite(sensor3, LOW ); startTime = micros(); while(digitalRead(sensor3) == HIGH) {

// Loop até o capacitor descarregar abaixo de ~ 2,3V. }

tempogasto = micros() - startTime;

}

void loop() {

// coloque seu código principal aqui, para executar repetidamente //chamar a função lersensor();

(47)

“WHILE” e “DO...WHILE” objetiva a compreensão do funcionamento do código elaborado a partir da ação executada pelo robô.

3.3.3. Estruturas de modularização/função

Funções são as estruturas que permitem ao usuário separar seus programas em bloco de código que pode ser nomeado e chamado de dentro de um programa, quantas vezes forem necessárias, durante a sua execução.

Sintaxe:

tipo_retornado nome_função (parâmetros) { // sequência de declarações e comandos }

No problema prático seguinte, será retratado a utilização de funções no programa a ser elaborado.

Prática 7: Criar funções para o robô a serem executadas na função principal. • Função andar para frente.

• Função parar • Curva a Direita • Curva a esquerda

• Girar sentido anti-horário • Girar sentido horário • Piscar LEDs

• Pressione um botão.

Sugestão: Utilize os botões para definir trajetórias especificas para o robô 3pi com as funções criadas.

Para esse código, serão necessárias as funções abaixo:

• OrangutanLCD::clear()→ Função para limpar a tela do display;

• OrangutanLCD :: gotoXY(x,y) - Move o cursor para o local especificado no display;

(48)

velocidades dos motores;

• delay(ms) → Função que pausa o programa em milissegundos.

Pinos do microcontrolador: botaoA = 9; botaoB =12; botaoC =13; sensor3 = 16; LEDverm = 1; LEDverd = 7;

Estrutura da interface para desenvolvimento do programa (IDE):

Objetivo: A prática de estrutura de modularização/função propõe ao aluno criar funções de modo a deixar o código principal sem muita informação e ou repetição de partes do programa. Verificando com ações do robô 3pi de acordo com as funções criadas.

/*Inserir as bibliotecas: para uso do Display LCD – OrangutanLCD; para uso dos motores - OrangutanMotors */

// declarar variáveis; void setup() {

// Caso necessário configurar pinos do Arduino, essa função será executada apenas uma vez. Sintaxe:

pinMode(pino, modo); }

void loop() {

// coloque seu código principal aqui, para executar repetidamente. //chamar as funções criadas aqui.

(49)

O trabalho aqui desenvolvido tem similaridade com os encontrados na literatura, visto que a busca por metodologias eficazes para o ensino de linguagem de programação tem sido foco de várias pesquisas na área. No entanto, a metodologia descrita no trabalho difere quanto à abordagem e aplicação, dos demais já mencionados, uma vez que foi buscado trabalhar com a plataforma robótica (robô 3pi) programável em C, utilizando os conceitos de programação abordados nas disciplinas introdutórias de programação.

Os roteiros práticos propostos na metodologia têm um segmento direcionado a aulas práticas de disciplinas introdutórias de programação no curso técnico e superior, buscando motivar e facilitar a compreensão de conteúdos abstratos abordados na parte teórica da disciplina. De acordo com o visto na literatura científica a robótica educacional tem efeitos positivos no quesito motivacional do aluno tornando o aprendizado simples e prazeroso ao passo que desempenha a construção do conhecimento através de aplicação concreta do assunto abordado em sala de aula.

Neste trabalho utilizou-se o IDE do Arduino como ambiente de interação aluno e robô 3pi, pois além de ser de uma plataforma de programação compatível com o microcontrolador do robô é mais simples e intuitivo para iniciantes em programação. As práticas sugeridas na metodologia direcionam o aluno a desenvolver os programas que serão executados pelo robô 3pi através do conhecimento de estruturas de linguagem de programação c e funções disponibilizadas na biblioteca AVR do próprio robô 3pi, mesmo microcontrolador utilizado na plataforma Arduino.

(50)

Figura 25: Conexão Robô 3pi e computador com auxílio do programador externo.

Figura 26: Código copilado e carregado para a plataforma do robô 3pi.

A partir dos roteiros elaborados foram realizados testes com o robô 3pi para verificar da execução dos programas prontos e ações do robô 3pi de acordo com as práticas propostas.

Fonte: O Autor

(51)

//Bibliotecas para utilização do LCD E dos MOTORES

#include <OrangutanLCD.h> #include <OrangutanMotors.h>

int num; // Variável do tipo inteiro que irá receber o número gerado pela função random()%10.

void setup() { }

void loop() {

num=random()%10; //Função que retorna um número aleatório.

OrangutanLCD::print("NUMERO");

OrangutanLCD :: gotoXY(3,1); //Posiciona o numero no centro do display

OrangutanLCD::print(num); //Exibe o número gerado no display.

OrangutanMotors:: setSpeeds(0, 0); // Motores do robô está parado

delay(200); // Esta função pausa o programa em milisegundos OrangutanLCD::clear();

//Estrutura de repetição IF...ELSE utilizada como condição de verdadeiro ou falso:

if (num % 2 == 0){ //se a 'expressão' for verdadeira o 'bloco de instruções 1' é executado

OrangutanLCD :: gotoXY(3,0); OrangutanLCD::print(num); OrangutanLCD :: gotoXY(3,1);

OrangutanLCD::print("PAR");

OrangutanMotors:: setSpeeds(30, 30); // Robô anda para frente

delay(2000);

OrangutanMotors:: setSpeeds(0, 0); //Para os motores do robô

delay(500);

OrangutanLCD::clear();

}else{ //se a 'expressão' for falsa o 'bloco de instruções 2' é executado

OrangutanLCD :: gotoXY(3,0); OrangutanLCD::print(num); OrangutanLCD :: gotoXY(1,1);

OrangutanLCD::print("IMPAR");

OrangutanMotors:: setSpeeds(-30, -30); // Robô anda para trás

delay(2000);

OrangutanMotors:: setSpeeds(0, 0); //Para os motores do robô delay(500);

OrangutanLCD::clear(); } }

(52)

Figura 27: Ação do robô 3pi para número par.

Figura 28: Ação do robô 3pi para número ímpar.

Fonte: O Autor

(53)

//Bibliotecas para utilização do LCD E dos MOTORES

#include <OrangutanLCD.h> #include <OrangutanMotors.h>

// Variável do tipo inteiro com o correspondente pino do microcontrolador.

int botao1 =9; int botao2 =12; int botao3 = 13;

// Variável do tipo inteiro que irá receber o estado dos botões usando a função digitalRead(pino).

int estBOTAO1; int estBOTAO2; int estBOTAO3;

int botao; // Variável do tipo inteiro para indicar o botão pressionado.

void setup() {

//configuração dos pinos como entrada.

pinMode(botao1,INPUT); pinMode(botao2,INPUT); pinMode(botao3,INPUT); }

void loop() {

OrangutanLCD::print("Press"); // Exibir na tela para usuário pressionar um botão.

delay(200);

//Recebe estado dos botões e armazena numa variável.

estBOTAO1= digitalRead(botao1); estBOTAO2=digitalRead(botao2); estBOTAO3=digitalRead(botao3);

OrangutanMotors::setSpeeds(0,0); // Motores inicialmente parados

OrangutanLCD::clear(); [...]

(54)

if(botao==estBOTAO1){ OrangutanLCD::print("A"); OrangutanLCD :: gotoXY(0,1);

OrangutanLCD::print("ESQUERDA");

OrangutanMotors::setSpeeds(15,30); // Motores acionados- robô vira a direita 1,5s. delay(1500);

OrangutanMotors::setSpeeds(30, 30); // Motores acionados- robô anda para frente 1s.

delay(1000); OrangutanLCD::clear(); } if(botao==estBOTAO2){ OrangutanLCD::print("B"); OrangutanLCD :: gotoXY(0,1); OrangutanLCD::print("FRENTE");

OrangutanMotors::setSpeeds(30, 30); // Motores acionados- robô anda para frente 2s.

delay(2000); OrangutanLCD::clear(); } if(botao==estBOTAO3){ OrangutanLCD::print("C"); OrangutanLCD :: gotoXY(0,1); OrangutanLCD::print("DIREITA");

OrangutanMotors::setSpeeds(30, 15); // Motores acionados- robô vira a esquerda 1,5s.

delay(1500);

OrangutanMotors::setSpeeds(30, 30); // Motores acionados- robô anda para frente 1s.

delay(1000);

OrangutanLCD::clear(); } }

(55)

Figura 29: Ação do robô 3pi de acordo com o botão apertado pelo usuário.

Fonte: O Autor

(56)

//Bibliotecas para utilização do LCD E dos MOTORES #include <OrangutanLCD.h> #include <OrangutanMotors.h> void setup() {

}

void loop() {

OrangutanLCD::print("Inicio"); //Exibindo mensagem na tela para iniciar o código

delay(300);

OrangutanLCD::clear();

//Estrutura "FOR" utilizada para criar uma repetição da ação do robô.

for(int i=0;i<10;i++){ OrangutanLCD::clear();

OrangutanLCD::print(i+1); //Exibe na tela a contagem de voltas do robô OrangutanMotors:: setSpeeds(10, 50); // Robô realiza trajetória em forma de círculo.

delay(2700); // tempo necessário para robô completar um volta.

OrangutanMotors::setSpeeds(0, 0); // Motores do robô parado. delay(300);

OrangutanLCD::clear(); }

//Exibindo na tela "FIM" quando completar as voltas realizadas pelo robô

OrangutanLCD::print("FIM"); delay(300);

OrangutanLCD::clear(); }

(57)

Figura 30: Contagem das 5 primeiras trajetórias em círculo do robô 3pi.

Figura 31: Contagem das 5 ultimas trajetórias em círculo do robô 3pi.

Fonte: O Autor

(58)

//Bibliotecas para utilização do LCD E dos MOTORES

#include <OrangutanLCD.h> #include <OrangutanMotors.h>

// Variável do tipo inteiro com o correspondente pino do microcontrolador.

const int sensor3 = 16;

// Variáveis usadas para calcular o tempo para o pino do sensor de IR ir baixo.

unsigned long startTime; unsigned long tempogasto; void setup(){

}

//Função para ler o sensor central.

void lersensor(){

pinMode(sensor3, OUTPUT); // Definir pin sensor3 para saída

digitalWrite(sensor3, HIGH); // Ajusta a voltagem do pino para nível logico alto

delayMicroseconds(10); // Carregar capacitor por 10 microsegundos

pinMode(sensor3,INPUT); // Desativar o pull-up interno no sensor de pinos2

digitalWrite(sensor3, LOW); // Sensor3 – nível logico baixo, permitindo que o capacitor dispare o fototransistor.

startTime = micros(); // micros () é o número de microssegundos desde o início do programa.

while(digitalRead(sensor3) == HIGH){

// Loop até o capacitor descarregar abaixo de ~ 2,3V.

}

tempogasto = micros() - startTime; // Calcule a quantidade de tempo para o capacitor descarregar.

} // Finaliza a função leitura do sensor

Referências

Documentos relacionados

O objetivo do curso foi oportunizar aos participantes, um contato direto com as plantas nativas do Cerrado para identificação de espécies com potencial

Os ativos não circulantes classificados como disponível para venda são mensurados pelo menor montante entre o seu custo contábil e o seu valor justo, líquido das despesas com a

No código abaixo, foi atribuída a string “power” à variável do tipo string my_probe, que será usada como sonda para busca na string atribuída à variável my_string.. O

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Objetivo: Garantir estimativas mais realistas e precisas para o projeto, ao considerar nesta estimativa o esforço necessário (em horas ou percentual do projeto) para

Ainda segundo Gil (2002), como a revisão bibliográfica esclarece os pressupostos teóricos que dão fundamentação à pesquisa e às contribuições oferecidas por

forficata recém-colhidas foram tratadas com escarificação mecânica, imersão em ácido sulfúrico concentrado durante 5 e 10 minutos, sementes armazenadas na geladeira (3 ± 1

No âmbito da Década da Educação para o Desenvolvimento Sustentável (2005-2014) ambiciona-se uma escola renovada, capaz de direccionar a humanidade para um caminho