Meio Bit » Arquivo » Ciência » Aprendendo Arduino — Parte 1 — uma viagem pessoal

Aprendendo Arduino — Parte 1 — uma viagem pessoal

Já pensou em aprender microeletrônica e programação ao mesmo tempo, se divertindo, sem a frustrante curva de aprendizado impossível da maioria das áreas? É possível, e nesse série de artigos você (eu espero) passará a conhecer muito mais do funcionamento do mais poderoso dos computadores, a partir do mais humilde deles: o Arduino.

7 anos atrás

twoidiotsonekeyboard

Nos primórdios, quando o mundo era jovem e a única diversão era assistir aquele seriado de ficção científica, Flintstones, eu brincava com eletrônica. Comprava as revistas todas. Saber Eletrônica, Divirta-se com Eletrônica e até a assustadora Antena, com seus esquemas complexos e conceitos assustadores para uma época em que não existia LED azul nem laser de camelô.

Construí inúmeros projetos, alguns quase funcionaram, mas era um tempo em que a eletrônica digital (doméstica) ainda estava engatinhando. Sim, construíamos circuitos com portas lógicas, flip-flops e até usávamos uns circuitos integrados TTL, mas o normal era no máximo fazer VU de LEDs com um 4017 e sequenciais com um 555.

Com o advento da microinformática, um mundo novo surgiu. Os computadores eram incrivelmente complexos, comparados com o que construíamos nas horas vagas. A idéia de interfacear circuitos com nossos micros existia, mas computadores eram muito caros e meus pais me matariam se eu queimasse meu TK90X. Só tive coragem quando o teclado deu problema, e eu consegui sei lá como um gabinete completo de Commodore 94. Em um projeto 100% meu (não havia internet para pesquisar nada) consegui fazer o TK funcionar com o teclado do Commodore.

Fui abandonando a microeletrônica, em prol do software. Quando fui ver em que pé estava, caí em um mundo horroroso de PICs nada amigáveis. Em teoria um PIC é basicamente um computador, na prática não. Vamos a uma aulinha:

Aqui o esquema de um computador:

spectrum_sch_6

Ok vamos tentar algo mais didático:

r7

Um computador é formado pelas seguintes partes:

  • memória, que guarda informações;
  • dispositivos de entrada e saída de dados (teclado, mouse, monitor, etc);
  • CPU, a Unidade de Processamento Central, que gerencia os dados e programas;
  • e o Sistema Operacional, que podia ser algo tão simples quanto uma instrução de hardware para a CPU começar a executar código de um determinado ponto da memória quando inicializada, abrir o interpretador BASIC e esperar comandos.

Originalmente esses dispositivos ocupavam armários diferentes: a CPU não era um chip, chips não existiam.

3fdafce79778c58d1a30cb117cac3f8e

Isso mudou em 1971, quando a Intel conseguiu atuchar em um único chip 2.300 transístores, tornando muito mais rápido e simples a construção de computadores e equipamentos sofisticados. O 4004 era capaz de ler chips de memória, executar instruções, processar programas e enviar os resultados para outras posições de memória.

O 4004 era um microprocessador de 4 bits, ou seja, era preciso um bom jogo de cintura interno para que o 4004 acessasse um mínimo de memória. Os endereços por exemplo tinham 3 palavras de comprimento, ou 12 bits. Ele usava instruções de 8 bits, e conseguia acessar diretamente 640 bytes de RAM. Quer dizer, diretamente em termos, rolava uma paginação interna.

O clock era de 740 kHz e ele conseguia executar 92.600 instruções por segundo. Não, não rodava Crysis.

Mesmo assim o 4004 foi o começo de tudo, e logo tínhamos o 8008, o 8080, o Z80 e o 6502, o coração do Apple I e II.

intel_c4004

