edu lopes open source projects and thoughts

0. notas minhas sobre essa página

há uns três anos atrás, ainda no garagem fab lab, eu fiz a tradução do manual do primo.io, um briquedo de madeira que visava ensinar linguagem de programação para crianças ainda não alfabetizadas. o projeto do protótipo era open source e o brinquedo fez muito sucesso, todo professor que eu encontrava queria fazer um.

a minha querida mariana tamashiro tocou esse projeto lá no garagem e viu que a documentação que o pessoal colocou na rede não era lá muito boa. apesar de termos comprado todos os componentes como especificado na lista, a solução de conexão entre os blocos e a mesa usando fita adesiva de cobre não era muito elegante, pra não dizer que não funcionava mesmo…;)
outro problema é que a solução projetada para a comunicação sem fio entre a mesa de interface e o cubetto é feita com um módulo xbee, que é caro pra cacete no brasil!

mesmo assim, o projeto fez sucesso, atraiu investimentos e, é claro, se fechou. tiraram a página com os manuais de construção do site e a galera ficou na mão.
é isso que acontece quando o seu propósito é só ganhar dinheiro com a sua idéia. aparece alguém querendo te comprar e você não se importa com aquela comunidade que te apoiou no kickstarter, depois traduzindo os manuais, dando feedbacks sobre o produto. o investidor fala que esse negócio de hardware livre é coisa de hippie e você abaixa a cabeça e recebe o seu salário. foi assim com a makerbot, com o primo, e será ainda com muitos outros.

maaaaas, descobri que eles deram uma escondida, mas não tiraram do ar. o projeto do protótipo ainda está aberto no github, e é de lá que eu peguei de novo essa página para recomeçar o nosso projeto de tradução e ‘tropicalização’ do cubetto (agora não se chama mais primo, pois primo virou o nome da companhia).

junto com o pessoal da escola projeto vida aqui de são paulo, vou retomar a construção desse protótipo no primeiro semestre de 2017, mas alterando o que já sei que não dá certo e tentando deixar o mais barato possível. vou documentar por aqui os nossos progressos.

ps1: em tempo, os amigos do raul hacker clube em salvador já tentaram há uns anos uma versão nacional, o primo.pobre, check this out…;)

ps2: no texto abaixo eu vou manter a documentação original, que ainda faz menção ao nome antigo do brinquedo e etc. assim que fizermos progressos na construção da versão brasileira, vou substuindo o material aqui.

ps3: coisas que já sei que vamos tentar mudar na nova versão:

se você tem uma outra idéia ou sugestão basead@ na sua experiência, me avise aqui!

1. O que é o Primo

primo play set

Primo é uma interface física projetada para introduzir a lógica de programação para crianças pequenas (de 3 a 7 anos), sem a necessidade de alfabetização. O objetivo do jogo é conduzir um pequeno robô, chamado Cubetto, de volta para sua casa. Para alcançar o objetivo, as crianças devem programar o robô usando um conjunto limitado de instruções: em frente, à esquerda, à direita e função. Enquanto as primeiras três instruções são bem intuitivas, essa última chama uma sub-rotina, uma linha extra de instruções empacotadas em um único comando.

2. Pesquisa

O ensino de programação para crianças é um campo já amplamente debatido. Nós já conhecemos algumas soluções que possuem esse mesmo objetivo, mas para crianças acima de 8 anos. Entretanto, não existem muitas soluções adaptadas para crianças mais novas e não existe nenhuma que trabalha sem a necessidade de telas e de pré-alfabetização. Vemos um número crescente de aplicativos para tablets e computadores que também trabalham em conjunto com robôs, mas nenhum deles é completamente livre do domínio do pixel como é o nosso conjunto Primo.

