thegoodfellas/blogset-br huggingface dataset:
de tudo, com conexao USB. A plaquinha tem um conector USB, da pra conectar um cabo USB nela. Mas a magica continua, alem de ser possivel reprogramar o PIC com um cabo USB, um driver bem conveniente cria uma porta COM virtual no computador e a associa a porta USB. Um programa que esteja rodando no computador, pode acessar a porta USB como se fosse uma porta COM. Isso facilita bastante a programacao e deixa o software mais bem humorado. Depois disso Robit nunca mais foi o mesmo. Ter um PIC em seu hardware iniciou uma tendencia de evolucao avassaladora, que nao pode ser impedida.PICStamp da Grande Ideia StudioO PIC vem com um programa que associa oito pinos para a saida e oito (?) para a entrada. Ele fica o tempo todo monitorando a porta USB e os pinos de entrada. Qualquer byte que chegue do computador e enviado para os pinos de saida. Leituras nos pinos de entrada sao enviadas para o computador.Isso e bastante conveniente, sem maiores alteracoes, o Robit passou a receber comandos atravem de um microcontrolador conectado ao computador por um cabo USB. O cabo paralelo rapidamente tornou-se uma penosa lembranca. Depois de experimentar o cabo USB, muito mais fino, mais leve e podendo ser mais comprido, nao tinha mais como impor o cabo paralelo ao Robit. O PicStamp ja estava prestando um enorme servico ao Robit livrando ele do cabo paralelo, mas eu sabia que ele podia fazer muito mais do que isso: podia finalmente dar ao Robit capacidade de processamento, ou seja, um cerebro. Ja podia imaginar os if( ) ... else ... encadeados que ele consultaria para tomar suas proprias decisoes e em todo o potencial de desenvolvimento que se abriria para o Robit. Claro que eu precisava fazer algo a respeito, Robit merecia essa oportunidade. E ai tentei reprogramar o PIC para se incorporar em definitivo ao Robit, mas o universo tinha outros planos. O PIC mostrou ter uma personalidade bem calada, nao libera seus recursos facilmente e nem diz o suficiente pra gente saber o que ele quer. A programacao do PIC provou ser um desafio maior do que o esperado, em especial porque era o meu primeiro contato com um microcontrolador. Dada a falta de sensibilidade do PIC em colaborar com a programacao, esse projeto acabou por ficar em segundo plano enquanto tocava outros projetos.E nesse tempo aconteceu o Wixel. Mais uma vez Robit mudou para nunca mais ser o mesmo de antes.Capitulo 4 - Liberdade sem fioO Wixel e uma daquelas raras coisas que parecem boas demais para ser verdade e que depois que voce finalmente entende e consegue ter algum dominio, percebe que e ainda melhor do que parecia. Bom, nao acha? Desde o inicio que eu imagino o Robit livre de cabos e amarras, vagando solto pela casa. Entao nunca deixei de procurar opcoes de wireless e tinha algumas em vista, mas quando topei com o Wixel percebi que tinha encontrado a tampa da panela do Robit. Ate entao, as opcoes de wireless que eu tinha considerado apenas faziam
a comunicacao, basicamente funcionam como um cabo, mas sem o cabo. Ainda precisaria resolver o problema do cerebro do Robit, usando e claro algum microcontrolador. Bem, o Wixel resolveu tudo em uma tacada e por uma fracao do custo de qualquer outra opcao de wireless. Nao so ele faz a comunicacao wireless, mas tambem tem um microcontrolador embutido disponivel para ser programado. E e um microcontrolador bem respeitavel com 32k de memoria para o programa, 4k de memoria ram, roda a surpreendentes 24Mhz, 15 pinos disponiveis para a aplicacao, leds indicadores e por ai vai.Wixel da PololuE o Wixel mostrou ser muito mais comunicativo e amigavel do que o PIC em materia de confiar seus segredos e habilidades na hora da programacao. A empresa que produz o Wixel (Pololu) investe bastante no suporte a programacao. Fornece uma documentacao bem detalhada, exemplos de aplicacoes e, extremamente importante, um forum onde qualquer feliz proprietario de um Wixel pode tirar duvidas sobre a programacao e funcionamento dele. Funcionarios da empresa monitoram o forum e respondem rapidamente qualquer duvida que apareca por la. Isso fez toda a diferenca. No final acabei entrando em acordo com o Wixel e ele ficou feliz em ser programado para ser parte definitiva do Robit.Desde a primeira ativacao do Robit com o wixel, ja devidamente instalado e programado, dava pra ver a diferenca que algum poder de processamento faz em um robo. Nao era so o fato de finalmente estar livre de cabos, Robit agora controla seus proprios motores, nao precisa mais passar pela humilhacao de ter sua funcao mais basica, o movimento, controlada por uma entidade externa. E mais do que isso, Robit agora aprendeu a se comunicar, esta todo falante e troca mensagens o tempo todo com o computador. Acabou a fase da obediencia cega (e muda). O relacionamento dele com o computador agora esta mais para trabalho em equipe do que pra mestre-escravo. E isso se reflete inclusive nos seus movimentos, agora eles estao muito mais seguros e precisos. Como e o Robit que controla o tempo entre os pulsos para os motores de passo, a duracao dos pulsos esta mais regular, alem disso, o microcontrolador consegue medir intervalos de tempo muito menores do que o computador conseguiria com timers de alto nivel. Capitulo 5 - Olhos para ver, sensores para sentirDesde o Robit era apenas uma ideia, a intencao sempre foi que ele tivesse ou proporcionasse algum tipo de processamento de imagens, uma camera acoplada ao Robit sempre foi um de seus propositos. Afinal a minha especialidade e o processamento de imagens e juntar isso com robotica para estudar sistemas de navegacao autonoma e algo que sempre quis fazer. Depois que os problemas basicos de movimento e comando foram resolvidos, era hora de colocar uma camera nele. A primeira ideia foi usar uma camera IP wireless e por isso acabei comprando a Feasso citada neste post. O problema e que ela e grande e pesada demais, alem disso consome muita energia. Mas como ela tem pan-tilt, serviu (e ainda serve) para testar alguns algoritmos e implementar algumas
sistemas de som automotivos. Se fosse carregado com 16 volts e descarregasse toda a energia armazenada em 1 segundo, a potencia liberada seria de 6,4 kW/s. Ultracapacitor automotivo de 50 Farads
aceso em vez de piscar. Isso tornaria o codigo muito mais simples. Na verdade, o led poderia ser ativado ainda na inicializacao e nao seria necessario nenhum codigo dentro do loop principal. Isso simplifica o programa, mas retira uma importante informacao de debug. A funcao do led de status nao e so indicar que o microcontrolador esta ligado, mas ele tambem deve informar se a execucao esta seguindo seu fluxo normal ou se ficou presa em algum loop ou funcao. Se o led de status esta configurado para piscar e em determinado momento ele passa a ficar sempre aceso ou sempre apagado, isso indica que o programa pode ter travado em algum ponto e nao esta mais seguindo o fluxo normal de processamento. Um led de status que fique sempre aceso nao daria essa informacao.Medir tempo com operacoes bit-a-bitComo citado, a maioria dos microcontroladores oferece em suas bibliotecas uma funcao que informa a quantidade de milissegundos decorridos desde a ativacao. O valor retornado por essa funcao e sempre um inteiro positivo. Se analisarmos o comportamento dos bits que compoe esse valor em binario, vamos perceber que cada bit muda de estado em intervalos de tempo bem determinados. Apenas como referencia, vamos chamar o bit menos significativo de bit 0, o segundo bit menos significativo de bit 1 e assim por diante.Se em determinado momento o bit 0 desse valor for 1, no milissegundo seguinte ele sera 0 e no proximo milissegundo ele sera 1 novamente e assim por diante. Entao ele muda de estado a cada milissegundo. Ja o bit 1 so vai mudar de estado a cada dois milissegundos, o bit 2 muda de estado a cada 4 milissegundos, o bit 3 muda a cada oito milissegundos e assim por diante dobrando o intervalo a cada incremento de ordem do bit.Entao se precisarmos medir algum intervalo de tempo fixo (por exemplo para a mudanca de estado de um led de status) e se esse intervalo for proximo de alguma potencia de dois, e muito mais eficiente, rapido e economico usar os bits do contador de milissegundos do que criar uma variavel estatica, somar uma valor a ela, comparar o valor da variavel com o valor do contador e etc, como foi sugerido acima.No exemplo anterior foi implementado um codigo para piscar o led de status a cada meio segundo usando uma variavel estatica. Meio segundo significa 500 milissegundos e 500 nao e uma potencia de dois, mas 512 e (2 elevado a 9) e tambem e um valor proximo o suficiente de 500 para ser aceitavel como aproximacao nesta aplicacao. Veja abaixo uma nova implementacao da aplicacao do exemplo, agora usando o contador de milissegundos para piscar o led:#define mnPin P1#define pinAlarm P2#define pinStatus P3 void main(){ // inicializacao setDigitalInput(mnPin, HIGH_IMPEDANCE); setDigitalOutput(pinAlarm, LOW); setDigitalOutput(pinStatus, LOW); // loop principal while(1) { // monitoramento pinAlarm = !mnPin; // led de status pinStatus = (getMs() >> 8) & 1; // intervalos de 512 ms }} Operacoes bit-a-bit ocupam pouca memoria e sao extremamente rapidas, entao este codigo e muito mais compacto e eficiente do
que a versao anterior que usa a funcao blinkStatusLed(). Alem disso, continua sendo nao bloqueante.Heart beat - Batida de coracaoPodemos usar um bit do contador de milissegundos para medir um intervalo de tempo especifico, como mostrado no topico anterior, mas combinando varios bits do contador e possivel produzir padroes bem interessantes simulando ritmos, por exemplo como o ritmo das batidas de um coracao. O principio e o mesmo da medicao de intervalos, so que agora vamos usar mais de um bit para calcular o estado do led de status. Veja o codigo abaixo: uint32 ms; ms = getMs();pinStatus = (ms >> 8) & (ms >> 6) & 1;Agora, para que o pino de status fique em nivel alto, e preciso que o bit 9 e o bit 7 do contador estejam ambos com o valor 1. Veja que o bit 9 muda de estado a cada 512 milissegundos, entao quando o esse bit estiver zerado o led ficara apagado nao importa o estado do bit 7. Ja o bit 7 muda de estado a cada 128 milissegundos, entao no periodo em que o bit 9 assume o valor 1 (a cada 512 ms) o bit 7 muda de estado 4 vezes produzindo duas piscadas. Entao o led vai dar duas piscadas, ficar meio segundo apagado e depois mais duas piscadas, etc. O efeito lembra bem uma batida de coracao. Outros ritmos podem produzidos fazendo combinacoes diferentes de bits do contador de milissegundos.
Reguladores de tensao sao circuitos que na sua versao basica (e perfeitamente suficiente) sao extremamente simples de projetar e montar. Existem chips que fazem quase todo o trabalho, so precisando de mais dois ou tres componentes adicionais no circuito. Os dois chips mais populares para este servico sao o 7805 e o LM317. Os dois sao baratos, faceis de usar e fornecem corrente suficiente para alimentar todos os circuitos do robo. Se voce nao tem muita experiencia com eletronica, montar teus proprios reguladores de tensao e um otimo exercicio inicial e vai te dar a experiencia necessaria para encarar circuitos mais complexos.Importante: O 7805 pode fornecer ate 1A de corrente, o LM317 pode chegar a 1.5A. Isso e suficiente para alimentar todos os circuitos do robo, mas nao e suficiente para alimentar os motores. Existem chips capazes de fornecer mais corrente, mas com um projeto adequado, os motores podem ser alimentados diretamente pelas baterias, sem necessidade de reguladores. Os reguladores citados acima sao apenas para alimentar os circuitos.O 780578xx e uma familia de reguladores de voltagem lineares contidos em um circuito integrado. Normalmente e usado em em circuitos que requerem uma fonte regulada de energia que seja facil de usar e barata. Nos circuitos integrados da familia o xx e substituido por dois digitos que indicam a voltagem de saida do regulador. Entao o 7805 tem uma saida de 5 volts, o 7809 de 9 volts, o 7812 de 12 volts e assim por diante. Por ter uma saida fixa, ele nao precisa de regulagens externas o que facilita muito seu uso. E um regulador antigo, o que significa que e bem confiavel, esta no mercado a muito tempo e tem sido amplamente usado em milhoes de projetos. Tem todas as protecoes internas possiveis, nos foruns de eletronica ele e tido como praticamente indestrutivel. E e muito barato e facil de achar. Com certeza esta e uma excelente escolha para o modulo de alimentacao de um robo mais simples, especialmente se o aspirante a robot maker por tras do projeto nao tiver muita experiencia com eletronica.A desvantagem e que, pelo menos sua versao mais classica, o LM7805 sempre foi muito ineficiente ao fazer a conversao da voltagem. Ao reduzir a voltagem, o excesso de energia e convertido em calor. Se o consumo de corrente ultrapassa algo como 500 mAh e necessario usar um dissipador de calor. A eficiencia tipica do LM7805 fica entre 40% e 50%, o que convenhamos, sao valores horriveis. Quer dizer que metade da energia que entra nele e convertida em calor e a outra metade e entregue na saida estabilizada. Em um robo que usa bateria, esses valores sao inaceitaveis. Ou seriam, se essa energia fosse muito significativa em relacao ao consumo total. E preciso lembrar que o regulador de tensao esta sendo projetado para alimentar os circuitos e nao os motores. De qualquer forma, 78xx nao e apenas uma familia de reguladores, agora ja se tornou um padrao para reguladores de voltagem. Entao e possivel encontrar uma infinidade de reguladores "compativeis" com 78xx. Isso significa que usam
a mesma pinagem, apresentam o mesmo resultado, mas podem usar tecnologias completamente diferentes (mais modernas) e apresentar caracteristicas bem diferentes do classico LM7805. Por exemplo, o fabricante do QS7805 afirma que seu chip e capaz de converter uma entrada de 6,5v a 24v em uma saida regulada de 5v com uma eficiencia que varia de 85% a 94%. Nao esquenta ou esquenta muito pouco dispensando o dissipador de calor. A funcao, tamanho e espacamento dos pinos do QS7805 e a mesma do LM7805, entao e possivel simplesmente retirar um LM7805 da placa e colocar um QS7805 no lugar e imediatamente ter um regulador muito mais eficiente e economico.Este chip na sua forma mais comum e encontrado no "package" TO-220, que e a embalagem com 3 pinos mostrada na foto abaixo:Pinagem do 7805O pino 1 deve ser conectado ao positivo da fonte de energia (a bateria). O pino central fica ligado ao terra (GND) e a saida com a voltagem regulada (5 volts) e obtida pelo pino 3. Teoricamente, dentro de condicoes muito ideais, o 7805 poderia ate ser usado sozinho, sem nenhum outro componente, conforme mostrado no esquema abaixo. Mas nunca e uma boa ideia contar com condicoes ideais.Esquema de ligacao do 7805CapacitoresCapacitores podem ter varios usos na eletronica, mas neste contexto eles servem como filtros de linha, absorvendo pequenos picos de energia e fornecendo energia quando a voltagem cai ligeiramente.Quando o circuito e ligado, um capacitor que tenha seus terminais conectados aos polos da fonte de energia, vai absorver energia ate ficar carregado com a voltagem fornecida, a partir dai ele nao absorve mais, mas fica carregado. Se a voltagem cair ele comeca a se descarregar liberando energia para o circuito ate que o capacitor e o circuito se equilibrem na mesma voltagem. Um pico de voltagem na fonte de energia vai ser em boa parte absorvido pelo capacitor, porque ele vai tentar se carregar ate o nivel do pico, absorvendo parte dele. Depois que o pico passa e a voltagem volta ao normal o capacitor comeca a liberar a energia absorvida durante o pico gradativamente ate se equilibrar com a voltagem do circuito.Devido a esse comportamento, capacitores costumam ser usados na entrada e na saida de energia para eliminar ou pelo menos diminuir flutuacoes de energia.Existem varios tipos de capacitores. Para esta aplicacao e comum o uso de capacitores eletroliticos. Estes capacitores podem ser encontrados em uma variedade muito grande de valores, desde 1uF ate 1MF. Tambem sao baratos e facilmente encontrados em lojas de eletronica.Capacitores eletroliticos.Ha dois valores que sao relevantes a respeito de um capacitor: sua capacitancia e sua voltagem maxima. A capacitancia se refere a quantidade de energia que o capacitor consegue armazenar e e expressa em Farads (F). A voltagem maxima indica com ate quantos volts ele pode ser carregado sem que algo de ruim aconteca. E recomendado usar capacitores com uma voltagem maxima que seja pelo menos o dobro da voltagem nominal do circuito para garantir que ele nao frite com um pico de energia. Entao se o circuito e alimentado por baterias de 12
volts, seria recomendado que os capacitores tenham uma voltagem nominal de pelo menos 24 volts. Nao tem nenhum problema usar capacitores com uma voltagem maxima maior. A desvantagem e que eles serao maiores, mais caros e ocuparao mais espaco no circuito.Voltando ao nosso circuito, acrescentar capacitores na entrada e na saida de energia vai tornar a saida do nosso regulador mais estavel e oferecer alguma protecao contra picos de energia. Os valores mais comuns para esta aplicacao sao de 100uF na entrada e de 10uF na saida. Abaixo o esquema do regulador com os capacitores.Observacoes: Capacitores eletroliticos sao polarizados, isso significa que seus terminais precisam ser conectados nos polos certos. Inverter os polos de um capacitor eletrolitico faz com que ele perca o isolamento interno e fique definitivamente danificado. Todos eles tem uma faixa com um sinal de menos. Essa faixa indica o terminal que deve ser ligado ao terra (ou negativo). DiodosDiodo e o mais simples tipo de semicondutor. E um componente com dois terminais que tem a interessante caracteristica de so deixar passar corrente em um sentido. Entao ele e muito usado para proteger circuitos contra inversao de polaridade. Acrescentar um diodo a entrada de energia do circuito garante que ele so vai ser alimentado com a polaridade certa. Se alguem inverter os polos da bateria, o circuito simplesmente nao funciona em vez de torrar os capacitores como poderia acontecer. O 7805 tem protecao interna contra inversao de polaridade, mas os capacitores eletroliticos nao tem e sao muito sensiveis a inversao de polos.Abaixo o esquema ja com o diodo de protecao.InterruptorIsto e meio que obvio, mas nao pode ser esquecido. E preciso ter uma chave geral que ligue/desligue a alimentacao do robo e o melhor local para isso e no circuito de alimentacao. Para ser efetivo, o interruptor deve estar conectado a entrada de energia, nao faz muita diferenca em qual polo. No circuito acima o interruptor pode ser conectado imediatamente antes ou depois do diodo, ou ser instalado no polo negativo da bateria (GND), como no esquema abaixo:Led de statusUma indicacao visual que mostre se o circuito esta ligado ou desligado e extremamente importante e evita problemas futuros. Para esse fim e comum o uso de leds. Tecnicamente, leds sao diodos, so deixam passar corrente em um sentido, mas eles tem essa caracteristica de emitir luz quando tem corrente passando por eles. Leds sao muito praticos, mas tambem sao bastante sensiveis, existe um limite de corrente que eles podem suportar e que depende do tipo do led. Para este tipo de aplicacao, o mais indicado e usar leds comuns de 3mm. Estes leds nao consomem muita corrente entao nao interferem muito no consumo de energia. exemplo de leds comuns com 5mm (a esquerda) e 3mm (direita). 5Para limitar a corrente que passa pelo led, e necessario usar um resistor. Resistores sao componentes que, como o nome indica, apresentam resistencia a passagem de corrente. Entao a corrente e obrigada a diminuir sua intensidade sempre que passa por um resistor. Para leds comuns de 3mm alimentados com 5 volts, podem ser
usados resistores de 220 a 470 ohms. Quanto maior o valor do resistor, menos corrente ira passar e o led vai acender com menos intensidade. Valores mais baixos fazem o led acender com mais intensidade, mas diminuem a vida util do led.O melhor lugar para posicionar o led e proximo a saida do circuito, como mostrado no esquema abaixo:Alimentacao dos motoresSe estivessemos fazendo apenas um regulador de tensao para 5 volts, ja estaria pronto com o esquema acima. Mas o robo precisa de um pouco mais do que um regulador de tensao, ele precisa de um modulo de alimentacao. Apesar de os motores nao usarem a saida regulada de 5 volts, eles ainda precisam ser alimentados e ja que estamos fazendo um circuito de alimentacao, nao custaria muito e facilitaria bastante se este circuito ja tivesse tambem uma saida propria para os motores. Se, como sugerido, a bateria fornece uma voltagem adequada para os motores, podemos simplesmente acrescentar um conector conectado ao positivo da bateria e ao terra do circuito. Se a conexao ao positivo for feita depois do diodo D1, entao tambem os motores ficarao protegidos contra inversao de polaridade:Mas o nosso modulo de alimentacao ainda tem um problema. Note que toda a energia consumida pelo robo, incluindo motores e circuitos, passa pelo diodo D1. Os diodos da familia 1N400x so suportam no maximo 1 amper. Os circuitos do robo nao consomem muita corrente, mas por seguranca, vamos considerar que em conjunto consumam 500 mAh. Ja os motores vao consumir pelo menos 500 mAh cada um, embora isso dependa muito do motor. Tambem sao comuns motores de passo que consomem 1 amper/h cada. De qualquer forma, o total de corrente que vai passar pelo diodo e maior que seu limite maximo de 1 amper e portanto ele nao vai aguentar. Para esse problema existem 3 solucoes:Usar um diodo com mais capacidade de corrente. Esta e a melhor opcao. O diodo 1N5408 consegue suportar ate 3A. Nao e caro, so e mais dificil de achar do que os diodos da familia 1N400x. Existem tambem opcoes acessiveis que suportam ate 6A. Mais do que isso os diodos comecam a ficar grandes e caros demais para este projeto. Pegar a saida para os motores antes do diodo D1. Nesse caso apenas a corrente que alimenta os circuitos e que passa pelo diodo, mas nao a corrente que alimenta os motores. E uma solucao simples, mas a protecao para os motores e perdida. Usar dois (ou tres) diodos em paralelo. Ao passar por diodos em paralelo, a corrente se divide por eles. Por exemplo, se o robo esta consumindo no total 1600 mAh, entao dois diodos em paralelo so terao que suportar 800 mAh cada um, ficando dentro dos limites de operacao deles.Abaixo o esquema do modulo de alimentacao usando dois diodos em paralelo. Importante lembrar que dependendo do consumo dos motores usados, dois diodos podem nao ser suficientes, nesse caso e necessario acrescentar mais diodos ou usar diodos com maior capacidade de corrente.