thegoodfellas/blogset-br huggingface dataset:
pela novela de sempre de instalacao de drivers, mas com sorte tudo deve instalar automaticamente. Com qualquer distribuicao Linux recente voce ja tera o driver adequado no kernel, mas precisara instalar os seguintes pacotes ou seus equivalentes na sua distribuicao:sun-java6-jreavr-gcc-c++avr-gccavr-libcCom tudo no lugar, podemos entao comecar a brincar um pouco. Primeiro vamos a anatomia da placa:Os pinos no topo numerados de 0 a 13 sao entradas e saidas digitais. Estes pinos sao usados para interagir com qualquer dispositivo de entrada ou saida que lida com apenas dois estados. Na parte inferior direita estao os pinos de entrada analogica. Estes sao usados para ler um valor que varia e nao apenas dois estados, como um controle de volume ou velocidade. Veremos mais sobre isso adiante. A esquerda destes estao os pinos de alimentacao.Se tudo estiver bem, ao conectar seu Arduino a porta USB o led verde (PWR) deve acender. Apos alguns instantes o led amarelo (L) logo abaixo do pino 13 deve comecar a piscar. Inicie o ambiente de desenvolvimento (IDE).Selecione a sua placa no menu Tools>Board, "Arduino Duemilanove or Nano w/ ATmega 328". Em seguida selecione a porta correta em Tools>Serial Port. No Windows as portas aparecerao como COM X, onde X e um numero arbitrario. No Linux deve aparecer como /dev/ttyUSB0, provavelmente ja selecionado. Com isso voce esta pronto para enviar seus programas para o Arduino.No menu File>Examples>Digital selecione Blink. Isso abrira outra janela do IDE com o codigo de exemplo abaixo:int ledPin = 13; // LED conectado ao pino 13 // A funcao setup() e executada uma vez quando o programa iniciavoid setup() { // inicializa o pino como uma saida digitalpinMode(ledPin, OUTPUT); }// a funcao loop() e executada continuamente, enquanto o Arduino // estiver ligadovoid loop() { digitalWrite(ledPin, HIGH); // acende o LEDdelay(1000); // espera 1 segundodigitalWrite(ledPin, LOW); // apaga o LEDdelay(1000); // espera 1 segundo} Essa e a estrutura basica de qualquer programa do Arduino. A funcao setup() deve conter o codigo que sera executado uma vez, quando o Arduino iniciar. A funcao loop() sera executada enquando o Arduino estiver ligado e deve conter a funcionalidade principal do programa.O programa acima e o "Hello World" do Arduino, mas ja utiliza tres funcoes bem comuns.A funcao pinMode(pino, modo) define o modo de funcionamento de um pino digital, se sera usado como entrada ou saida.A funcao digitalWrite(pino, valor) altera o nivel de saida do pino de acordo com o desejado. Note que para isso e preciso que o pino tenha sido configurado como saida anteriormente usando a funcao pinMode.A funcao delay(ms) faz com que o Arduino espere um determinado periodo de tempo definido em milissegundos antes de continuar a execucao do programa.Va no menu Sketch>Compile, ou use CTRL + R, ou ainda o botao de "play" na barra de ferramentas no topo do IDE para compilar o programa. Se a compilacao falhar e voce nao tiver feito nenhuma alteracao, provavelmente ha algo de errado com a sua instalacao e havera uma mensagem de erro no buffer preto na parte inferior do IDE.Se a compilacao foi bem sucedida, basta enviar para
o arduino. Va em File>Upload to I/O board, ou use CTRL + U, ou o botao com a seta apontando para a direita na barra de ferramentas. Se tudo estiver certo, em alguns instantes os dois leds amarelos (TX e RX) do Arduino devem comecar a piscar ate que o upload de todo o programa seja feito. Se o upload falhar, voce pode ter selecionado a placa ou a porta errada anteriormente, ou ha algum outro problema, e havera uma mensagem de erro.Se tudo correu bem, o LED amarelo (L) deve comecar a piscar a cada segundo.Para este teste usamos o pino ja existente na placa, mas a mesma coisa pode ser feita com qualquer outro ligando um LED e resistor externos.Na proxima parte mostrarei como usar outros pinos da mesma forma, alem de como usa-los para entrada digital.
diretamente, atraves da porta USB. Sem ele seria preciso utilizar um programador ou um cabo especial.A outra parte e o ambiente de desenvolvimento. Ele e um software semelhante a um editor de textos que oferece algumas facilidades para escrever seus programas, e faz a comunicacao com o bootloader, permitindo que voce envie seus programas para o Arduino.Combinando esses elementos voce pode combinar formas de entrada e saida de dados, construindo novos equipamentos ou novas formas de interagir com seu computador. Dispositivos de entrada podem ser botoes, chaves, sensores de luz, som, temperatura, gas, etc. Dispositivos de saida podem ser luzes, auto-falantes, motores, etc.No meio disso pode haver comunicacao direta com o computador ou nao. Com os componentes e o codigo certo, qualquer tipo de interacao e possivel.Finalmente, o Arduino e uma plataforma open-source. Isso significa que tanto o software quando o hardware sao disponiveis livremente. O codigo fonte do software e disponivel para modificar e estudar, assim como os esquemas do hardware. Voce pode incluir nos seus projetos e pode ate mesmo modifica-los como quiser.[1] http://www.arduino.cc/en/Guide/Introduction
Um dos meus projetos mais antigos mas ao mesmo tempo mais parados e o de um rover autonomo que conseguisse navegar sozinho por longas distancias. A meta era conseguir ao menos uma volta no quarteirao, sem marcacao de qualquer tipo, vencendo os obstaculos do caminho. Tempo nao era questao, poderia demorar horas se preciso.Tendo todos os componentes para a navegacao a disposicao, GPS, sensores e camera, a grande questao que surgiu foi o design da parte mecanica. Em mais de um ano testando designs e partes diferentes, optei por usar uma suspensao rocker-bogie, semelhante ao design dos rovers da NASA. A animacao abaixo ilustra o funcionamento dessa suspensao.Um dos desafios com robos autonomos com rodas e enfrentar obstaculos. Por regra, um robo com rodas e sem suspensao nao consegue ultrapassar obstaculos de altura maior do que o raio da roda. Como um obstaculo que esse robo com certeza tera de enfrentar sao as guias das garagens e a calcada, caso tenha de descer, qualquer design tinha de levar isso em conta.Deixando de lado a parte chata envolvida, a suspensao rocker-bogie facilita isso garantindo que todas as rodas mantem contato com o solo. Enquanto uma roda esta subindo o obstaculo, as outras fornecem mais tracao ajudando a "escalada". Quando a roda frontal e central chegam ao topo, elas ajudam a roda traseira a subir. O corpo e ligado a suspensao em apenas um ponto, preso por um diferencial, garantindo que mantem uma inclinacao media em relacao ao resto do rover.Esse design e simples e eficiente, podendo ser construido sem molas ou amortecedores de qualquer tipo. Por outro lado, todas as rodas tem motores, e as rodas frontais e traseiras precisam de servos de controle para virar.Depois de tres prototipos com tubos de PVC para testar a ideia, esse e o estado atual do rover. As rodas de automodelismo com 10cm de diametro tem pneu de borracha, fornecendo otima tracao. Dentro de cada uma ha espaco mais do que suficiente para embutir um servo de tamanho padrao convertido para rotacao continua. As rodas frontais e traseiras tem os servos de controle e conseguem virar cerca de 120. O diferencial que liga ao corpo consegui de um carrinho de controle remoto de brinquedo e funciona perfeitamente para o fim.O corpo foi construido de polietileno de alta-densidade e perfis de aluminio reforcando partes criticas. Decidi construi-lo mais alto do que o normal para facilitar passar por obstaculos pequenos ao inves de precisar escala-los ou contorna-los.Infelizmente cometi uma falha de design que provavelmente vai exigir correcoes complicadas, mas quero ve-lo andando assim e avaliar o quao bem funciona.Apesar de nao ter um video do prototipo antigo em movimento, creio que a foto abaixo ilustra melhor a ideia. As caixas empilhadas alteram a altura sob cada roda, mostrando como todas mantem contato com o chao independentemente disso.O Arduino estara no limite para este projeto. Dos pinos digitais, 0 e 1 serao para o GPS, 2-7 com os servos de movimentacao, 8-11 com os servos de direcao e os outros para i2C e sensores. Estou considerando a possibilidade de
O HMC6352 e uma bussola digital que fornece uma solucao simples e de baixo custo para aplicacoes como robos e sensores remotos. Com a comunicacao feita por I2C, a utilizacao e bem simples, com os dados de orientacao ja prontos para uso e resolucao de 0.5 grau.Para este demo usei a placa do Sparkfun.com ligada diretamente ao Arduino Duemilanove com os pinos de SCL e SDA conectados ao analog 5 e 4 respectivamente, sem resistores de pull-up.O endereco i2c do HMC6352 e 0x42, mas como a lib Wire do Arduino usa enderecos de 7 bits ele e ajustado para 0x21.Apesar de ter varias instrucoes para calibrar, salvar e recuperar valores da memoria, a unica instrucao usada para obter os dados e o byte 'A'.#include <wire.h> // endereco do HMC6352 ja ajustado para 7 bits#define ADDRESS 0x42 >> 1int heading;void setup(){Serial.begin(9600);// inicializa o i2cWire.begin();}void loop(){ // i2c master inicia a transmissao Wire.beginTransmission(ADDRESS); // envia o comando 'A', "get data" Wire.send("A"); // encerra a transmissao Wire.endTransmission(); // para responder o comando "get data" ele // pode demorar ate 6 ms delay(6); // solicita 2 bytes Wire.requestFrom(ADDRESS, 2); if (2 <= Wire.available()){ // ajusta o byte mais significante e soma heading = Wire.receive(); heading = heading << 8; heading += Wire.receive(); } // exibe o resultado final em graus Serial.println(heading/10.0); delay(500);} Datasheet: http://www.sparkfun.com/datasheets/Components/HMC6352.pdf O sensor de distancia por infravermelho GP2D120 da Sharp e o mais preciso e com melhor sensibilidade da linha, porem menor alcance, de 4 a 30cm. Pode ser bem util em aplicacoes como detectores e robos, mas ele tem varias pegadinhas que so descobri depois de um bom tempo de pesquisa e experimentacao.A primeira delas e a pinagem. Como pode-se ver na imagem do datasheet do componente, os pinos nao seguem o padrao comum em outros componentes, negativo-positivo-sinal, mas sinal-negativo-positivo. Cuidado para nao inverter.A segunda pegadinha e o conector. A distancia entre os pinos e de 2mm, e nao de 2.54mm como estamos habituados, alem da capa um pouco diferente do JST . Ao comprar confira se a loja tambem vende o fio com o conector e compre ou tera dor de cabeca, pois ele e muito dificil de encontrar. Como alternativa voce pode remover o conector e soldar fios.Terceira, o sensor e muito suscetivel a interferencias, entao e praticamente imprescindivel o uso de um capacitor de ao menos 10uF entre o positivo e negativo da alimentacao o mais proximo possivel do sensor. Experimentando eu percebi que o ideal mesmo e ele ficar no sensor, e no meu caso foi facil quando removi o conector para soldar fios como mencionei acima, mas se estiver fazendo um servico limpo e tiver o cabo, provavelmente tera de experimentar um pouco.A quarta pegadinha e que com um tempo medio de resposta de 39ms, nao adianta tentar ler o valor do sensor com mais frequencia do que isso. Um delay de 50ms entre as leituras costuma dar um bom resultado.Por fim, o mais complicado. Apesar de algumas lojas propagandearem que a saida analogica faz com que seja facil de usar, isso so seria verdade se a
saida fosse linear. Como pode ver no grafico do fabricante abaixo, a saida do sensor e uma curva bem doida.Essa curva tem varias implicacoes. O pico no inicio e a distancia minima, e da pra perceber por isso que quando a distancia ao obstaculo diante do sensor e menor do que o minimo, ele vai reportar o mesmo valor que daria para uma distancia maior. Isso pode significar um robo batendo na parede achando que nao tem nada, por exemplo. Outra coisa importante e que a curva nao e muito uniforme e a medida dentro de determinada faixa e mais precisa do que outras. Na pratica a resolucao acima de 10cm e praticamente a metade daquela de 4 a 10cm.A maior implicacao dessa nao-linearidade e a complicacao que introduz quando e necessario realizar uma medida de fato. Se a sua aplicacao exige apenas fazer algo acima ou abaixo de determinada distancia, nao ha problemas. Porem se voce deseja de fato computar a distancia, precisara corrigir os dados.Uma maneira de faze-lo e usando uma tabela, porem ela pode ocupar muito espaco na memoria. Outra maneira e usar uma aproximacao. como quebrar a curva em varias linhas. Um artigo no Acroname Robotics demonstra uma maneira simples de gerar uma aproximacao com uma unica equacao simples obtida depois de gerar uma constante a partir dos dados do sensor para diversas distancias. Para o GP2D120 a equacao e apenas:D = (2914 / (v + 5)) - 1O codigo de exemplo abaixo demonstra o uso.void setup() { // inicializa a porta serial Serial.begin(9600); } void loop() { // le o valor do sensor int v = analogRead(0); // faz uma aproximacao float dist = (2914.0 / (v + 5)) - 1; // exibe o resultado Serial.println(dist, DEC); // aguarda 50ms delay(50);}
Ja faz um bom tempo que parei de usar motores DC com caixa de reducao para meus robos, dando preferencia a servos convertidos para rotacao continua. A principal vantagem e a simplicidade do circuito de controle. Mesmo quando a intencao e conectar diretamente a um outro circuito de controle, tenho usado os servos removendo toda a parte eletronica e ligando diretamente ao motor. A vantagem sobre um motor DC comum nesse caso e a padronizacao do tamanho e a facilidade de conectar as partes, usando as pecas de fixacao dos servos.A grande desvantagem e que a maioria dos servos baratos costuma ter engrenagens de plastico e pouco torque. Encontrei a solucao para esse problema com o Tower Pro MG995 e 996. Sao servos baratos, na faixa de US$ 10-15, com engrenagens de metal, rolamentos e torque de sobra para a maioria das aplicacoes onde usaria um motor DC com caixa de reducao na mesma faixa de preco.Atendendo ao pedido de um amigo, vou documentar aqui o procedimento para converter qualquer um dos dois para rotacao continua. Nao e muito diferente do procedimento usado para qualquer outro servo, mas a caixa de reducao e as engrenagens de metal podem intimidar um pouco a primeira vista.O primeiro passo e abrir o servo, retirando os parafusos da tampa traseira com uma chave philips.Depois de retirar a tampa traseira, com muito cuidado retire a tampa superior. Ha um pino que serve de eixo para as engrenagens centrais, mas como ele nao e fixo nem a tampa, nem a base, ele pode escapar quando voce abre e cair. Muito cuidado para nao perde-lo nesse momento. Recomendo que retire a tampa dentro de uma caixinha ou pote plastico para que qualquer peca caia ali dentro.Com muito cuidado, retire a engrenagem central. Com mais cuidado ainda retire a engrenagem do eixo do servo (a esquerda na foto acima). Essa engrenagem e presa ao potenciometro interno do servo, e pode exigir um pouco de forca para sair. Uma chave de fenda puxando aos poucos por baixo ajuda muito.Note como a engrenagem do eixo tem um pino limitador. Retira-lo e a parte mais dificil da conversao. Com um alicate pequeno segure-o com forca, puxando para cima e girando para os lados. Voce deve conseguir senti-lo se movendo e entao retira-lo sem muito trauma.Uma vez removido o pino, pode recolocar as engrenagens e a tampa no lugar. Tudo deve encaixar com precisao, sem forcar nada no lugar. Depois de remontar a caixa de reducao, use uma das rosetas de fixacao como alavanca para girar um pouco o servo e confirmar que tudo esta montado corretamente. Mesmo sem o pino voce deve sentir um limite devido ao potenciometro.Depois de remontar a caixa e confirmar que tudo esta no lugar, recomendo prender a tampa superior com uma fita adesiva ou etiqueta facil de remover, apenas para evitar que tudo abra de novo enquanto voce estiver alterando o circuito.Tire a plaquinha do circuito e sob ela voce vera o potenciometro, preso ao lugar por um parafuso e cola-quente (Made in China). Remova a plaquinha e
o parafuso e tire o potenciometro. Com o ferro de soldar, remova com cuidado os fios do potenciometro ligados a placa, limpando bem as ilhas. Nao aqueca demais por muito tempo. Recomendo usar fita dessoldadora, apesar do sugador de solda na foto.Depois de removido o potenciometro, solde dois resistores de 2k2 no lugar, formando o mesmo divisor de tensao. Uma alternativa e usar um trimpot de precisao de 5k, mas nao e uma grande vantagem ja que a regulagem pode ser feita no software.Com cuidado coloque a plaquinha no lugar, recoloque a tampa e os parafusos e o trabalho esta pronto. Agora basta conectar ao Arduino e encontrar o ponto exato em que o servo fica parado. Comece com 1500 microsegundos e ajuste para cima ou para baixo ate que ele pare de se mover.
BRST 2010void setDateDS1307(){ second=digitToByte(17,18); minute=digitToByte(14,15); hour=digitToByte(11,12); dayweek=dayToByte(0,1,2); day=digitToByte(8,9); month=monthToByte(4,5,6); year=digitToByte(27,28); Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.send(0x00); Wire.send(dec2bcd(second)); Wire.send(dec2bcd(minute)); Wire.send(dec2bcd(hour)); Wire.send(dec2bcd(dayweek)); Wire.send(dec2bcd(day)); Wire.send(dec2bcd(month)); Wire.send(dec2bcd(year)); Wire.endTransmission();}// pega a data e hora do DS1307void getDateDS1307(){ Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.send(0x00); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); second=bcd2dec(Wire.receive() & 0x7f); minute=bcd2dec(Wire.receive()); hour=bcd2dec(Wire.receive() & 0x3f); dayweek=bcd2dec(Wire.receive()); day=bcd2dec(Wire.receive()); month=bcd2dec(Wire.receive()); year=bcd2dec(Wire.receive());}// envia a data e hora para a portal serialvoid writeSerial(){ Serial.print(hour, DEC); Serial.print(":"); Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); Serial.print(" "); Serial.print(day, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.println();}Datasheet: http://pdfserv.maxim-ic.com/en/ds/DS1307.pdf
Componentes necessarios: 1x LED1x Resistor 470R a 1KNivel de dificuldade:BasicoJa sabendo como conectar o Arduino, selecionar placa e porta correta, compilar e carregar um sketch, podemos acrescentar alguns componentes externos e experimentar algumas coisas diferentes.Primeiro, vamos aos componentes usados para essa parte do tutorial.LEDUm LED, diodo emissor de luz, e um componente eletronico que emite luz quando submetido a uma corrente eletrica. Outrora comuns apenas em sinalizacao e paineis de aparelhos eletronicos, controles-remoto, etc, hoje estao a disposicao em uma variedade imensa de formatos, tamanhos e potencia luminosa.Para essa parte do tutorial nao fara diferenca o tipo, tamanho ou cor do led usado.ResistorA resistencia eletrica e a propriedade que os materiais tem de dificultar a passagem da corrente eletrica. Um resistor e um componente com uma resistencia conhecida, feito com esse proposito, de ser usado para limitar a corrente eletrica passando por determinada parte do circuito. Imagine a corrente eletrica como a agua passando por um cano e a resistencia eletrica como o diametro do cano, que determina quanta agua pode passar. Uma alta resistencia e analoga a um cano de pequeno diametro.A resistencia eletrica e medida em Ohms, com o valor dos resistores sendo marcado atraves de faixas coloridas seguindo um codigo de cores. Aprenda mais sobre isso no link abaixo. http://www.inf.pucrs.br/~calazans/undergrad/laborg/cod_cores_res.htmlPara essa parte do tutorial, precisaremos de um resistor para limitar a corrente do LED. Um valor adequado para essa funcao e de 470 a 1000 ohms.CircuitoO led e um componente polarizado, ou seja, tem um pino que corresponde ao positivo, o anodo, e um ao negativo, o catodo. A identificacao dos terminais certos pode ser feita de varias formas. Com leds novos, o terminal mais curto e o catodo, o mais comprido o anodo. Outra forma e atraves da borda do led, ausente no lado do catodo. Em ultimo caso, basta testar no circuito e inverter caso nao funcione na primeira tentativa.Os leds tambem tem uma resistencia muito baixa, o que significa que ao ligarmos um deles a uma bateria ou uma fonte, passara por ele uma grande corrente eletrica, que fara com que aqueca em excesso e queime, as vezes em uma fracao de segundo.Para impedir que isso ocorra e limitar a corrente eletrica que passara pelo LED e que usaremos o resistor em serie com o LED. Essa e a primeira licao realmente importante desse tutorial: nunca ligue um LED semum resistor em serie, a menos que saiba muito bem o que esta fazendo... e se soubesse, voce nao estaria lendo isso.A ligacao que faremos sera como no esquema abaixo. O catodo do led sera ligado ao GND da placa. O anodo sera ligado a um dos pinos do resistor e o outro pino do resistor sera ligado ao pino 9 do Arduino.O que temos nesse circuito e o mais simples possivel: quando elevarmos o sinal de saida do pino 9 o led acendera. Vamos fazer isso entao...CodigoPrimeiro, vamos aproveitar o codigo da parte 2. Nele fizemos com que o led embutido na placa do Arduino e ligado internamente ao pino 13 piscasse a cada 2 segundos.
Para usa-lo aqui basta mudarmos o pino que esta sendo usado, do 13 para o 9.int ledPin = 9; // LED conectado ao pino 9 // A funcao setup() e executada uma vez quando o programa iniciavoid setup() { // inicializa o pino como uma saida digitalpinMode(ledPin, OUTPUT); }// a funcao loop() e executada continuamente, enquanto o Arduino // estiver ligadovoid loop() { digitalWrite(ledPin, HIGH); // acende o LEDdelay(1000); // espera 1 segundodigitalWrite(ledPin, LOW); // apaga o LEDdelay(1000); // espera 1 segundo} Como fizemos no exemplo anterior, va ao menu Sketch>Compile, ou use CTRL + R, ou ainda o botao de "play" na barra de ferramentas no topo do IDE para compilar o programa. Se a compilacao foi bem sucedida, basta enviar para o Arduino usando File>Upload to I/O board, ou CTRL + U, ou o botao com a seta apontando para a direita na barra de ferramentas.Lembre-se que se o upload falhar, voce pode ter selecionado a placa ou a porta errada anteriormente, ou ha algum outro problema, e havera uma mensagem de erro.Se tudo correu bem, o LED conectado ao resistor deve comecar a piscar a cada segundo.Na proxima parte mostrarei como usar um pino como entrada digital.
como o tempo vivido e o tempo gasto.De todos os prazeres que posso sentir, e certo, enquanto eu nao mudar de opiniao, que o impacto e tudo. Pro mal ou pro bem? Tanto faz. O fato e que ter pra onde ir tambem nao me importa se ja estou a 200 km/h, afinal o mundo gira acompanhando os movimentos da nossa cabeca. E ele e so nosso.