A madeira foi escolhida como o material principal, em primeiro lugar, porque é natural; traz uma sensação mais ‘quente’ e tem uma sonoridade bacana. A segunda razão é cultural. Foram realizadas pesquisas sobre brinquedos utilizados em jardins de infância tradicionais na Suíça (onde o produto foi originalmente concebido) e foi descoberto que os jogos mais queridos pelas crianças eram aqueles feito com madeira. Brinquedos de madeira são, de maneira geral, muito duráveis e você pode ver as marcas e arranhões neles, sinais de seu uso por outras crianças. É um material com memória. A madeira foi escolhida também como material por conta do forte contraste que ela cria com o uso da tecnologia. Dentro do Primo existe um circuito integrado, mas nós queríamos criar uma experiência ‘mágica’, escondendo propositadamente a complexidade existente no conjunto.

O conceito por detrás do Primo é muito inspirado pelo trabalho de Seymour Papert, um matemático que foi o co-fundador do Laboratório de Inteligência Artificial no MIT, juntamente com Marvin Minsky nos anos sessenta (se você está interessado nesse tema, sugerimos que você leia Mindstorms, seu livro mais famoso). Ele dirigia a equipe que inventou o LOGO, provavelmente o recurso mais amplamente utilizado para o ensino de programação para crianças. O objetivo de Seymour Papert não era apenas ensinar a programar, mas também ajudar as crianças a descobrir a sua maneira pessoal de resolver problemas. Primo pode ser considerado uma grande simplificação do LOGO e da ‘tartaruga’, que era a sua interface física. Nós limitamos as nossas instruções à sua mais pura forma, evitando qualquer tipo de linguagem numérica ou textual.

O primeiro protótipo do Primo foi realizado no SUPSI Lugano, por Matteo Loglio (co-fundador do Primo e designer de interação), durante o MAInD - Master of Advanced Studies in Interaction Design. A formação de Matteo é em design do produto e depois de aprender o básico sobre Arduino e sua programação, suficientes para a criação do protótipo, ele começou a procurar por soluções técnicas que eram acessíveis para um novato, com o intuito de desenvolver um produto como o Primo. Existiam dois problemas principais: a execução de um carro-robô desde o zero e uma interface que pudesse reconhecer facilmente diferentes instruções. O primeiro problema foi resolvido com o uso de uma placa Oh_Oh board de David Cuartielles, um dos fundadores do Arduino, que havia dado uma palestra no SUPSI. O Oh_Oh robot é um projeto Open Source - de código aberto - e você pode acessar os arquivos fonte no link acima. É basicamente um Arduino em forma de carro, apenas com um Xbee adicionado para a comunicação via radio.

A segunda questão era projetar uma maneira confiável de detectar os blocos de instrução. A solução foi inspirada por um projeto do CIID chamado “Barcode Piano”

A idéia era usar blocos bem simples, que poderiam ser reconhecidos pela placa usando resistores. É uma operação básica de divisão de voltagem, com os pinos analógicos do Arduino lendo os valores dos resistores. É um método bem simples mas bastante eficiente para um protótipo.

No campo do design, algumas características ainda precisavam ser testadas; o design atual é o resultado de muitas iterações.

O a escolha do formato de ‘cobra’ ou ‘zig-zag’ para a sequência de instruções foi escolhida para evitar pré-concepções relacionadas com a alfabetização.

primo play set

O formato em ‘D’ dos blocos conectores foi projetado para que os mesmos pudessem ser inseridos de uma só maneira, sendo consistentes com o desenho do caminho e com a direção a ser seguida pelo carro. Múltiplos designs poderiam ser usados para isso. O formato em D foi escolhido pois é basicamente ‘um circulo com orientação’ e também porque de certa maneira remete a um quadro de avisos, um objeto familiar.

primo play set

O desenho do formato dos blocos de instrução ainda está sendo testado. O design atual funciona bem, as crianças pegam facilmente o significado. Eles apenas tem alguma dificuldade inicial para se familiarizarem com os blocos de comando ‘direita’ e ‘esquerda’. Isso ocorre também porque, em geral, esses conceitos de direção também são novos para os pequenos. Continuamos testando outros formatos de blocos para aprimorar ainda mais essa questão.

