Prévia do material em texto
Olimpíada Brasileira de Robótica SESI SP 2015 Por: Moisés Aparecido da Silva Alexandre Bueno de Oliveira Alessandro Florentino Introdução A cada ano o SESI SP impacta e cresce enquanto competidor com seus times de robótica em suas diversas modalidades. Para este ano o material oficial de treinamento traz consigo uma carga de informações mais elaboradas sobre alimentação de circuitos e alguns exemplos práticos de acionamentos de sensores e atuadores, além do conteúdo já trabalhado nos anos anteriores. Esperamos assim que o técnico e o time estejam mais amparados para realizarem suas atividades de treinamento. Este material foi produzido com foco no trabalho dos técnicos de equipes de OBR do SESI SP. O conteúdo técnico é abordado de forma a abranger técnicos iniciantes e experientes. 1. Fonte de alimentação. Existem várias concepções de robôs, muitas delas amplamente aceitas, para a realidade da OBR podemos definir um robô como sendo uma máquina autônoma capaz de transformar o ambiente com o qual interage. Os robôs de OBR possuem os processos de um computador comum, ele recebe dados, processa e envia dados, ou seja, possui entrada, processamento e saída de informações. Podemos chamar estas entradas e saídas de IOs (Input e Output). As Inputs são ligadas aos sensores para entrada de informações do ambiente. As Outputs são ligadas aos atuadores (motores, LED's, servos, etc) para que atuem modificando o ambiente. Para que haja entradas, processamento e saída de dados é necessário que exista a alimentação elétrica de todos os dispositivos, assim, existem duas formas de trabalho com corrente elétrica no robô – fonte de alimentação e comunicação através de sinais elétricos, a saber: A fonte de alimentação é a responsável por manter todos os dispositivos energizados, ou seja, trata‐se de corrente elétrica e tensão estáveis e definidas. Todos os componentes elétricos do robô devem ser alimentados por uma fonte para que sejam capazes de realizar as funções para as quais foram construídos. Este conteúdo será abordado de forma mais detalhada na próxima sessão. Os sinais elétricos são correntes elétricas que, uma vez alimentados os dispositivos, possuem a funções de estabelecer comunicação entre os dispositivos do robô, assim, elas não são constantes, eles podem variar em função do comportamento dos dispositivos e ambiente e, justamente este comportamento variante nos proporciona a comunicação. Este conteúdo será abordado de forma mais detalhada nas próximas sessões. O primeiro passo para idealização de um robô é saber quanto ele consumirá de energia elétrica ou carga, para isto é preciso estipular quais tipos de sensores e atuadores estarão presentes em sua estrutura. Trata‐se de calcular quanto de corrente cada dispositivo demanda, uma vez que as ligações propõem uma divisão da corrente elétrica da fonte de alimentação por cada dispositivo, é possível determinar quando de corrente a fonte deve fornecer. Isto é dado em Ampère hora ou mAh para correntes baixas. 1.1. Tensão e corrente Para entendermos de forma rápida e fácil imagine uma caixa de água no alto de uma casa, ela possui um cano ligada a ela que conduz a água até uma torneira perto do chão. Já é possível entender que existe uma energia potencial na água em função da altura que ela se encontra, caso abra a torneia, esta água descerá com determinada potência até a torneira. Agora imagine se esta caixa de água estiver no chão, a água chegará à torneira com a mesma força? Se substituirmos a água por corrente elétrica poderemos ter uma analogia do que acontece com o movimento dos elétrons no circuito em que ele percorre. Nesta analogia, a corrente elétrica está para a água assim como a tensão está para a força ou pressão da água na torneira, ou seja, a tensão é a força que faz a corrente elétrica se movimentar (pesquise sobre DDP caso queira saber sobre o assunto) e este movimento da corrente faz com que os dispositivos sejam acionados. Pensando nos robôs para OBR, trabalharemos com correntes contínuas (DC) tanto para alimentação quanto para os sinais elétricos. Para alimentação dos dispositivos, nós trabalharemos com a tensão de até 5V (justamente a tensão oferecida pelas portas do Arduino) e até 12V para alimentar o Arduino. Os motores de tração serão abordados separadamente. 1.2. Sentido da corrente Considerando‐se que existe o movimento da corrente elétrica e isto realiza trabalho nos dispositivos do robô, podemos afirmar que existe o sentido do movimento desta corrente. A partir disto, as fontes de alimentação contínuas possuem polos que definem o sentido da corrente. Caso queira saber mais sobre sentido de corrente pesquise sobre sentidos natural e sentido convencional de correntes elétricas. 1.3. Polos positivos e polos negativos Ao trabalhar com uma bateria de corrente contínua haverá apenas dois terminais, estes terminais, por padrão, são vermelhos e preto. O vermelho sempre será o polo positivo da bateria, por onde, convencionalmente, a corrente “saí” da bateria para o circuito. O terminal preto será o negativo, por onde a corrente “retorna” à bateria. O movimento da corrente elétrica está diretamente ligado à Diferença De Potencial – DDP. A corrente elétrica se movimenta da região com maior DDP para a região com menor DDP. Isto explica as quedas dos raios do céu para a Terra. Caso queira saber mais sobre mais sobre este assunto, pesquise sobre DDP. Convencionalmente, existem uma série de nomenclaturas dadas aos polos positivos e negativos. Abaixo uma tabela mostra as mais conhecidas. Polo positivo e suas nomenclaturas mais comuns Polo negativo e suas nomenclaturas mais comuns Positivo Negativo VCC Ground VC GND Valor da tensão e a unidade, exemplo: 5V Terra Vss Comum + ‐ Uma boa prática de montagem de robô é manter o padrão de vermelho e preto para todos os cabos de alimentação e as demais cores para sinais elétricos. Regra básica de eletrônica: todo circuito elétrico deve ter apenas um polo negativo, ou seja, todos os sensores e atuadores podem ter seus terminais positivos ligados a diferentes fontes de alimentação, porém todos os terminais negativos devem ser ligados em um único polo negativo. Resumindo, é possível ter várias baterias no seu circuito, mas todos os GNDs devem ser comuns! Enfim, sabemos então que toda alimentação do robô deve ser feita por uma fonte de alimentação contínua ou bateria de corrente contínua, onde sempre o terminal vermelho será o positivo e o preto, o negativo. 1.4. Capacidade de carga estável de uma bateria Ao idealizarmos o robô e seus dispositivos (sensores e atuadores), podemos analisar a carga que este robô consumirá por hora, ou seja, o mAh do robô. Sabemos que a corrente elétrica é medida em Ampère e pode ser dada em Ah (Ampère hora), que é a quantidade de carga elétrica transferida por uma corrente estável de 01 ampère durante 01 hora. Para os robôs de OBR trabalhamos sempre com a subunidade: mAh ou miliampères/hora. Vejamos algumas definições: Carga Elétrica – É a quantidade de carga (corrente) constante que pode ser fornecida por uma bateria totalmente carregada até a sua completa descarga em 1h. Por exemplo: Uma bateria de 1200mAh pode fornecer 1200mA (1,2A) por 1h. Taxa de Descarga – É a capacidade de fornecimento de corrente pela bateria. É possível afirmar que a taxa de descarga de 1C (Coulomb) equivale a liberar uma corrente igual a sua Carga Elétrica, porém, este fato causará sua descarga em 1h. Por outro lado, uma Bateria de 2C pode fornecer o dobro de corrente e durará apenas metade do tempo, ou seja, 30minutos. Por exemplo: Umabateria de 1.200mAh e taxa de descarga 1C pode fornecer 1.200mA (1,2A) por 1h. Uma bateria de 1.200mAh e taxa de descarga 2C pode fornecer 2.400mA (2,4A) por 30m. É preciso considerar que uma taxa de descarga elevada aumenta a temperatura da bateria, o que pode acarretar um incêndio. Portanto, a taxa de descarga máxima não deve ser utilizada com frequência, e quando usada nunca deve permanecer nesse estado por muito tempo. Tensão – É o valor da diferença de potencial elétrico (DDP) entre os polos. A tensão é responsável por gerar o movimento dos elétrons (corrente elétrica). A tensão de uma Célula de bateria LiPO pode chegar no máximo a 4,235V. Células – As células são as unidades da fonte de alimentação. Um controle remoto de TV, por exemplo, possui 2 pilhas e cada pilha pode ser comparada a uma célula de uma bateria LiPO. Pack – Um Pack é um grupo de células de LiPO unidas em Série ou Paralelo. 1.5. Dimensionamento da corrente elétrica Para estipular qual a capacidade da bateria que alimentará o robô é preciso saber qual a demanda de corrente presente no robô. Vejamos um exemplo: o sensor óptico Sharp GP2Y0A21YK0F, de acordo com o data sheet do fabricante, tem as seguintes características: Capacidade de medir distâncias entre 10 cm e 80 cm; Tensão de entrada Vin (Volts Input): ‐0,3 a 7,0 Vcc; Corrente média de alimentação: 30 a 40 mA. Fonte: http://www.sharpsma.com/webfm_send/1489 Obs.: Data sheet é um diagrama fornecido pelo fabricante do dispositivo com as especificações técnicas do mesmo. Confira no link acima o data sheet do sensor citado. Ao listar estas mesmas informações de todos os sensores e atuadores presentes no robô podemos dimensionar a carga mínima que a bateria deve supri simplesmente somando‐se o valor de corrente que cada dispositivo demanda. Podemos afirmar que os sensores e atuadores estão ligados em paralelo em relação à corrente e tensão, assim, a tensão será a mesma sobre qualquer dispositivo, porém a corrente será dividida entre eles. Neste ponto é interessante realizar uma pesquisa sobre associação de circuitos em paralelo e em série. Será muito útil ao time para entender a alimentação do robô. Poderíamos realizar todos estes cálculos, mas fica como desafio para o time. Entretanto, por experiência de trabalho, se idealizarmos um robô com total de dez dispositivos sendo alimentados pelas portas IO de uma placa Arduino, cujo fornecimento de corrente é de 40 miliampères, teremos um total de 400 miliampères de demanda para serem supridos pela fonte de alimentação. Ao adicionarmos os motores de tração que demandam uma corrente maior, este valor não ultrapassará 2.000 miliampères. Com isto podemos afirmar que uma fonte de energia acima de 2.000 mAh é suficiente para alimentar todos os dispositivos do robô por uma hora, mas obviamente, uma rotina de recarga de baterias deve ser estabelecida em função do cronograma de treinamentos. 1.6. Associação de Baterias Uma alternativa para se chegar à tensão ou correntes desejadas na fonte de alimentação é a associação de baterias, vejamos: Em Paralelo: os positivos são ligados em comum e os negativos são ligados em comum entre si também. Isto aumenta a corrente e mantem a tensão a mesma. Em Série: o positivo de uma bateria é ligado no negativo de outra, assim a corrente permanece a mesma e a tensão é aumentada. 1.7. Alimentação de motores de tração Para finalizar a sessão de alimentação de robôs é preciso entender como deve ser feita a alimentação dos motores de tração. Os motores de tração demandam uma corrente maior que os demais dispositivos no robô devido ao peso (força) que precisam deslocar, inclusive na subida da rampa, portanto, a corrente que os alimenta deve ser maior. Partindo deste pressuposto e sabendo‐se que o Arduino fornece correntes muito baixas para alimentação de seus dispositivos, não devemos ligar os motores diretamente nas portas do Arduino. Em hipótese alguma o Arduino deve ser a fonte de alimentação dos motores. Isto deve se ao fato de que os motores demandam uma corrente maior do que o Arduino pode suprir. Quando isto ocorre temos fenômeno físico conhecido como corrente reversa. Os motores utilizados para os robôs de OBR são também geradores de energia, assim, se uma corrente não é suficiente para acioná‐los, os motores criam uma corrente alta que é enviada para a fonte de energia, se esta fonte for uma das portas do Arduino, ela será danificada. Fica aqui a sugestão para pesquisa deste fenômeno – corrente reversa. Para solucionar este problema, os motores devem ser alimentados diretamente da bateria do robô ou via drivers de controle. Este assunto será abordado de forma mais detalhada nas próximas sessões. 2. Comunicação de Dados, Sinais Elétricos e Tempo de Processamento Um dos principais pontos a serem compreendidos na construção de um robô de OBR é como lidar com as leituras dos sensores. Uma lógica de programação que utiliza‐se de leituras inconsistentes não terá êxito! Saber interpretar o que um sensor fornece de informação é indispensável para qualquer que seja a lógica de programação. Nos próximos passos entenderemos duas formas de leituras de sensores – leituras analógicas e digitais. Assim, até o momento temos um robô alimentado eletricamente, mas ainda não há leituras de sensores e execução de ações. Não há comunicação de dados entre o controlador Arduino e seus sensores e atuadores. 2.1. Input, Output, analógico e digital Entendemos que a palavra Input refere‐se à uma entrada de informações e que Output refere‐se à saída ou envio de informações. Estas informações podem ser analógicas ou digitais. Tudo o que existe é mensurado em valores analógicos, não há medidas digitais por natureza. O que ocorre nos computadores e controladores é a conversão de valores analógicos em valores digitais para que haja processamento de dados. Devemos entender valores analógicos como sendo as mensurações naturais – temperatura, distância, intensidade de luz, velocidade, etc. Por exemplo, quando utilizamos um sensor de temperatura ligado ao Arduino, ele fará leituras em função da variação de temperatura, porém esta variação será convertida em uma escala de 0 a 1023 para que ele “entenda” a variação que ocorre no ambiente. 2.2. Comunicação de dados Para que haja comunicação entre um elemento emissor e um elemento receptor é preciso que haja uma linguagem a ser interpretada com base em regras pré‐estabelecidas. No robô controlado por uma placa Arduino não é diferente, a comunicação é feita através da interpretação de valores gerados em um sensor pela placa Arduino. Assim é possível definir uma ação a ser tomada para que os atuadores sejam comunicados e executem tal ação. Toda a comunicação de dados no robô é realizada através das portas do Arduino, elas podem ser definidas como Input ou Output. Estas portas devem ser definidas via programação em uma das duas formas, elas não são capazes de assumir as duas formas ao mesmo tempo, mas podem ser alteradas sempre que for necessário. As portas do Arduino recebem valores analógicos ou digitais dos sensores para serem processados. Para os robôs da OBR, estes valores podem fazer referência a duas formas de leituras – variações de tensão nos sinais elétricos e tempo de retorno/leitura. 2.3. Sinais elétricos Já sabemos que todo dispositivo que fará parte do robô deve ser alimentado por uma tensão e corrente elétrica. Quando falamos sobre realizar uma leitura em um sensor estamos falando sobre ler a variação de tensão que foi causada por uma interação com ambiente. Esta variação de tensão é convertida pelo Arduino em valores digitais. Esta conversão é uma transformação de informaçõesnão digitais em digitais. Para isto existe uma técnica chamada Conversão Analógica/Digital. Com isto, é possível transformar uma grandeza analógica (temperatura, pressão, velocidade, etc.), em uma grandeza digital. O Arduino possui em sua estrutura um componente chamado Conversor A/D. Ele é responsável por fazer a conversão de um nível de tensão (um valor analógico), para um valor digital com resolução de 10bits. A quantidade de bits é a resolução da precisão da leitura do sensor. Quanto maior a resolução, mais preciso é o valor comparado. O Arduino possui uma resolução de 10 bits, logo os valores analógicos lidos (0 a 5V) são convertidos em valores digitais de 0 a 1023 (2*10‐1). Veja no exemplo: 0 V corresponde a 0 (digital); 5 V corresponde a 1023 (digital); 2,5 V corresponde a 511 (digital); 1,25 V corresponde a 255 (digital). Assim podemos ter subdivisões para trabalharmos grandezas analógicas como grandezas digitais. Depois que o valor é lido e convertido, o conteúdo desta leitura é armazenado em algum registrador do Arduino e pode ser recuperado mais tarde. Em micro controladores mais robustos, para uso em equipamentos médicos, por exemplo, a resolução dos Conversores A/D é bastante alta, entre 16 e 18 bits. Em resumo, os valores de tensão que variam em função do ambiente são convertidos em bits para serem processados pelo Arduino. Assim, independente do sensor analógico que estiver usando, sua variação de tensão será convertida nesta escala de 0 a 1023 bits. 2.4. Tempo de leitura Alguns sensores digitais podem proporcionar uma leitura numérica. É o caso do sensor Breakout ‐ QRE1113 Digital da SparkFun, por exemplo. Fabricante: https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf Este sensor é utilizado para diferenciar intensidades de cores. Ele será abordado com mais detalhes nas próximas sessões. Neste momento é interessante saber que este sensor, apesar de ser chamado de digital, não executará leituras com valores de 0 e 1 (supostamente digitais). Ele é chamado de sensor digital pela forma de acionamento dos pinos, mas a leitura será dada pelo tempo de execução entre o emissor e o receptor de luz. Este sensor, ao ser acionado, emite luz através do LED emissor. Esta luz, quando refletida, é recebida pelo sensor foto transistor. Diferente dos sensores analógicos que são interpretados em função da variação de tensão, este tipo de sensor é interpretado pelo tempo de execução da emissão de luz e recepção da mesma. Vejamos o código abaixo: pinMode( 2, OUTPUT ); //Define como saída digitalWrite( 2, HIGH ); //coloca o pino em alto, o sensor emite luz delayMicroseconds(10); // aguarda 10 microssegundos pinMode( 2, INPUT ); //Define como entrada long time = micros(); // uma variável recebe o valor do cronômetro micros // Na próxima linha, há uma comparação do tempo em que a entrada do pino 2 fica em nível // lógico alto (HIGH), e é finalizada caso não receba retorno da luz após 3 segundos. while (digitalRead(2) == HIGH && micros() - time < 3000); // A veriável diff recebe o valor do tempo atual subtraído da leitura do tempo anterior. int diff = micros() - time; Em resumo, é feita uma leitura do tempo de retorno da luz, está leitura tem variações de tempo em função da cor da superfície na qual incide e distância do emissor até a superfície, portanto, é necessário que este tipo de sensor seja sempre calibrado em relação à distância do emissor à superfície e em relação às cores da superfície. Caso o valor de retorno seja maior que 3 segundos, o programa acima considerará como perda de leitura. Retomando a comparação com os sensores analógicos, este não mensura variação de tensão, mas sim de tempo. Qualquer sensor que realize leituras fixas de 0 ou 1023 bits, exatamente estes valores, provavelmente está com algum defeito, pois não existe para Arduino sensores tão precisos. 3. Na prática ‐ Utilização de sensores, atuadores e driver motores Nesta sessão serão abordados alguns dos sensores, atuadores e motor drivers mais utilizado pelos times de OBR. 3.1. Sensores de distância Sensor HC‐SR04 Este módulo de sensor ultrassônico HC‐SR04 detecta objetos entre distâncias mínimas de 2 centímetros e máximas de até 5 metros. Sua precisão de sensoriamento gira em torno de 3 milímetros. Seu funcionamento é baseado na emissão de um ultrassom e possibilidade de “escutar” o retorno caso encontre algum objeto. Para isto, é preciso alimentar o módulo com 5 Volts de tensão DC e colocar o pino Trigger em nível lógico alto (HIGH) por 10 microssegundos, no mínimo. O sensor emitirá uma onda sonora que, ao encontrar um obstáculo, sofrerá o efeito reverso e voltará ao módulo. Após os 10 microssegundos citados o pino Echo deve ser estar em nível lógico alto e o pino Trigger deve estar então em nível lógico baixo (LOW). Com isto, é possível realizar o cálculo da distância em que o objeto se encontra com base no tempo em que o pino Echo permaneceu em nível alto após o pino Trigger ter sido colocado em nível alto. A equação ficará assim: Distância = (Tempo de Echo em HIGH * Velocidade do Som) / 2 Sabe‐se que a velocidade do som é idealmente considerada 340m/s, desta forma, o resultado é obtido em metros se considerado o tempo em segundos. A divisão por 2 é devido ao fato de que a onda é enviada e retorna ao sensor, assim, percorre 2 vezes o trajeto calculado. Especificações Alimentação: 5V DC; Corrente de Operação: 2mA Ângulo de efeito: 15° ‐ Um ângulo maior que 15° causará a perde de sinal ou uma leitura inconsistente. Alcance: 2cm a 4m e precisão de 3mm. Esquema Código disponível no arquivo: HC_SR04_‐_Sem_Lib Dica: Sempre que for necessário realizar pesquisas sobre sensores e atuadores, procure primeiro no site do fabricante, os Data Sheets sempre trazem as principais informações. Sharp GPY2Y0A21YK0F IR e sua curva característica Como vimos anteriormente, o ambiente interage com os sensores e podemos mensurar algumas grandezas, porém, para trabalhar com Arduino devemos convertê‐las em valores digitais. Uma vez que este processo é realizado o Arduino pode processar as informações. No momento de devolver uma informação ao mundo analógico o Arduino apresentará tais valores em uma escala de 0 a 1023 bits, independente da origem da grandeza (velocidade, tensão, pressão, temperatura, etc.). Para que possamos realizar uma leitura em nas grandezas que conhecemos podemos aplicar a técnica da curva característica do sensor. Ela pressupõe que sejam feitas amostragem de valores entre os pontos extremos da capacidade de leitura do sensor. Assim teremos informações para gerar uma curva e inserir em uma planilha digital capaz de fornecer a equação que dará os valores em grandezas conhecidas para qualquer valor digital fornecido pelo Arduino. Vejamos na prática utilizando um sensor Sharp GPY2Y0A21YK0F IR. Sharp GPY2Y0A21YK0F IR – Sensor de Infra vermelho Este módulo de sensor é usado para mensurar distâncias através da emissão e reflexão infra vermelho. As informações técnicas deste módulo e de outros modelos podem ser acessadas em: http://www.sharpsma.com/webfm_send/1489 http://category.alldatasheet.com/index.jsp?sSearchword=DISTANCE+0A41SK+&sPage=1 Seu funcionamento se baseia na emissão de raios infra vermelhos em direção à um objeto. Dependendo da distância que o objeto estiver do sensor, parte dos raios emitidos são absorvidos e/ou refratados e outra parte retorna ao sensor, podendo ser medidos e convertidos em sinal analógico. Quanto maior o valor analógico emitido pelo sensor, menor será sua distância até o objeto, pois a parcela de luz desviada também é menor. Os usados no Arduino possuem faixas de trabalho, ou seja,suas leituras são precisas apenas dentro dos seus limites. No caso deste sensor Sharp, seu range de trabalho teórico é de 3 à 40 cm. Geralmente os sensores possuem em seu Data Sheets informações sobre suas limitações de trabalho, tal como a figura abaixo para este sensor Sharp. Faixa de trabalho do sensor Sharp GPY2Y0A21YK0F IR Para valores menores que 3 cm, a curva é indefinida e imprecisa, e para valores maiores que 40 cm, o gráfico tende a formar uma linha horizontal, resultando em pouca variação de tensão analógica quando variamos a distância. Portando, sua faixa de trabalho é de 3 à 40 cm. Esquema Curva teórica e curva prática Dado o fato de o valor analógico gerado pelo sensor ser inversamente proporcional à distância até o objeto, é comum acontecer confusão quanto ao seu funcionamento. A curva é necessária para convertermos um valor analógico para um valor com unidade de medida conhecida. Quando um fabricante constrói um sensor ele faz ensaios práticos para saber o comportamento característico do sensor que construiu. No caso dos modelos Sharp, o objetivo desses ensaios é saber o valor da tensão gerada pelo sensor versus a distância do objeto. A figura anterior apresentou uma curva teórica. É necessário então repetirmos o procedimento feito pelo fabricante para obtermos dados mais assertivos. Para realização da curva prática serão necessários os seguintes materiais: Placa Arduino; Sensor Sharp; Computador com software do Arduino e planilha digital (ok para MS Excel); Régua de 30 ou 40 cm; Fita adesiva; Objeto com superfície plana e de superfície clara (ex.: caixa de papelão branca); Programação no Arduino capaz de realizar uma leitura analógica e exibir no Serial Monitor – Disponível no arquivo: Curvas_Sensores; Método Serão 20 passos, o resultado melhora a compreensão do trabalho com este tipo de sensor, então vale a pena gastar uma hora do seu treinamento para realizar este experimento. 1. Posicione o sensor conforme figura a seguir (90 graus em relação à superfície). 2. Posicione a régua de forma alinhada ao sensor e fixar sua posição; 3. Posicione o objeto sobre a régua em sua maior distância, mantendo o alinhamento em relação ao sensor e à régua; 4. Compile e transfira o programa “Curvas_Sensores.ino” fornecido com este material. Ele fará a leitura dos valores analógicos e os exibirá no Serial Monitor em linhas separadas. 5. Execute o Serial Monitor por pelo menos 5 segundos (verifique se a opção 9600 baud está selecionada), este valor de taxa de comunicação serial deve corresponder ao parâmetro da função Serial.begin(parâmetro). 6. Desabilite a opção “Autoscroll” e seleciona uma série de pelo menos 50 valores. Não há uma quantidade exata, mas quanto mais leituras forem selecionadas, melhor será o resultado. 7. Copie a série e cole em uma planilha do MS Excel ou qualquer editor de planilhas que estiver usando em seu computador. Quando copiados os valores, faça os seguintes passos: a. Coloque cada leitura em uma linha diferente; b. Anote o valor da média aritmética da seleção em uma célula separada; c. Em seguida, anote o valor da distância em centímetros que o objeto se encontra na coluna ao lado. 8. Feche o Serial Monitor. 9. Mova o objeto precisamente 1 cm mais próximo do sensor sem perder o alinhamento. Repita os passos de 5 à 8 até que a distância mínima de trabalho do sensor seja atingida (neste caso, 3 cm); 10. Após concluir a tabela das médias dos valores analógicos com seus respectivos valores em centímetros, selecione o intervalo destes valores e inserira o Gráfico de Dispersão dos pontos. Ele se encontra em: Menu Inserir > Inserir Gráfico de Dispersão (X,Y). 11. Clique com o botão direito sobre o gráfico e selecionar a opção Selecionar Dados. 12. Clique em Adicionar. Após clique no botão para adicionar Valores X da série, limpe qualquer conteúdo existente e selecione a coluna contendo todas as Médias dos Valores Analógicos do Sensor. Pressione Enter para confirmar. Repita o mesmo procedimento para Valores Y da série, selecionando a coluna com todas as distâncias em centímetros do sensor. 13. Neste passo, seu gráfico deve se parecer com o gráfico abaixo. Linha de gráfico sem tendência 14. Clique com o botão direito sobre qualquer um dos pontos exibidos e depois, clique em Adicionar Linha de Tendência. Em seguida, clique nas opções Potência e Exibir Equação no gráfico, e em Exibir o valor de R‐quadrado no gráfico. Atenção, um equívoco comum é inverter os Valores das séries X e Y do gráfico, colocando as distâncias em X e valores analógicos em Y. Linha de gráfico com tendência 15. Obs.: Mesmo que o seu gráfico contenha um número diferente de pontos do gráfico acima ele tem um formato parecido com a curva teórica, aquela que o fabricante do sensor disponibiliza. 16. Obs. 2: O valor de R‐quadrado representa a qualidade da aproximação feita pela curva. Quanto mais próximo de 1, melhor a curva selecionada representa o fenômeno presente nos pontos obtidos. Como curiosidade, experimente mudar o tipo de linha de tendência para as outras opções e veja o que acontece com o seu valor. 17. Agora obtemos a equação característica do sensor de distância. Esta equação converte o valor analógico lido pelo sensor de distância em uma unidade de medida conhecida (neste caso, em centímetros). Para testar o resultado, experimente calcular o valor y (distância) para um determinado x (valor analógico) e veja se corresponde aos valores obtidos no procedimento. 18. Para implementar a equação mostrada na acima, escreva em uma célula qualquer: =2411*x^0,991 ou =2411*x^0.991 Onde x é o valor analógico. O resultado será a distância em centímetros. 19. Para finalizar, implemente esta equação no código logo após realizar a leitura do sensor e utilize o valor resultante em cm. 20. Vale ressaltar que este tipo de procedimento empírico é amplamente utilizado em engenharia nas mais diversas aplicações. 3.2. Sensores de refletância QTR‐8RC Reflectance Sensor A Matriz QTR‐8RC Infra Red Reflectance Sensor possui oito pares de IR (InfraRed ‐ Fototransistor e LED) o que proporciona muita precisão e recursos para um robô seguidor de linha. Os pares de LED’s são dispostos em série para reduzir pela metade o consumo de corrente e cada sensor fornece saídas digitais separadas. A matriz QTR‐8RC é concebida como um sensor de linha. O módulo é construído sobre uma placa de 9,525 milímetros. Cada foto transistor utiliza um circuito de descarga de capacitor, o Arduino utiliza o tempo de descargas destes capacitores através das portas I/O e quanto menor este tempo de descarga, mais reflexão o sensor está detectando. Especificações (fabricante em inglês): Neste link é possível encontrar exemplos práticos de códigos e data sheets. O material está em inglês mas pode ser facilmente entendido. https://www.pololu.com/docs/0j19/all e https://www.pololu.com/docs/pdf/0j12/qtr‐8x.pdf Bibliotecas Este tipo de sensor deve ser usado com sua biblioteca de códigos. São arquivos que o fabricante disponibiliza para aceso ao sensor de forma mais eficaz. Link para download: https://github.com/pololu/qtr‐sensors‐arduino e https://github.com/nakkaya/corba Talvez seja preciso criar os arquivos com bloco de notas do Windows e salvar nas extensões “.h” e “.cpp” copiando e colando os comando dentro dos arquivos. Exemplo de robôs seguidor de linha com QTR 8 RC Este exemplo mostra (em português) um passo a passo de um robô seguidor de linha com os sensores em barramento. http://www.instructables.com/id/Line‐following‐Robot‐with‐Arduino/?lang=pt&ALLSTEPSExemplo de codificação disponível no arquivo: Refletancia_Analogica_QTR_8_RC_‐ _Barra Sensor de refletância QRE1113 O sensor QRE1113 é um sensor de reflexão usados frequentemente para robôs seguidores de linha. O sensor funciona através da emissão de luz através de um LED. Esta luz é refletida para o sensor foto transistor. Existem os modelos analógicos e digitais para sensores da Pololu e SparkFun. A versão analógica é muito simples, ela gera uma tensão analógica no pino do sinal em relação à quantidade de luz que foi refletida. A versão digital, ao contrário do que sugere, não faz leituras de valores alto e baixo (HIGH e LOW), mas sim da variação de tempo de resposta entre emissão de luz e receptor. Veremos ambos os sensores. Sensor de refletância QRE1113 ‐ Analógico Data Sheet https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf Esquema Apenas três ligações, VCC, GND e sinal analógico. Exemplo de Codificação disponível no arquivo: Refletancia_Analogico_QRE1113 Sensor de refletância QRE1113 ‐ Digital A versão digital é projetada para uso em entradas digitais do Arduino, mas ainda assim necessita de uma leitura analógica da quantidade de luz refletida. Isto lhe permite carregar um capacitor na placa e cronometrar quanto tempo leva para descarrega‐lo. Quanto mais luz que é refletida, menos tempo que leva para descarregar o capacitor. Desta forma temos uma variação entre superfícies brancas e escuras. O tempo varia entre 10 microssegundos e 2,5 milissegundos, ou seja, tudo isso é feito de forma muito rápida não impactando em atraso na leitura do sensor. Esquema Apenas ligação de três conectores, VCC, GND e Sinal Exemplo de codificação disponível no arquivo: Refletancia_Digital_QRE1113 3.3. Criando sensores de refletância Modelo 01 Aqui apresentaremos uma alternativa na falta de um sensor de refletância. Um sensor de refletância pode ser construindo com poucos componentes, vejamos: 01 – LED 5mm; 01 – LDR 5mm; 01 – Resistor de 330 ohms a 1k; 01 – Resistor de 10k; Jumpers; Tubo termo retrátil Esquema Solde os componentes de acordo com a imagem abaixo, o cabo amarelo será ligado à uma porta analógica do Arduino e os outros dois serão a alimentação. Na prática O primeiro passo é criar uma proteção ao redor do LDR, somente a luz oriunda do LED é interessante neste momento, recomenda‐se utilizar LED’s de alto brilho. O material pode ser uma capa de plástico com cola quente atrás ou uma fita isolante, desde que fique isolada da iluminação externa, ok! Separe e solde o resistor de 330 ohms no terminal positivo do LED conforme imagem abaixo. No outro terminal (negativo), solde um jumper. No LDR, em qualquer um dos terminais, solde o resistor de 10k. O LDR deve ficar como na figura abaixo e Aplique o termo retrátil como na imagem abaixo. Solde o terminal positivo do LED (lado com o resistor) no terminal sem Resistor do LDR e aplique o termo retrátil. No detalhe o resistor isolado pelo termo retrátil. A montagem quase finalizada deve começar a ter este formato com a aplicação de termo retrátil para isolamento das soldas. Para finalizar, uma o LED ao LDR com fita isolante de modo a ter o formato como na figura abaixo. Exemplo de codificação disponível no arquivo: Refletancia_Analogico_Manual Modelo 02 Materiais 01 placa Ilhada 5 X 10 04 Sensores Reflexivos Infravermelhos Cabos Jumper 04 resistores de 330 ohms 04 resistores de 10k Funcionamento do sensor Primeiro passo é colocarmos os sensores: Espaço entre os furos Gire a placa e siga as imagens: LED (Emissor) Foto transistor (Receptor) 5V GND Pinos Arduino Dobre os pinos GND LED, neste sentido, até tocar os GND do Foto transistor. Solde os pinos Arduino do Foto transistor. Solde os Pinos GND do LED. Solde os Pinos GND do Foto transistor junto com a parte dobrada do GND do LED. Corte as sobras do GND do Foto transistor. Vamos ligar todos os GND em uma trilha: Agora vamos colocar os resistores do LED: Use resistor 330 ohms nesta posição nos quatro sensores: Agora solde o resistor e junte com o 5V do LED. Repita o processo nos quatro resistores Ficando assim: Observação: As soldas necessitam ficar isoladas! Os círculos vermelhos são 5V e as setas pretas são GND! Agora vamos colocar os resistores do Foto transistor: Use resistor 10K nesta posição nos quatro sensores: Solde os resistores do Foto transistor junto com o Pino do Arduino conforme as setas: Observação: As soldas necessitam ficar isoladas! Os círculos vermelhos são 5V do LED com seus respectivos resistores, e as setas pretas são GND! E os círculos cinza são os pinos do arduino! Agora dobre os pinos debaixo do resistor do LED e junte com os pinos do resistor do Foto transistor conforme as setas! Solde os pontos indicados Solde os cabos! 3.4. Sensores de cor Sensor de Cor Para MCU Arduino 3V ‐ 5V TCS230 TCS3200 O módulo de detecção de cores utiliza o sensor TCS230, ele é composto por 64 fotodiodos. Entre os 64 fotodiodos, o sensor possui 16 deles com filtros para a cor vermelha, 16 para a cor verde, 16 para a cor azul e 16 não tem filtro algum. É possível observar que são distribuídos de forma uniforme sobre a placa do sensor. Sensor de Refletância Infravermelho Pronto! OBS: é só cortar a área não utilizada da placa para diminuir o tamanho. Cuidado para não cortar os fios ou danificar a solda! Funcionamento Este tipo de sensor capta a luminosidade, filtra a cor e gera na saída um sinal com as informações sobre a intensidade das cores vermelho, verde e Azul. Possui ainda quatro LED’s brancos para iluminação e oito pinos para conexão. A alimentação pode ser feita de 3 a 5 volts. O Arduino utiliza 5 pinos para comunicação, são eles: S0, S1, S2, S3, e o pino OUT, que é o responsável pelo envio das informações. O pino OE (Output Enable) será ligado ao GND. No programa que acionará o sensor, os pinos S0 e S1 são colocados em nível alto para então os pinos S2 e S3 serem alternados de estados, isto determina qual fotodiodo será ativado. Abaixo uma relação de combinações que determinam o tipo de frequência de saída e também o padrão de ativação dos fotodiodos: Pino Frequência de saída S0 S1 LOW LOW Desligado LOW HIGH 2% HIGH LOW 20% HIGH HIGH 100% Pino Foto diodo S2 S3 LOW LOW Vermelho / Red LOW HIGH Azul / Blue HIGH LOW Sem Filtro HIGH HIGH Verde / Green Para determinação destes resultados é utilizado o modelo de tabela verdade entre os pinos de S0 a S3. Esquema Abaixo o esquema de ligação dos oito pinos do sensor. A codificação acompanha o material e está disponível no arquivo: TCS230_‐_TCS3200_‐_Cores. 3.5. Fabricação de sensores de cor Modelo 01 Uma alternativa para detecção de cores é a fabricação de um sensor de cor como no esquema abaixo. Este esquema é o mesmo utilizado na construção do sensor de luz, porém, para utilização com detecção de cores a diferença será feita na interpretação dos valores de saída. Para tanto utilizaremos um exemplo de código diferente. O código acompanha o material e está disponível no arquivo: Refletancia_CORES_Sem_Lib_Manual. 3.6. Fabricando sensor de mercúrio Um sensor de mercúrio tem a função de acionar ou desligar um circuito por meio do contato do mercúrio com dois polos. Esquema: Materiais Barra de pino macho Placa padrão ilhada 5x10 Módulo de mércurio Resistor de 10k Placade acrílico ou plástico transparente (opcional para acabamento) Na prática Encaixar o sensor de mercúrio na placa ilhada na seguinte posição: OBS.: Debaixo para cima no furo 5 e da direita para esquerda no furo 2 e 4. Encaixar o resistor de 10K: OBS.: Debaixo para cima no furo 2 e 5 e da direita para esquerda no furo 5. Virar a placa ilhada e soldar o resistor e o sensor de mercúrio. Após a solda cortar a sobra do fio metálico. Encaixar os pinos nestas posições: OBS.: Nos furos 2, 4 e 5 da esquerda para direita e pinos 1 debaixo para cima. Gire a placa e solde os conectores: Preencher a trilha de solda do Sinal: Preencher a trilha de solda do Negativo: Juntar as soldas para dar contato nas duas trilhas: Vista da parte de trás do Sensor Mercúrio: Sensor Mercúrio Vista da parte da frente do Sensor Mercúrio: Corte o acrílico ou plástico no tamanho que proteja o sensor de mercúrio: Após realizar o download da programação para o Arduino podemos visualizar o funcionamento de duas formas: Verificar o Pin 13 Led do Arduino; Abrir o serial monitor do programa do Arduino. Quando inclinamos o sensor para trás, o contato é estabelecido através do mercúrio e o Pin 13 LED acende ou no caso do serial monitor ele acusará 0. 3.7. Atuadores Servo Motores Os servos motores são, via de regra, são pequenos, rápido e possuem muita força, a maioria tem capacidade para levantar até 1 kg de carga. Os servos motores podem ser utilizados em projetos vários tipos de projetos e automações. Podem, ser rádio controlados (carros, aviões, helicópteros, lanchas, etc.). Sua alimentação pode ser ligada diretamente nas portas do Arduino, pois, trabalham com baixas correntes. A Arduino é compatível com a maioria dos modelos de servo motor, entre eles: Hitec, Futaba GWZ, JR e etc. Para comunicação e alimentação, ele possui uma interface padrão de três conectores – Sinal PWM, VCC e GND – geralmente o fabricante disponibiliza 3 tipos de braços + parafusos de fixação. Coloque cola quente e fixe o acrílico ou plástico para proteção. Agora basta ligar o positivo, o negativo e o sinal na porta 2 do Arduino e realizar o teste. Segue a figura abaixo: Os servos motores são capazes de efetuar giros na angulação desejada em função de um mecanismo chamado Encoder que estão acoplados ao motor. Eles são responsáveis por mensurar a quantidade de graus que o eixo do motor realiza. Dica de estudo: Enconder! Importante, um servo motor não pode ser utilizado para tração do robô, apenas para garras e demais funções. Inclusive os modelos mais comuns proporcionam 180 ou 360 graus de giro. Exemplo de codificação disponível no arquivo: Sweep Bibliotecas Os servos possuem uma biblioteca de códigos nativa do Arduino, esta biblioteca precisa de um objeto de classe para ser acessado, neste caso o objeto de classe é a palavra myservo no código acima. Através da criação de um objeto, a classe Servo pode ser acessada. Isto acontece na maioria das bibliotecas onde são criadas demandando o acesso por objetos. O assunto sobre classes e objetos e programação orientada a objeto é muito importante e o time de OBR deve estuda‐lo, então ele fica como dica de estudo. Informações Técnicas Alguns fabricantes e seus data sheets: http://www.electronicoscaldas.com/datasheet/MG90S_Tower‐Pro.pdf http://datasheet.sparkgo.com.br/SG90Servo.pdf http://www.rctoys.com/pdf/hitec‐servos/HIT‐HS55.pdf Motores de Tração Motores de tração são conhecidos como motores DC – de corrente contínua. Geralmente estes motores demandam uma corrente mais alta que os demais componentes do robô, e portanto, necessita, de uma alimentação externa ao Arduino. Eles podem ser alimentados diretamente pela bateria. Exemplos de motores DC Os motores DC são utilizados para tracionarem o robô, segue imagens de alguns modelos mais usados. Os motores da Lego são considerados servo motores, porém, diferente dos servos apresentados anteriormente eles são mais dimensionados para executar tarefas pesadas e justamente por isso demandam mais força, ou mais corrente. Para tracionarem o robô eles podem ser utilizados se ligados no modo DC, apenas com os cabos branco e preto (padrão dos cabos lego). Veremos mais sobre isso na sessão sobre montagens de robô. Importante saber que os motores DC não possuem terminais positivos e negativos definidos, eles aceitam quaisquer destas entradas, quando definimos um terminal como VCC e ou como GND estamos definindo o sentido do giro deste motor DC. Se houver uma inversão a única consequência será a inversão do sentido do giro. Justamente este tipo de controle será abordado na próxima sessão, com os drivers de motores e ponte H. Motor com redução Os motores possuem uma capacidade de força e velocidades definidas, chamamos esta força de torque (fica mais uma dica de pesquisa: torque). Por agora podemos dizer que o torque é a força que o motor pode realizar. Quando um motor não possui torque suficiente para mover uma carga (ou o peso do robô), podemos utilizar o recurso das reduções de velocidade, são conjuntos de engrenagens que reduzem a velocidade de um motor e lhe confere mais torque. Controle de Tração Os motores DC deve ser controlado para que o robô possa navegar de forma autônoma e programada. Os motores DC não podem ser controlados diretamente pelos pinos do Arduino, os motores demandam correntes mais altas que o Arduino pode fornecer, este fato pode causar Redução de Velocidade Motor DC o fenômeno físico chamado corrente reversa e danificar a placa Arduino. Para controlar motores DC são utilizados dispositivos chamados Motor Driver ou Ponte H. Driver Motores Acima alguns dos Drivers mais comuns, exemplificaremos o modelo Motor Shield L293D Driver Ponte H para Arduino, da DK Eletrônics. Este drive de motor, assim como a maioria, possui em seu circuito um CI regulador de tensão (neste caso, o CI do meio, na foto), e um CI para controle de dois motores (neste caso, possui dois CI’s e controla até quatro motores). O regulador de tensão tem a função de controlar a Alimentação VCC e GND Entrada dos terminais de dois Motores CI L293D para controle de dois motores – Ponte H CI Regulador de te’nsão. CI L293D para controle de dois motores – Ponte H Entrada dos terminais de dois Motores tensão que irá para os motores para que não o Arduino não seja danificado. Este Drive faz uso de uma biblioteca chamada AFMotor e pode ser baixada em: http://yourduino.com/s/AFmotor.zip e http://yourduino.com/s/AccelStepper.zip Data Sheet: http://yourduino.com/docs/Multi‐MotorShieldSchematic.jpg Os demais links são exemplos de modelos e programação que serão úteis para o desenvolvimento de projetos com este driver. http://playground.arduino.cc/Main/AdafruitMotorShield https://learn.adafruit.com/adafruit‐motor‐shield A Codificação disponível no arquivo: Driver_Motor_L293D_Com_Lib_‐_Elaborado Para este exemplo é preciso incluir a biblioteca do motor na pasta padrão do Arduino, ela deve ser baixada no link acima e, caso o sistema operacional for Windows XP ou superior, ela deve ser colocada no diretório C:\Program Files (x86)\Arduino\libraries e então reinicie o Sketch do Arduino. Este drive possui uma peculiaridade que gera algum trabalho a mais para ser utilizado, porém confere um ótimo desempenho. Este trabalho a mais trata‐se do fato de o Driver ser plugado em todos os pinos do Arduino e não possuir uma extensão para que os pinos que não estão sendo utilizados por ele sejam utilizados para outras funções. Para resolveresta situação é possível soldar uma barra de conectores fêmea ou macho no local indicado na imagem abaixo. A solda é feita no lado inferior do drive. Para mais informações, acesse: https://filipeflop.wordpress.com/category/motores‐e‐ servos/ 3.8. Construção de um driver para 2 motores CI L293D Nesta sessão abordaremos uma alternativa para controle dos motores caso não haja um drive de motor. O CI apresentado no driver acima (L293D) pode ser utilizado programando‐se diretamente em seus pinos. Vejamos como: Este CI (conhecido também como ponte H), pode ser adquirido em lojas de eletrônica e seu custo é bem baixo em relação ao drive de motor. Note que ele possui uma marcação em um dos lados, este detalhe indica o início da numeração dos pinos. A seguir o esquema do CI. Data Sheet O data sheet pode ser acessado em: http://www.arduino.cc/documents/datasheets/L293D.pdf Resumindo as ligações: Pinos Ligações Pino 01 – 5V Ligar no pino 9 e no pino 16 e em uma alimentação de 5 VCC. Pino 02 – INPUT 1 Ligar em uma PWM do Arduino Pino 03 – OUTPUT 1 Ligar em um dos terminais do motor 01 Pino 04 – GND Ligar no GND do Arduino Pino 05 – GND Ligar no GND do Arduino Pino 06 – OUTPUT 2 Ligar no outro terminal do motor 01 Pino 07 – INPUT 2 Ligar em uma PWM do Arduino Pino 08 – VS Ligar no positivo da bateria Pino 09 – 5V Ligar em uma alimentação de 5 volts (pode ser a mesma do pino 01) Pino 10 – INPUT 3 Ligar em uma PWM do Arduino Pino 11 – OUTPUT Ligar em um dos terminais do motor 02 Pino 12 – GND Ligar no GND do Arduino Pino 13 – GND Ligar no GND do Arduino Pino 14 – OUTPUT Ligar no outro terminal do motor 02 Pino 15 – INPUT Ligar em uma PWM do Arduino Pino 16 – 5V Ligar em uma alimentação de 5 volts (pode ser a mesma do pino 01) Exemplo de Codificação disponível no arquivo: Driver_com_CI_L293D. Ilustrações de um driver construído com CI L293D 4. Estruturas – Construção de modelos de exemplo para competições OBR Veremos nesta sessão a construção de alguns modelos de robôs de OBR, eles podem ser alterados, o objetivo desta sessão é apenas propor sugestões de trabalho aos times. Zumo – Motores DC, bateria LiPO e controladoro Garagino. O Zumo é uma base de robô com esteira, nela é possível montar todo o aparato de um robô de OBR. O Garagino é um modelo proprietário de Arduino. Ele se mostra como uma boa alternativa para controle de robô pelo seu desempenho e pouco espaço físico que ocupa devido ao seu tamanho menor em relação aos modelos originais. Fabricante: O fabricante é a empresa Laboratório de Garagem: http://www.labdegaragem.org/loja/garagino‐4.html Materiais e Características 1x Dual Motor Garagino 1x Kit Garagino Rev 1 Básico 1x Zumo Chassis Kit 2x Micro motor com caixa de redução de metal 75:1 ou 2x Micro motor com caixa de redução de metal 100:1 2x Sensor de Refletância QTR‐1RC (Digital) ou 1x Breakout de Sensor de Linha QRE1113 – Digital 1x Sensor de distância por ultrassom ‐ Maxbotix LV‐EZ1 ou 1x Sensor de distância por ultrassom ‐ LV‐EZ3 1x Servo ‐ Motor Pequeno 2x Fita Hellermann (Enforca Gato) 1x Fita Dupla Face Esponjosa Alguns Jumpers F/F Alguns Pedaços de Madeira Dual Motor Garagino O Dual Motor Garagino é um Shield para Garagino muito prático, com ele é possível utilizar a mesma biblioteca desenvolvida pela empresa Laboratório de Garagem para o Dual Motor Shield (DualMotor.h). O Dual Motor Garagino possui 6 pinos destinados à conexão de até 6 sensores (A0 a A6) e 2 pinos destinado a servo motores (D4 e D9). Os 8 pinos disponíveis podem ser utilizados para qualquer outra finalidade, eles são extensões dos pinos do Garagino para facilitar a conexão de sensores ou servo‐motores. Características: Jumper de alimentação para o Garagino: 5V; Tensão máxima (Motor): 30V; Corrente máxima (Motor): 600mA; Shields compatíveis: Mini Ethernet Shield e Mini RF Shields (Transmitter e Receiver). Biblioteca: O download da biblioteca DualMotor.h pode ser efetuado clicando o nome da biblioteca. Funcionamento Para esclarecer nomenclaturas, Headers são equivalentes aos pinos. 1. Faça a montagem da madeira e do servo utilizando fita dupla face e fita hellermann, conforme a imagem abaixo: 2. Prenda ou Cole o pedaço que foi montado abaixo da Dual Motor Garagino, faça o mesmo do outro lado para que não haja diferença de altura entre os lados. 3. Cole também do outro lado dos pedaços de madeira, mais fita dupla face para que seja possível colar o Dual Motor Garagino à plataforma, conforme as imagens abaixo: 4. Posicione os sensores de refletância, certifique‐se que a distância entre eles seja pouco maior que a linha a qual o carrinho irá seguir, no nosso caso uma fita isolante, e também posicione o sensor de ultrassom a frente da plataforma (este modelo pode ser alterado para o modelo HC SR04 abordado no material), conforme a imagem abaixo: 5. Faça as ligações dos sensores, motores e do servo‐motor conforme a figura abaixo: 6. Faça as ligações dos motores e do case de bateria do Zumo ao Dual Motor Garagino. 7. Por fim, a imagem abaixo mostra a montagem completa. O código de programação acompanha o material de estudo está disponível no arquivo: Zumo. LegoÍno – Motores e bateria NXTg e placa Revolution Este modelo é um híbrido de Lego e Arduino, ele utiliza uma estrutura construída com peças Lego e a alimentação, o sensoriamento e controle são feitos com materiais alternativos a placa Arduino. Materiais: Estrutura Lego – Verificar manual de montagem HTML disponibilizado juntamente com este material; 01 Placa Arduino ‐ Neste exemplo utilizaremos o modelo Revolution (da empresa Empretec), porém outros modelos podem ser utilizados, tais como Uno e Moge 2560; 01 Driver Motor – Neste exemplo utilizaremos o driver da empresa Empretec – porém ele pode ser substituído pelo L298N Dual H; 01 ensor Ultrassônico Modelo HC‐SR04 ou Sharp 10 à 80 cm; 01 – Suporte para 6 Pilhas AA; 01 Barra de sensores de refletância Analógico (abaixo possíveis modelos); Cola Quente, parafusos para fixação do Arduino e Driver, cabos Jumper; 01 Chave de contato liga/desliga. 01 Cabo de comunicação Lego; Na Prática Vamos iniciar a montagem do robô com base de Lego e controlado por Arduino. 1. O primeiro passo será montar o robô do manual disponibilizado com este material. 2. Em seguida, corte o cabo LEGO e separe os fios branco e preto. O fio branco será ligado no polo positivo e o preto no polo negativo. 3. Fixe o driver motor com parafusos. a. Conecte o cabo branco do motor da direta na A+; b. Conecte o cabo preto do motor da direita no A‐; c. Conecte o cabo branco do motor da esquerda na B+; d. Conecte o cabo preto do motor da esquerda no B‐ e. A seta vermelha acima indica a ligação da energia para o Drive (VCC e GND). No caso do driver motor L298N Dual H a única diferença está nos nomes das portas de conexão dos motores. No driver da empresa Empretec (modelo verde acima) serão: A+, A‐, B+ e B‐. Caso o drive seja o L298N, as conexões de motores serão out 1, out 2, out 3 e out4. 4. Alimentação do Driver a. O cabo vermelho será a conexão do polo positivo da bateria b. O cabo preto será a conexão do polo negativo da bateria; c. A chave geral do circuito deve ficar entre a conexão do driver e o polo negativo, ou seja, corte o cabo preto e coloque neste ponto a chave geral 5. Note que há três conexões – VCC, GND e 5V: a. VCC – entrada de energia da bateria para alimentar o Driver de motor; b. GND – Retorno, comum a todos os GND do robô; c. 5V – Saída de energia do driver do motor, corrente baixa, podeser utilizada para alimentar o Arduino se for interessante. As conexões VCC e o 5V não devem ser confundidas, pois uma alimenta o Driver de Motor e a outra é a saída do Driver de Motor para alimentar algum circuito (geralmente para alimentar o Arduino). Ou seja, se a conexão VCC não estiver alimentada, a conexão 5V não funcionará. 6. Cole o botão liga / desliga com cola quente! 7. Cole o sensor ultrassônico no local indicado com cola quente, com os pinos de conexão para cima. 8. Solde os cabos nos pinos do sensor de refletância analógico conforme a figura abaixo. O modelo na figura é fabricado pela empresa Empretec e possui seis sensores óptícos mas utilizaremos apenas quatro. Note que há dois pinos sem cabos soldados. Da esquerda para direita, o modelo é consfigurado da seguinte forma: o O cabo Vermelho alimenta o sensor com VCC vindo do Arduino; o O cabo Preto faz o retorno para o GND; o O cabo laranja se comunica com uma porta analógica do Arduino; o O cabo azul se comunica com uma porta analógica do Arduino; o O cabo verde se comunica com uma porta analógica do Arduino; o O cabo amarelo se comunica com uma porta analógica do Arduino; A sequência será: a. Sensor 1 (Cabo Laranja) Porta Analógica 3 (A3); b. Sensor 2 (Cabo Azul) Porta Analógica 0 (A0); c. Sensor 5 (Cabo Verde) Porta Analógica 2 (A2); d. Sensor 6 (Cabo Amarelo) Porta Analógica 1 (A1); No caso do sensor Pololu, modelo QTR‐8RC, temos que ligar os seguintes pinos: Pinos: e. Alimentação: Positivo VCC; f. Retorno: Negativo GND; g. Sensor 6: porta A0 Arduino ‐ Representado pelo cabo azul; h. Sensor 7: porta A3 Arduino ‐ Representado pelo cabo laranja; i. Sensor 3: porta A2 Arduino ‐ Representado pelo cabo verde; j. Sensor 2: porta A1 Arduino ‐ Representado pelo cabo amarelo. Então as ligações no Arduino devem ficar como na imagem abaixo: 9. Ligando as portas do Driver Motor que controlam os motores: 10. Vamos seguir a sequência acima: a. Porta driver motor IN1 (cabo azul) Ligar na porta digital PWM Arduino 10 b. Porta driver motor IN2 (cabo verde) Ligar na porta digital PWM Arduino 11 c. Porta driver motor IN31 (cabo amarelo) Ligar na porta digital PWM Arduino 9 d. Porta driver motor IN4 (cabo laranja) Ligar na porta digital PWM Arduino 3 11. Ligando o sensor ultrassônico: Como referência utilizaremos o seguinte esquema de cores: a. VCC (cabo Preto) b. Trigg (cabo Branco) Porta Digital 7 do Arduino c. Echo (cabo Roxo) Porta Digital 6 do Arduino d. GND (cabo Cinza) Em caso de utilização do Sharp, basta utilizar uma porta analógica para ele funcionar, no caso a porta A4. a. Cabo amarelo – conexão com porta analógica A4; b. Cabo vermelho – conexão com VCC; c. Cabo Preto – conexão com GND; 12. Alimentação do Arduino para o Drive de Motor a. Na conexão +5 ligue o cabo do 5V vindo do Arduino; b. Na conexão GND ligue o retorno ao GND; 13. Enfim, basta conectar o cabo laranja na entrada 5V do Arduino e o fio Branco no GND que fica ao lado das portas analógicas. A codificação está disponível juntamente com este material em três exemplos: 1. LegoIno; 2. Seguidor_de_Linha_1; 3. Seguidor_de_Linha_versao_3_Sharp