Como professor do Instituto Federal de Santa Catarina (IFSC), gostaria de informar que as inscrições para os cursos da área de Eletrônica em Florianópolis estão abertas.
Nossos cursos são:
- técnico em Eletrônica integrado (você cursa o ensino médio e a parte técnica junto), período vespertino;
- técnico em Eletrônica subsequente (para quem já tem o ensino médio), período noturno;
- superior de Tecnologia em Sistemas Eletrônicos, integral;
- Engenharia Eletrônica (curso novo), integral.
Inscrições em http://ingresso.ifsc.edu.br
Faça seu próprio robô
segunda-feira, 1 de outubro de 2012
sábado, 4 de junho de 2011
Modificando o Mini Servo para Rotação - Tutorial de BrasilRobotics
Para modificar os servos para rotação contínua (passo 2 da montagem do robô), confira o tutorial, explicado passo a passo, em Brasil Robotics: Modificando o Mini Servo para Rotação - Servo modify - Tutorial
quinta-feira, 17 de fevereiro de 2011
Vídeo do robô
Aqui você pode conferir uma pequena gravação de vídeo do funcionamento do robô.
quinta-feira, 10 de fevereiro de 2011
Versão 1.0
O que é?
Um robô de fácil construção e montagem, que você pode fazer com materiais de baixo custo.
Como surgiu?
Do interesse de professores do IF-SC, Campus Florianópolis, em desenvolver uma plataforma robótica facilmente replicável, como meio de incentivo às ciências exatas e tecnológicas.
O desenvolvimento deste robô foi apoiado pelo Primeiro Edital de Apoio a Projetos de Extensão no IF-SC (I APROEX). A equipe executora é formada pelos professores Joel Lacerda (Coordenador), Fernando S. Pacheco e Charles B. de Lima, do Departamento Acadêmico de Eletrônica (DAELN) do Campus Florianópolis e pelo aluno Luciano Silva do Lago, do Curso Técnico em Eletrônica.
Características
Nessa versão 1.0, a plataforma microcontrolada escolhida, por sua facilidade de aquisição, programação e baixo custo é o Arduino (usa microcontrolador ATmega328, família AVR). O chassis é de material plástico (polietileno) e as conexões elétricas são feitas em uma barra Sindal. Também para manter o baixo custo, usamos pilhas de fácil aquisição (tamanhos AA e 9 V).- [A] Uma placa Arduino Duemilanove ou Arduino Uno
- [B] Dois servomotores (hobby servo) 9 g
- [C] Uma chapa de polietileno de alta densidade (PEAD ou HDPE, do nome em inglês). Aqui, usamos uma tábua de cortar carne :-)
- [D] Duas rodas. Aqui, são os rolos que puxam papel de uma impressora usada (rodas com diâmetro de 5 cm)
- [E] Pequeno pedaço de chapa de alumínio
- [F] Fios para conexões (AWG 26 a 30)
- [G] Dois elásticos de dinheiro
- [H] Cabo e conector de alimentação para bateria 9 V
- [I] 1 bateria 9 V (quadrada)
- [J] Um porta 4 pilhas tamanho AA
- [K] 4 pilhas AA
- [L] Uma barra de conectores Sindal (12 bornes, 4 mm)
- [M] Duas chaves (microswitch com haste)
- [N] Dois LDRs
Não mostrados na figura
- Dois espaçadores com rosca (de placa-mãe de computadores)
- Um palito
- Uma chave liga-desliga
Ferramentas
clique para ampliar |
- [A] Arco de serra comum ou mini
- [B] Formão
- [C] Furadeira
- [D] Martelo
- [E] Lápis
- [F] Chave de fenda
- [G] Brocas 1 mm (não mostrada na figura), 2,5 mm e broca de madeira 5/8" (aprox. 15 mm)
- [H] Tesoura
- [I] Lixa
- [J] Régua
1. Faça o chassis
a. Imprima o modelo que está disponível acima (observe se escala está em 100%; confira com a marcação de 13,6 cm que existe no modelo). Recorte e marque sobre a placa de polietileno.
b. Usando o arco de serra, recorte a placa (na foto, estou fazendo um teste). Você deve levar aproximadamente 30 min nessa tarefa.
c. Faça os furos previstos com a broca menor.
d. Faça o recorte para as rodas com a broca maior (em uma furadeira de bancada, como mostrado na figura, fica mais fácil).
e. Com o formão, faça o acabamento dos recortes. Cuidado! Nunca direcione a lâmina para o seu corpo!
f. Lixe as bordas para um melhor acabamento.
2. Modifique os servomotores
a. Originalmente, um servo desse tipo tem o movimento limitado em 180 graus. Para transformá-lo em um servo de rotação contínua, siga as instruções (excelentes, com várias fotos) do blog de Tod E. Kurt, em http://todbot.com/blog/2009/04/11/tiny-servos-as-continuous-rotation-gearmotors/
Se tiver qualquer dúvida ou dificuldade, entre em contato com a gente.
b. Faça as ligações mostradas na figura seguinte para testar o funcionamento dos servos no próximo passo.
b. Faça as ligações mostradas na figura seguinte para testar o funcionamento dos servos no próximo passo.
c. Carregue o programa seguinte na IDE do Arduino para testar os servos e ajustar a largura de pulso para que eles fiquem parados quando desejado.
/*****************************************************************************
* ajuste_rotacao_direcao_servos
*
* Ajuste dos valores de pulso máximo (max.pulse) e mínimo (min.pulse) para
* que o servo mantenha-se parado quando for enviado o comando de 90 graus
*
* Fernando S. Pacheco - 2011
*****************************************************************************/
#include "SoftwareServo.h"
SoftwareServo servo;
void setup()
{
servo.attach(2); //Num. do pino (Arduino) em que o servo está conectado.
// Teste um servo, anote o valor do max. pulse, e depois teste o outro.
//servoL.setMaximumPulse(XXX);// esse é o valor que será testado no loop.
// Depois de obtê-lo, coloque aqui em cima e tire o comentário.
//servoL.setMinimumPulse(XXX);// para um dos servos que testamos,
// não resolveu mexer só no max. pulse.
// Ficou muito baixo e, assim, a velocidade máxima era pequena.
// Foi necessário, então, ajustar também o min. pulse
Serial.begin(9600);
Serial.println("ServoAdjust/Ajuste do servo");
}
void loop()
{
for (int maxpulse=500; maxpulse!=3000; maxpulse+=10) {
servoL.setMaximumPulse(maxpulse);
servoL.write(90);
Serial.println(maxpulse);
SoftwareServo::refresh();
delay(45);
SoftwareServo::refresh();
delay(45);
}
//Depois de ter um valor aproximado, diminua o incremento do laço e
//os valores inicial e final
delay(500);
}
3. Conecte as rodas aos motores
b. Com a furadeira e/ou formão, retire parte do plástico até que o suporte fique encaixado e centralizado
4. Fixe a placa Arduino e as chaves
a. Rosqueie os espaçadores no chassis
b. Coloque a placa do Arduino
c. Cole ou parafuse as chaves na frente do robô. Use a chapa de alumínio para fazer uma haste maior para as chaves
5. Faça as conexões elétricas
6. Fixe as pilhas
a. Use os elásticos e o palito para fixar as pilhas
b. Coloque um pequeno pedaço de polietileno embaixo da bateria 9 V
b. Coloque um pequeno pedaço de polietileno embaixo da bateria 9 V
7. Programe o microcontrolador
a. Use o programa exemplo abaixo.
/*****************************************************************************
* robot_segue_luz_e_volta_quando_bate
*
* Robô vai para a direção com mais luminosidade, a partir da leitura de
* dois LDRs (fotorresistores)
* Também tem duas chaves na frente para detectar quando bate
*
* Código usa os resistores internos de pullup do ATmega
*
* Fernando S. Pacheco - 2011
*****************************************************************************/
#include "SoftwareServo.h"
#define invON LOW
#define invOFF HIGH
#define leftColisionPin 11
#define rightColisionPin 10
#define leftLdrPin A0
#define rightLdrPin A1
SoftwareServo servoL;
SoftwareServo servoR;
int leftCol=invOFF;
int rightCol=invOFF;
int leftLight=0;
int rightLight=0;
void setup()
{
Serial.begin(9600);
servoL.attach(2);
servoR.attach(3);
servoL.setMinimumPulse(295); //coloque os valores que você obteve no
// teste dos servos. (Insert here the values obtained during servo testing)
servoL.setMaximumPulse(993);
servoR.setMaximumPulse(1247);
pinMode(leftColisionPin, INPUT);
digitalWrite(leftColisionPin, HIGH); //habilitar os resistores internos de
// pullup. (To enable internal pullup resistor)
pinMode(rightColisionPin, INPUT);
digitalWrite(rightColisionPin, HIGH); //to enable internal pullup resistor
pinMode(rightLdrPin, INPUT);
digitalWrite(rightLdrPin, HIGH); //to enable internal pullup resistor
pinMode(leftLdrPin, INPUT);
digitalWrite(leftLdrPin, HIGH); //to enable internal pullup resistor
//Wait 2 seconds to begin
delay(2000);
//Aumenta velocidade vagarosamente / Increment speed slowly
for (int k=0; k!=90; ++k) {
servoL.write(90+k); //forward/frente em 180
servoR.write(90-k); //forward/frente em 0
SoftwareServo::refresh();
delay(25);
}
}
void loop()
{
//Segue para frente em velocidade máxima / Go forward at full speed
servoL.write(180);
servoR.write(0);
SoftwareServo::refresh();
//Lê LDRs / Read LDRs
leftLight=analogRead(leftLdrPin);
rightLight=analogRead(rightLdrPin);
if (leftLight > rightLight) {
servoL.write(150);
servoR.write(70);
}
else {
servoL.write(110);
servoR.write(30);
}
SoftwareServo::refresh();
delay(45);
//Lê chaves de colisão / Read collision detection switches
leftCol=digitalRead(leftColisionPin);
rightCol=digitalRead(rightColisionPin);
//Detecção de colisão / Collision detected
if (leftCol == invON || rightCol == invON) {
//Robô para trás / Reverse
servoL.write(30); //frente em 180
servoR.write(150); //frente em 0
for (int k=0; k!=10; ++k) {
SoftwareServo::refresh();
delay(45);
}
if (leftCol == invON) {
//Se bateu à esquerda, vira para a direita / Turn right to avoid collision
for (int k=0; k!=17; ++k) {
servoL.write(140);
servoR.write(140);
SoftwareServo::refresh();
delay(45);
}
}
else {
if (rightCol == invON) {
//Se bateu à direta, vira para a esquerda / Turn left to avoid collision
for (int k=0; k!=17; ++k) {
servoL.write(40);
servoR.write(40);
SoftwareServo::refresh();
delay(45);
}
}
}
}
SoftwareServo::refresh();
delay(1);
}
a. Divirta-se! Modifique! Comente o resultado!
9. Ideias para outras versões
a. Com sensores infravermelho, fazer um seguidor de linha
b. Incluir sensores para que o robô identifique limites de espaço (por exemplo, não cair de uma mesa)
c. Fazer acionamento remoto
d. Usar um pack de baterias LiPo (6 células; 7,2 V, por exemplo)
d. Usar um pack de baterias LiPo (6 células; 7,2 V, por exemplo)
quarta-feira, 9 de fevereiro de 2011
Estimativa de custos do robô V. 1.0
Material | Preço (R$) | Observação |
---|---|---|
Uma placa Arduino Duemilanove ou Arduino Uno | 74,00 | Preço no Brasil (Brasilrobotics); se quiser fazer uma comprar internacional, no Ebay você encontra mais barato |
Dois servomotores (hobby servo) 9 g | 26,00 | 2 unidades no Brasil (Brasilrobotics); pode encontrar também em lojas de modelismo |
Uma chapa de polietileno de alta densidade (PEAD ou HDPE, do nome em inglês) | 4,00 | Com uma tábua de cortar carne com aprox. 19x30 cm, é possível construir dois chassis |
Duas rodas | 0,00 | Aproveitamento de sucata (impressora); caso não consiga, pode fazer de madeira, MDF ou com o polietileno |
Pequeno pedaço de chapa de alumínio | 0,00 | Também pode ser obtido de sucata |
Fios para conexões (AWG 26 a 30) | 5,00 | A melhor opção é comprar já com as pontas feitas (Brasilrobotics) |
Dois elásticos de dinheiro | 0,00 | Para fixar as pilhas |
Cabo e conector de alimentação para bateria 9 V | 1,00 | Peça quando comprar o Arduino |
Uma bateria 9 V (quadrada) | 7,00 | Você também tem a opção de comprar uma recarregável |
Um porta 4 pilhas tamanho AA | 1,00 | Facilmente encontrado em lojas de produtos eletrônicos |
4 pilhas tamanho AA | 5,00 | Recarregáveis são uma ótima alternativa |
Uma barra de conectores Sindal (12 bornes, 4 mm) | 3,00 | Em lojas de produtos eletrônicos ou elétricos |
Duas chaves (microswitch com haste) | 3,00 | Opcionais, mas importantes para indicar quando o robô bate em um objeto |
Dois LDRs | 1,50 | Opcionais; para fazer o robô seguir ou se afastar da luz |
Dois espaçadores com rosca | 0,00 | De placa-mãe de computadores |
Um palito | 0,00 | |
Uma chave liga-desliga | 1,00 | |
TOTAL | 131,50 |
terça-feira, 8 de fevereiro de 2011
Version 1.0
What is it?
A DIY, easy to build robot.
This project originated from our interest to develop an easy to build robot to help students in our classes. It is a tool to teach and learn programming, circuits, electronics, and mechanics.
The development of this project was funded by the Federal Institute of Santa Catarina, in Florianópolis, SC, Brazil, through the I APROEX. Our team is formed by professors Joel Lacerda (Coordinator), Fernando S. Pacheco and Charles B. de Lima, from the Electronics Department in Florianópolis and by the student Luciano Silva do Lago.
Characteristics
This 1.0 version uses Arduino (ATmega328 microcontroller, AVR family), since it is easy to program. The chassis is made of plastic, and electrical connections are done in a terminal strip. To lower the cost, the robot uses standard batteries (AA and 9 V).- [A] 1 Arduino Duemilanove or Arduino Uno board
- [B] 2 servomotors (hobby servo 9 g)
- [C] 1 high density polyethylene (HDPE) sheet. Here, it is a kitchen chopping board :-)
- [D] 2 wheels. Here, they are from an old printer (paper feed rolls with 5 cm diameter)
- [E] A small aluminum sheet
- [F] Jumper wires (AWG 26 to 30)
- [G] 2 rubber bands
- [H] Cable and power connector for 9 V battery
- [I] 1 9 V battery
- [J] 1 battery holder (4 AAs)
- [K] 4 AA batteries
- [L] 1 terminal strip (12 terminals)
- [M] 2 micro switches (with lever)
- [N] 2 LDRs
Not shown in the figure
- 2 plastic spacers (from a computer motherboard)
- 1 toothpick
- 1 on/off switch
Tools
click to enlarge |
- [A] Hacksaw
- [B] Chisel
- [C] Electric drill
- [D] Hammer
- [E] Pencil
- [F] Screwdriver
- [G] 1 mm (not show), 2,5 mm, and 5/8" (aprox. 15 mm) drill bits
- [H] Scissors
- [I] Sandpaper
- [J] Ruler
1. Build the chassis
a. Print out the available template (check if the printing scale is 100%; after printing, check the marking "13,6 cm"). Cut out and copy it over the HDPE sheet.
c. Drill the holes using the smaller bit.
e. Finish the cutouts with the chisel. Take care!
f. Sand the edges for a better finish.
2. Modify the servos
a. The rotation of these servos is limited to 180 degrees. To turn them into continuous rotation servos, follow the instructions at the excellent TodBot Blog
If you have any doubt, please contact us.
b. Connect the servos and batteries as shown in the figure.
b. Connect the servos and batteries as shown in the figure.
c. Load the next program into the Arduino IDE to test the servos and to adjust the pulse width.
/*****************************************************************************
* adjust_servo_rotation
*
* Adjust max.pulse and min.pulse to stop the servo with the 90 deg command
*
* Fernando S. Pacheco - 2011
*****************************************************************************/
#include "SoftwareServo.h"
SoftwareServo servo;
void setup()
{
servo.attach(2); //Arduino pin number in which the servo is connected
// Test the first servo, save the value of max. pulse, and test the other servo.
//servoL.setMaximumPulse(XXX);// this is the value we want to find.
// Get it, write it above, and remove the comment.
//servoL.setMinimumPulse(XXX);// para um dos servos que testamos,
// não resolveu mexer só no max. pulse.
// Ficou muito baixo e, assim, a velocidade máxima era pequena.
// Foi necessário, então, ajustar também o min. pulse
Serial.begin(9600);
Serial.println("ServoAdjust/Ajuste do servo");
}
void loop()
{
for (int maxpulse=500; maxpulse!=3000; maxpulse+=10) {
servoL.setMaximumPulse(maxpulse);
servoL.write(90);
Serial.println(maxpulse);
SoftwareServo::refresh();
delay(45);
SoftwareServo::refresh();
delay(45);
}
//Depois de ter um valor aproximado, diminua o incremento do laço e
//os valores inicial e final
delay(500);
}
3. Attach the wheels to the servos
4. Fasten the Arduino board and switches
a. Thread the spacers on the chassis
b. Fasten the Arduino board
c. Glue or fasten the micro switches. Use the aluminum sheet to make an extended lever
5. Wire the components
6. Fasten the batteries
a. Fasten the batteries with the rubbers and the toothpick
b. Place a small piece of HDPE under the 9 V battery
b. Place a small piece of HDPE under the 9 V battery
7. Program the microcontroller
a. Test the sample program.
/*****************************************************************************
* robot_searches_for_light_and_goes_back *
* Robô vai para a direção com mais luminosidade, a partir da leitura de
* dois LDRs (fotorresistores)
* Também tem duas chaves na frente para detectar quando bate
*
* Código usa os resistores internos de pullup do ATmega
*
* Fernando S. Pacheco - 2011
*****************************************************************************/
#include "SoftwareServo.h"
#define invON LOW
#define invOFF HIGH
#define leftColisionPin 11
#define rightColisionPin 10
#define leftLdrPin A0
#define rightLdrPin A1
SoftwareServo servoL;
SoftwareServo servoR;
int leftCol=invOFF;
int rightCol=invOFF;
int leftLight=0;
int rightLight=0;
void setup()
{
Serial.begin(9600);
servoL.attach(2);
servoR.attach(3);
servoL.setMinimumPulse(295); //coloque os valores que você obteve no
// teste dos servos. (Insert here the values obtained during servo testing)
servoL.setMaximumPulse(993);
servoR.setMaximumPulse(1247);
pinMode(leftColisionPin, INPUT);
digitalWrite(leftColisionPin, HIGH); //habilitar os resistores internos de
// pullup. (To enable internal pullup resistor)
pinMode(rightColisionPin, INPUT);
digitalWrite(rightColisionPin, HIGH); //to enable internal pullup resistor
pinMode(rightLdrPin, INPUT);
digitalWrite(rightLdrPin, HIGH); //to enable internal pullup resistor
pinMode(leftLdrPin, INPUT);
digitalWrite(leftLdrPin, HIGH); //to enable internal pullup resistor
//Wait 2 seconds to begin
delay(2000);
//Aumenta velocidade vagarosamente / Increment speed slowly
for (int k=0; k!=90; ++k) {
servoL.write(90+k); //forward/frente em 180
servoR.write(90-k); //forward/frente em 0
SoftwareServo::refresh();
delay(25);
}
}
void loop()
{
//Segue para frente em velocidade máxima / Go forward at full speed
servoL.write(180);
servoR.write(0);
SoftwareServo::refresh();
//Lê LDRs / Read LDRs
leftLight=analogRead(leftLdrPin);
rightLight=analogRead(rightLdrPin);
if (leftLight > rightLight) {
servoL.write(150);
servoR.write(70);
}
else {
servoL.write(110);
servoR.write(30);
}
SoftwareServo::refresh();
delay(45);
//Lê chaves de colisão / Read collision detection switches
leftCol=digitalRead(leftColisionPin);
rightCol=digitalRead(rightColisionPin);
//Detecção de colisão / Collision detected
if (leftCol == invON || rightCol == invON) {
//Robô para trás / Reverse
servoL.write(30); //frente em 180
servoR.write(150); //frente em 0
for (int k=0; k!=10; ++k) {
SoftwareServo::refresh();
delay(45);
}
if (leftCol == invON) {
//Se bateu à esquerda, vira para a direita / Turn right to avoid collision
for (int k=0; k!=17; ++k) {
servoL.write(140);
servoR.write(140);
SoftwareServo::refresh();
delay(45);
}
}
else {
if (rightCol == invON) {
//Se bateu à direta, vira para a esquerda / Turn left to avoid collision
for (int k=0; k!=17; ++k) {
servoL.write(40);
servoR.write(40);
SoftwareServo::refresh();
delay(45);
}
}
}
}
SoftwareServo::refresh();
delay(1);
}
a. Enjoy! Modify! Discuss your results!
9. Ideas for future versions
a. Line follower
b. Remote control
c. Use a LiPo battery pack (6 cells; 7,2 V)
c. Use a LiPo battery pack (6 cells; 7,2 V)
Assinar:
Postagens (Atom)