No início, o robô tinha a forma de um carrinho de brinquedo e era uma forma bem complicada, que consumia um tempo enorme para ser produzida, pois era toda cortada à laser, colada camada por camada e depois lixada por mais de uma hora. O carro também continha um outro problema, que era ser muito orientado para meninos. Queríamos evitar a discussão com os produtores de brinquedos educativos e sermos criticados por fazermos apenas brinquedos para meninos. Queríamos nos manter neutros e não criar um brinquedo específico para meninos ou meninas, então optamos por uma geometria super neutra, uma caixa.

Demos um nome para a caixinha, junto com uma carinha sorridente, fazendo-o mais chamativo para as crianças. O robô foi chamado de Cubetto (cubinho em italiano). A idéia com o Cubetto é também criar um módulo básico que pode ser expandido e customizado facilmente no futuro.

primo play set

3. Começando

3.1 O básico

Primo é composto por três partes: a Mesa de Interface, o Cubetto e um conjunto de Blocos de Instrução. As crianças interagem com a Mesa colocando os Blocos de Instrução nos orifícios para criar uma seqüência (Um programa) que o Cubetto vai executar.

Existem quatro tipos de Blocos de Instrução, o que significa que resistores com 4 valores distintos podem ser usados, preferencialmente com valores distantes uns dos outros.

Os Blocos são inseridos nos orifícios da Mesa de Interface, onde o valor do resistor é identificado. Depois disso, os valores são processados em uma ‘fila’, que é enviada ao Cubetto usando dois módulos Xbee. Então o Cubetto executa as instruções, uma após a outra.

O cérebro do protótipo é feito com duas placas Arduino, uma UNO (uma Leonardo ou uma Duemilanove também funcionam) para o Cubetto e uma Mega para a Mesa de Interface, onde são necessárias 16 entradas analógicas.

3.2 Eletrônica

Ferramentas Necessárias

Materiais (preços em euro)

Cubetto ~ 88 €

Mesa de Interface ~ 88 € (pura coincidência)

Blocos de Instrução ~ 4 €

3.3 Energia

O Cubetto e (opcionalmente) a Mesa de Interface, são alimentados à bateria. Para o protótipo você pode usar uma bateria LiPo (Lítio-Polímero) ou pilhas AA normais, fica a seu critério. Nós já usamos ambas, as baterias LiPo são boas, mas você precisará de equipamento extra. Se você está começando o seu protótipo do zero, recomendamos as pilhas AA. Apenas lembre-se que elas acabam muito rápido, então o melhor seria usar as pilhas recarregáveis, como as de NiMh.

3.4 Projeto do Protótipo

Todo o produto é feito com madeira cortada a laser, com espessuras de 4mm (a maioria) e de 1mm (apenas uma camada). Você pode cortar essas partes usando serviços de terceiros, como a Ponoko, ou no seu Fab Lab local. O primeiro protótipo foi cortado dentro do FabLab Lugano, enquanto que o produto já desenvolvido foi feito no FabLab Torino, onde parte da equipe de desenvolvimento do Primo ainda reside.

Construir o Cubetto e a Mesa de Interface é um procedimento trabalhoso, mas muito simples, pois suas superficies são basicamente caixas. O trabalho mais complexo está nos Blocos de Instrução. Eles são um sanduíche de duas camadas de 4mm de madeira com imãs e resistores soldados internamente.

4. Fazendo o Protótipo

Download dos arquivos fonte

4.1 Mesa de Interface

Para fazer a mesa de Interface você tem que cortar a laser esses dois arquivos: interface-board-4mm.dxf e interface-board-1mm.dxf: o primeiro é para a madeira tipo compensado de 4mm e o segundo para o de 1mm. Como você pode ver nos arquivos, as partes estão todas numeradas para facilitar o processo de montagem. Os números foram desenhados em uma camada diferente, para que você possa removê-los facilmente antes do corte a laser. Nós recomendamos que você faça o ajuste do orifício para o interruptor do tipo push-button baseado no modelo que você encontrou ou no que já tenha.