Com o tempo os engenheiros criaram CPUs mais e mais poderosas, mas elas continuam dependendo de componentes externos. Sim, qualquer microprocessador hoje em dia tem memória interna, alguns tem até GPUs dentro do mesmo chip. O resultado é que a AMD tem CPUs com 4.094 pinos, versus os 16 do 4004 original.

Um dia alguém pensou: que tal tentar colocar no mesmo chip o microprocessador, memória, armazenamento e controle de input/output, tendo assim um computador “completo”, capaz de executar um programa sem precisar de módulos externos?

Em 1974 a Texas Instruments criou o TMS-1000, com ROM de 1 kB, RAM de 256 bits e clock de 400 kHz. Não, também não rodava Crysis, e não precisava. O conceito de um microcontrolador não era substituir uma CPU, até porque com tudo integrado aumentar a RAM de um TMS-1000 era quase tão difícil quanto fazer o mesmo com um Microsoft Surface.

O microcontrolador foi pensado para realizar tarefas discretas de forma independente, confiável e segura. Você pode programar um microcontrolador para ler dados de sensores, identificar a temperatura de um aquário, e se estiver muito baixa, acionar um aquecedor. Muito alta, aumenta a refrigeração. Permaneceu muito tempo fora da faixa aceitável, soa um alarme.

É contra-intuitivo, mas é mais fácil fazer isso com um microcontrolador do que com um computador inteiro, e seria canhão pra matar passarinho, de qualquer jeito.

Só que na época em que microcontroladores invadiram a eletrônica, eles eram um porre. A programação era feita essencialmente em Assembler, e eu não sou (mais) masoquista a esse ponto. Você precisava usar programadores altamente inamistosos. E caros. Apagar a memória necessitava colocar o chip debaixo de uma fonte ultravioleta. Havia até programadores onde você digitava em um teclado hexadecimal seu programa.

Por muito tempo, tempo demais microcontroladores foram propriedade de um grupo fechado, uma elite  de escolhidos. Eram caros, complicados de usar, não eram ferramenta de aprendizado. A plataforma comum de ensino era um microcontrolador com interpretador BASIC, custando na faixa de US$ 100,00. Inviável para qualquer estudante.

Um sujeito chamado Hernando Barragán criou como tese de mestrado (chupa, Tedson) uma plataforma chamada Wiring, um conjunto de IDEs, compiladores e hardware de suporte compatível com microcontroladores bem mais baratos. Outros três italianos pegaram a base do Wiring (era Open Source) e criaram uma versão compatível com o microcontrolador ATmega128. Hoje em sua versão básica o Arduino roda o ATmega328:

ard1293

Ele é uma CPU de 8 bits, com clock máximo de 20 MHz, 32 kB de memória Flash, 2 kB de RAM, 1 kB de EEPROM e velocidade de 20 MIPS. Não, não roda Crysis, mas roda Space Invaders:


bruixot66 — Arduino Game Oled Display - Space Invaders

