Dremel a ferramenta essencial…

06/12/2009

Nunca fiz unpacking de nada, porque sempre achei algo idiota e exibicionista. Me tornei um!

As fotos abaixo são um unpacking da Dremel série 300 com eixo flexível. Como é um presente de Natal que dei para mim mesmo, acho que é válido. 🙂

O primeiro Robô a gente nunca esquece.

06/12/2009

Este é o meu primeiro Robô. Ele é feio com o Program-ME, o Arduino da Global Code.

O Custo da construção dele foi bastante baixo, já que a sua estrutura é bem simples. O material utilizado foi:

CD’s/DVD’s para as rodas

Um sensor Max Sonar EZ-1 da Max Botics

3 Servo motores modificados para Rotação

Uma bateria personalizada de 7,2V 1800 mAh/h

Uma roda que gira no próprio eixo utilizada em móveis.

Protoboard e cabos.

Fotos:

Video:

LCD Display + Arduino

04/12/2009

Utilizando um LCD Display 16 colunas por 2 linhas. Os dados serão recebidos pela porta serial.

Fazer upload do código abaixo para o Arduino:


/*
 * LCD RW na porta digital 13
 * LCD RS na porta digital 12
 * LCD Enable na porta digital 11
 * LCD D4 na porta digital 5
 * LCD D5 na porta digital  4
 * LCD D6 na porta digital  3
 * LCD D7 na porta digital  2

 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)

 Baseado no exemplo de Tom Igoe
 Danilo Altheman em 08/12/2009
 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */
#include <string.h>
#include <LiquidCrystal.h>

int x = 0;
int lastchar = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
char text[32];

void setup(){
lcd.begin(16, 2);
Serial.begin(9600);
}

void loop() {
if (Serial.available()) {
delay(100);
lcd.clear();
int x = 0;
// Captura todos os bytes recebidos pela porta serial e armazena no array.
while (Serial.available() > 0) {
text[x] = Serial.read();
x++;
}
 // Imprime byte a byte o texto até que ele seja menor que 16 caracteres.

for (x = 0; x < strlen(text); x++) {
if (x < 16) {
lcd.write(text[x]);
Serial.print(text[x]);
lastchar = x;
}
// Sai do looping quando o texto atinge o tamanho maximo.
else break;
}
// Posiciona o cursor na segunda linha, coluna zero.
lcd.setCursor(0,1);
// Imprime o restante do texto
for (x = lastchar + 1; x < strlen(text); x++) {
lcd.write(text[x]);
Serial.print(text[x]);
}
 }
}

Enviando dados pelo Python:


#!/usr/bin/env python

import serial

# Aqui instanciamos o objeto. Sintaxe: serial.Serial(Porta_USB_do_Arduino, bitrate)

arduino = serial.Serial("/dev/tty.usbserial-A9007Gvp",9600)
while(1):
 text = raw_input("-> ")
 arduino.write(text)

Por Shell Script:


#!/bin/bash

echo -n "Digite algo: "

read algo

echo -e "$algo" > /dev/tty.usbserial-A9007Gvp

Transformando um Servo motor de Posição para Servo motor de Rotação

04/12/2009

Vou tentar ensinar com poucas palavras e algumas imagens, como transformar um Servo Motor de Posição para Rotação. O procedimento é muito simples e não requer prática nem tampouco habilidade.

Nota: Este é um servo utilizado em *.*modelismo. Fabricante Hobbico. O procedimento deve ser parecido para outros fabricantes.

1] Primeiro abra o motorzinho com cuidado para não voar engrenagens para todo o lado:
Veja as imagens de 1.png até 9.png

2] Repare na imagem 10.png que estou removendo os pingos de solda que prendem o motor à carcaça. Veja a imagem 11.png onde estou retirando a plaquinha.

3] O servo tem um potenciometro de 5k que deve ser retirado da placa e da carcaça do motor. É com base neste Potenciometro que a plaquinha sabe qual a posição do motor.
Veja as imagens que vão de 12.png até 15.png

4] No lugar do potenciometro a placa deverá receber 2 resistores que atingam a resistencia mais próxima do potenciometro. Utilizei 2 resistores de 2.2k. Veja a imagem 15.png.

5] Na sequência e com muito capricho devemos cortar uma trava que fica em uma das engrenagens. Não se preocupe só tem esta engrenagem com trava.
6] Acabou! Coloque as engrenagens no lugar e feche o motorzinho.

Quanto a parte da programação é muito simples. Utilizando a biblioteca Servo.h que já vem com a IDE do Arduino, use o método (Sim é O.O.) nomedoservo.write(0) e nomedoservo.write(180), vá para frente e vá para trás respectivamente. Para parar o motor o método é nomedoservo.detach()