Em primeiro lugar, você tem que colar entre si as partes 3 e 4, usando os furos nos cantos para alinhá-las com parafusos enquanto as cola. Depois, deixe-as descansando por uma noite.

Pegue então a fita de cobre, corte 32 pedaços com 70mm cada e passe-os dentro dos orifícios retangulares das partes que você acabou de colar, deixando ao menos 30mm de cada lado (em cima e em baixo).

primo play set

Uma vez terminado esse trabalho você pode colar as partes já anteriormente coladas, nessa ordem:1+2 com 3+4.

primo play set

Assim que a cola secar, chegou a hora de colocar os imãs. Vire a camada superior da Mesa para baixo e preencha os pequenos orifícios com os imãs, tendo certeza de que eles estão sempre na mesma polaridade/direção, não importa se norte ou sul. Sele os buraquinhos com uma gota de cola quente.

Agora, a eletrônica! Comece fazendo as trilhas para a alimentação (5V, vermelho) e para o aterramento (GND, preto) em toda a extensão da fila de orifícios, como mostrado na figura. Fizemos o nosso primeiro protótipo sem a fita de cobre, mas usando fios (que você também pode usar), mas nesse protótipo nós preferimos usar a fita, mesmo para as trilhas. Ela deixa o trabalho de montar as conexões muito mais fácil depois.

primo play set

O próximo passo é conectar um dos dois conectores de cada orifício à trilha GND. Se você usou a fita de cobre, pode agora usar um pequeno pedaço extra, suficiente apenas para tocar as duas extremidades.

primo play set

Agora temos que juntar os outros conectores restantes com a trilha de alimentação (5V), mas dessa vez com um resistor de 10KΩ entre eles. Uma característica bacana da fita de cobre é que a solda gruda muito bem em sua superfície. Essa é a técnica usada:

primo play set

No final desse processo, você deve ter algo assim:

primo play set

Agora é a hora de colocarmos os LEDs; Espete um LED vermelho em cada um dos 16 orifícios, então use uma gota de cola quente para fixá-los na madeira. Uma vez que a cola esfriou, é a hora de conectá-los. Lembre-se que os LEDs possuem polaridade: a perna mais comprida é o ânodo e a mais curta o cátodo.

primo play set

Conecte cada cátodo com a trilha do aterramento (GND), usando um resistor de 220Ω.

primo play set

A perna mais comprida do LED deve ser conectada a um pino de entrada/saída (I/O) digital no Arduino Mega. Esses pinos são numerados de 22 a 53. Os LEDs devem ser conectados numa ordem sequencial, assim será muito mais fácil acessá-los mais tarde durante a programação. No meu protótipo, por exemplo, comecei no pino de número 30 e fui até o 45 (são 16 LEDs). O ponto de partida não é importante, desde que eles estejam na ordem sequencial correta. Isso significa, por exemplo, que se começarmos do pino 30, o primeiro LED deve estar conectado no pino 30, o segundo no pino 31, o terceiro no pino 32 e assim por diante, até o LED 16 no pino 45.

Os cabos devem ser soldados em uma barra de pinos conectores machos duplos, pois os pinos de entrada e saída no Arduino Mega são dispostos em uma linha dupla. Desta maneira fica mais fácil de remover o Arduino da Mesa de Interface quando for necessário.

primo play set

Uma vez que todos os LEDs estejam soldados, nós temos que começar a soldar os conectores da Mesa, àqueles feitos à mão com a fita de cobre. Esses devem ser ligados aos pinos analógicos do Arduino através de um cabo para que seja possível fazer a leitura dos diferentes valores dos resistores. Assim como no caso dos LEDs, esses também dever ser conectados em ordem, começando do A0 para o orifício 1 até o A15 para o orifício 16. O cabo deve ter início do mesmo ponto onde soldamos previamente os resistores de 10K. Veja a imagem:

primo play set