O grande segredo do Arduino (que aliás ganhou esse nome em homenagem a um bar #respect) se divide entre sua facilidade de uso e seu preço. Você acha o ATmega328 para vender no Mercado Livre por R$ 10,00. Um Arduino Uno R3 compatível completo acha-se no Brasil por R$ 42,00.

Junte a isso uma comunidade de hobbystas (me recuso a pagar de hipster usando “makers”) imensa, e um total apoio das empresas, e temos um ecossistema excelente. A Arduino disponibiliza uma IDE que é simples E poderosa. Imagine você, depois de anos emburrecendo as crianças com Javascript agora elas aprendem a programar em C/C++ no Arduino, e nem percebem.

Aliás, refazendo: o segredo, segredo mesmo é que o ATmega328 é muito amigável em termos de conexões externas, e a placa Arduino foi projetada pensando nisso. É extremamente simples acessar, tanto para ler quanto para escrever os pinos do chip.

arduinouno2

Por exemplo: o Arduino tem um LED na placa conectado ao pino 13, é útil para você testar programas sem precisar espetar nada nele. Como fazer esse pino piscar? O programa de exemplo é este:

void setup() {
 pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
 digitalWrite(LED_BUILTIN, HIGH); 
 delay(1000); 
 digitalWrite(LED_BUILTIN, LOW); 
 delay(1000); 
}

Como você pode perceber, são duas seções, setup e loop. Setup é executada uma vez, loop é executada, bem, em loop. Ele define que o pino do LED integrado será OUTPUT. Em seguida no loop  o programa muda o estado do pino para HIGH, pausa 1.000 milissegundos, muda para LOW, pausa mais mil milissegundos  e o ciclo se inicia.

Tente fazer isso com um PC.

Sensores? Extremamente simples. Veja um giroscópio acoplado ao Arduino, passando dados para um PC:


mattzzw — 6 DOF IMU (3 axis accelerometer, 3 axis gyroscope), Arduino, OpenGL, Python, complementary filter

Aí você vai falar “mas Cardoso isso é muito caro”. Com certeza, era. Werner Von Braun se tornaria seu melhor amigo se você aparecesse com uma caixa desses chips em Peenemünde. Você correria risco até de virar melhor amigo de Hitler.

Chips? Sim, chips. O sensor giroscópio/acelerômetro para o Arduino vem em um chip. É o MPU-6050 e custa menos de R$ 10,00 no Mercado Livre.

450xn

Existem literalmente centenas de sensores diferentes para Arduinos, todos facílimos de utilizar. O projeto original foi pensado para “designers e artistas”, então a curva de aprendizado dele é muito amigável. Claro que idealmente você termina enfiando rotinas em assembler, utiliza a IDE da Atmel e fala direto com os registradores do microcontrolador, mas ele ainda é perfeitamente usável e útil mesmo se você tiver conhecimentos básicos de programação e/ou eletrônica.

Óbvio que quando você manja dos paranauês num nível quase Jedi, consegue fazer o Arduino tocar um vídeoclipe, com áudio a 20 fps:


jonnection — A-ha Take on Me video playback on Arduino at 20 fps (with instructions !)

Eu decidi começar a brincar com o Arduino por necessitar de um hobby fora da internet, mas percebi que ele despertou meu lado saudosista, do tempo em que homens eram homens e otimizavam seu código até o último byte, em vez dos programadores frufrus de hoje em dia que preferem dizer pro cliente comprar mais RAM.

Não sei ainda o que farei com o Arduino, mas comprei este kit básico, um tela display LCD de cristal líquido, dois displays Nokia 5110 igual ao do vídeo do A-ha (R$ 12,00 no Mercado Livre) e outras pecinhas.

Vou passar a documentar regularmente minhas experiências, criando uma espécie de curso de Arduino/Microeletrônica, isso tornará mais divertido ainda a experiência e eu ainda ganho conteúdo pra publicar aqui no MeioBit.

Se você quiser brincar com o Arduino, a IDE é de graça, em www.arduino.cc com versões pra macOS, Windows e Linux. Também há uma versão 100% web, pra quem quiser programar na nuvem.

Também não é preciso sequer comprar um Arduino para testar seus circuitos. A Autodesk tem sua excelente suite de desenvolvimento e prototipagem de circuitos online, a circuits.io. Você pode simular em protoboard seus circuitos e incluir até um Arduino. Com direito a programas.

Eu consegui queimar um LED.

simulador

Esse cara aqui criou uma versão do jogo da cobrinha, da Nokia.

ardusnake

As possibilidades são ilimitadas, e se você duvida, este sujeito aqui fez um LIDAR para mapeamento 3D de ambientes.


Dana Peters — Arduino-based LIDAR Scanner

Chega, né? Então até o próximo capítulo, onde aprenderemos em detalhe sobre o Arduino Uno e o que faz seu coração bater. Spoiler: é o cristal de 16 MHz.


Leia também:

relacionados


Comentários