A última coisa a ser conectada é o botão do tipo push-button: solde dois cabos em seus dois conectores, então passe-os pelo seu respectivo orifício na Mesa de Interface, a partir da face superior, puxando-os para baixo até que o botão se encaixe direitinho. Agora vire a Mesa e você deve ter os dois cabos que acabou de soldar saindo pelo orifício. Conecte-os como na figura: um vai direto para a alimentação 5V e o outro para o aterramento (GND) usando um resistor de 10K. Então, conecte-o a um pino de entrada/saída digital no Arduino, a partir de uma extremidade do resistor. Neste exemplo nós usamos o pino de número 50.

primo play set

A Mesa já está quase pronta, agora só falta conectar o módulo wireless na parte superior do Arduino Mega e plugar os conectores em seu lugar na placa. Recapitulando: pinos 30 a 45 para os LEDs, A0 ao A15 para os conectores e o número 50 para o botão push-button. Use os pinos de A0 a A5 no módulo wireless para os primeiros 5 conectores. Não se esqueça de conectar a trilha do aterramento (GND) ao pino GND e a trilha de alimentação (5V) no pino 5V.

primo play set

Agora um ajuste fino: depois de pintar a parte 12 da Mesa, você pode colá-la com a parte 13 no topo da mesma.

O mesmo vale para o botão vermelho: depois de pintar a parte 14, coloque algo macio, como um papel cartão ou EVA no topo da parte 2, ao redor do botão push-button e, antes que a cola seque, cole o botão vermelho. Veja na figura:

primo play set

BLOCOS DE INSTRUÇÃO

Este é um bloco de instrução, em vista explodida:

primo play set

Para fazer os Blocos de Instrução, a primeira coisa que você deve providenciar é o corte a laser dos respectivos arquivos; existe um para a madeira de 4mm e um para a de 1mm. São quatro camadas, numeradas de 1 a 4 e os desenhos fornecidos serão usados para fazer 16 blocos, quatro de cada tipo.

Cada bloco possui um resistor diferente. Esses são os valores dos resistores usados no protótipo:

FRENTE: 4.7K Ω
ESQUERDA: 100K Ω
DIREITA: 220 Ω
FUNÇÃO: 10K Ω

Para fazer os blocos, primeiro você tem que colar a parte 4 com a parte 3.

Após a cola ter secado, você pode começar a pintar. Veja a figura abaixo para entender o esquema das cores:

primo play set

Agora você tem que cortar dois pedaços de fita de cobre com 40mm de comprimento. Passe os mesmos pelos orifícios das duas peças que você acabou de colar e forme um anel bem apertado em volta delas.

primo play set

Depois disso você deve inserir os imãs dentro dos orifícios. Enquanto faz isso, TENHA CERTEZA QUE OS MESMOS ESTÃO CORRETAMENTE ORIENTADOS, para que os blocos de fato ’grudem’ na Mesa. Se você fizer de maneira contrária os mesmos serão repelidos, o que é até engraçado, mas não é o que queremos, certo?

Fixe o imã com uma gota de cola quente e, antes da cola esfriar, coloque o resistor correspondente no topo, com as ‘pernas’ sobre a fita de cobre. Depois disso, o resistor precisa ser soldado nessas duas partes. Depois de soldar, corte a parte que sobrou e cole a parte 2 no topo do resistor.

Termine seu bloco colando a última camada, a parte número 1, no topo, e repita todo o processo para cada Bloco de Instrução :)

CUBETTO

Eletrônica:

O protótipo do Cubetto pode ser construído usando um Arduino Uno ou Leonardo, com um Módulo Wireless agregado. A razão do uso desse tipo de módulo é que ele tem uma superfície relativamente pequena, mas que é suficiente para colocarmos os drivers dos motores, os conectores para os codificadores ópticos, os motores e a alimentação.

O Cubetto deve girar 90 graus para a esquerda e para a direita. Uma maneira não muito precisa de fazer isso seria usando uma contagem de tempo, fazendo algo como “gire a direita por um segundo”. É de se esperar que o resultado seja mais ou menos sempre o mesmo. “Mais ou menos” porque isso vai depender de uma porção de fatores distintos, como o piso, a carga da bateria e assim por diante. A maneira que resolvemos esse problema é detectando a quantidade de rotação da roda usando dois sensores ópticos CNY70 combinados com um adesivo. O adesivo redondo é aplicado por dentro da roda, como nessa foto:

primo play set

O adesivo tem um padrão geométrico de listas pretas e brancas, porque o CNY70 é capaz de detectar a variação da emissão de entre elas. Dentro deles, basicamente existe um LED infravermelho - sempre ligado - e um fototransistor que faz a leitura da quantidade de luz infravermelha. Quando o material preto está na frente do componente quase não há luz refletida, já que a cor preta tende a absorvê-la. No caso oposto, quando o material é branco, ele reflete toda a luz, logo o valor lido pelo sensor é muito grande. A diferença entre essas leituras é usada para controlar a quantidade de rotação.

primo play set

A área útil disponível no Módulo Wireless é onde os drivers dos motores e outros conectores das demais peças serão soldados.

primo play set

Para esse protótipo, use os pinos conectores machos simples, que receberão os conectores fêmeas na outra parte.

primo play set

primo play set

O driver de motor SN754410 possui 16 pinos, que devem ser conectados seguindo esse esquema:

primo play set

O CNY70 esquema:

primo play set

Design:

Começe cortando a laser o arquivo cubetto.dxf; Todas as partes do Cubetto são feitas com compensado de 4mm. Siga essas instruções para montar a base:

primo play set

Ainda não monte os motores, você precisa primeiro montar os rodízios de metal!

primo play set

primo play set

Agora vamos cuidar do CNY70. Solde os dois conectores opostos, que devem ser ligados à alimentação 5V, juntamente através de um mesmo fio; então solde mais três fios nos conectores restantes do CNY70. No final desses fios, solde um bloco de três conectores fêmeas. Eles serão conectados mais tarde aos seus pares no Módulo Wireless.

Os dois CNY70 devem ser colocados na beirada da camada inferior, com o LED e o fototransistor alinhados horizontalmente. Para fixá-los você pode usar um pouco de cola quente, ou de qualquer outro tipo de cola.

Veja a figura para entender bem a posição.

primo play set

Assim como nos CNY70, solde dois cabos às pequenas abas que saem de cada motor. Você pode torcer os dois cabos para fazê-los ficar um pouco mais resistentes e então, no final, solde um bloco de dois conectores fêmeas, como você pode ver na figura.

Agora imprima o desenho com as listas pretas e brancas e cole-o em um pedaço de cartolina (ou numa madeira fina também cortada a laser, fica a seu critério). Corte o perímetro e faça um furo bem no meio, pois ele será inserido entre o motor e a roda. As listas pretas e brancas devem estar viradas para o lado de dentro do Cubetto e a distância entre elas e o sensor CNY70 deve ser algo em torno de 1 a 3mm, para que o CNY70 funcione corretamente.

primo play set

Agora você pode colocar as rodas sobre os motores e, se você utilizou as rodas da Solarbotics, pode aparafusá-las com o parafuso fornecido, mas não aperte muito, ok?

Cole três das quatro ‘paredes’ do Cubetto, as partes 5, 7 e 8. Vamos deixar a parte de trás removível, caso queiramos modificar algo mais para a frente.

Pegue o suporte das baterias e solde os cabos preto e vermelho a outros dois conectores fêmea. Os conectores no Módulo serão ligados ao VIN e ao aterramento. Sugerimos a instalação de uma chave (interruptor) que interrompa o fio vermelho.

primo play set

Agora você pode colocar o conjunto Arduino + Módulo Wireless por cima dos motores, plugar todos os conectores na placa e no Módulo e você terminou de fazer o Cubetto! </div>

Arduino

Download dos arquivos Arduino

As instruções estão contidas nos próprios comentários dentro do código de programação (Sketch).