collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[22 de Abril de 2024, 14:14]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: Projecto - Introdução à Robotica  (Lida 31823 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: Projecto - Introdução à Robotica
« Responder #45 em: 20 de Fevereiro de 2013, 22:14 »
Boas.

Foi mesmo esse o disco que usei mas à medida que vai cortando o acrilico vai derretendo e fechado o corte que vai ficando para traz, deve ser falta de pratica e jeito ;D Se calhar tenho de ter mais calma a cortar, eu sinto um grande handicap a manusear a dremel... com o tempo vai ao sitio. :P

Quanto aos furos senso ja fiz o mesmo que falam e sem problemas com polipropileno (não sei se é exactamente o mesmo que acrilico ou se é mais "mole"). A ideia das porcas também não é nada má, tenho de ver o que vou fazer.

Agora vou fazer uma roda livre com algum lixo que tenho ca para casa... Ja meto umas fotos.


Obrigado pelas dicas,
Abraços
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.198
Re: Projecto - Introdução à Robotica
« Responder #46 em: 21 de Fevereiro de 2013, 01:34 »
Já cortei acrílico com dremel, ao principio também tinha o problema em que ia derretendo à medida que cortava, depois com a prática lá descobri uma forma de isso não acontecer, então tem de se colocar o disco bem rápido e dar uns toques sem manter em contacto permanente com o acrílico, assim ele não tem tempo de aquecer, para sair direito basta colocar uma tábua em cima do acrílico, ao cortar encosta-se o parafuso do disco à tábua com descidas breves.

Colocar roscas é mais tramado e qualquer pressão lateral acaba por rachar, por isso o veio não pode ser muito profundo.

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: Projecto - Introdução à Robotica
« Responder #47 em: 21 de Fevereiro de 2013, 01:41 »
Uma roda de impressora, rolamento flangeado de motor dc daqueles com bobinas presas na pcb, varao de impressora e acrilico do lixo :P

Feito à carga por hoje... amanha acabo melhor







« Última modificação: 21 de Fevereiro de 2013, 01:44 por c3dr1c »
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

Offline andnobre

  • Mini Robot
  • *
  • Mensagens: 402
Re: Projecto - Introdução à Robotica
« Responder #48 em: 21 de Fevereiro de 2013, 11:52 »
tens ai um bom trabalho.
força ai.

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: Projecto - Introdução à Robotica
« Responder #49 em: 21 de Fevereiro de 2013, 23:06 »
Ja anda... agora so falta ligar a uma ponte h e a um micro e começar a programar :D ah e falta os sensores.

Afinal por preguiça vou usar um L298, ja dimensionei e desenhei o circuito da ponte h com transistores, ja aprendi o que precisava :P

Soldei 3 condensadores de 100nF em cada motor para reduzir o ruido.
Um dos motores anda mais que o outro como podem ver no video.





Tenho uma duvida, será que estes motores aguentam com 7.5V muito tempo? La nos chines faz so referencia a trabalhar com 4, 5 e 6V, mas como o L298 precisa de no minimo 7.5V na alimentação da ponte H (de acordo com a tensão que utilizo nos pinos INPUT)...
E com 9V será que aguenta?

Se nao aguenta, depois com o PWM consigo controlar a potencia fornecida ou o facto de a onda quandrada ter como amplitude 9V pode fazer mal?
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Projecto - Introdução à Robotica
« Responder #50 em: 21 de Fevereiro de 2013, 23:21 »
O L298D é bi-polar, vais ter uma queda de tensão de 1.4, porque tens dois transistores a provocar queda de tensão em cada meia ponte, dai os 7.5v, eu com 12v no rato, tinha no máximo 10v á saida, ou 10.xv é uma queda ainda consideravel..
O que o pwm faz é que efectivamente ficas com uma voltagem mais reduzida, sim, a onda terá um valor fixo, mas a voltagem efectiva ao longo do tempo será uma percentagem da voltagem de alimentação.
Avr fanboy

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: Projecto - Introdução à Robotica
« Responder #51 em: 21 de Fevereiro de 2013, 23:27 »
Pois assim posso usar até 9V directos da pilha e depois limitar o duty cycle a um certo valor que resulte numa tensão máxima de 6V. Depois uso um 7805 para alimentar o micro e a logica do L298 e escuso de estar a usar divisores de tensão para reduzir o valor da tensão nos input's do L298
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Projecto - Introdução à Robotica
« Responder #52 em: 21 de Fevereiro de 2013, 23:35 »
Divisores resistivos?
Isso tem alimentação de lógica separada da alimentação de potência..
Avr fanboy

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: Projecto - Introdução à Robotica
« Responder #53 em: 21 de Fevereiro de 2013, 23:40 »
Sim, mas segundo a data sheet o valor minimo de VS = ViH+2.5

Teria de baixar a tensão dos inputs pra baixo de 5V...
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: Projecto - Introdução à Robotica
« Responder #54 em: 25 de Fevereiro de 2013, 00:36 »
Boas.

Montei um circuito simples para testar o robot com a programação, mas quando ligo so ouço um zumbido. Se aproximar uma luz do LDR ouço o zumbido intermitente. Acho que com duty cylce a 246 o zumbido é continuo, a cerca de 100 é intermitente.

Acho que o zumbido vem dos transistores.



Código: [Seleccione]
// Iniciar programa
#include <avr/io.h>
#include <avr/interrupt.h>

// Criar uma variável com o valor do sensor de distância do ADC
volatile unsigned char adc; // char porque só precisamos de 8 bits

int main(void) {
DDRD |= (1<<PD6); // Definir o pino digital 6 como OUTPUT
DDRD |= (1<<PD5);


// Configurar o ADC:
ADMUX |= (1<<ADLAR); // Resolução de 8 bits
ADCSRA |= (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); //Prescaler de 128
ADMUX |= (1<<REFS0); // Referência: AVcc
ADCSRA |= (1<<ADATE); // Gatilho automático: Freerunning mode

// Input: ADC0 seleccionado por defeito
ADCSRA |= (1<<ADEN); // Ligar o ADC
ADCSRA |= (1<<ADIE); // Ligar a interrupção particular do ADC
sei(); // Ligar as interrupções globais
ADCSRA |= (1<<ADSC); // Iniciar as conversões no ADC
//Pwm init and config
TCCR0A = ((1<<COM0A1)|(1<<COM0B1)|(1<<WGM00)); // Enable pwm in both timer 0 pins with phase correct pwm
TCCR0B = (1<<CS00); // No prescaled clock, feed 16Mhz to the timer
OCR0A = 0;
OCR0B = 0;// This is to avoid stupid noises from the motors, and init the values

for(;;) {// Ciclo eterno
if(adc > 50)
OCR0A = 50;
OCR0B = 50;
if(adc > 100)
OCR0A = 150;
OCR0B = 150;
if(adc > 200)
OCR0A = 240;
OCR0B = 240;
}
}

ISR(ADC_vect) {// Definir uma interrupção que ocorre a cada ocorrência de uma conversão
adc = ADCH; // Ler o valor do ADC, e guardá-lo numa variável

}



Será que a frequencia está muito baixa? Eu quando estive a testar ouve duas ou tres vezes que um motor trabalhou, mas pouco. Com um led ligado ao colector ve-se que ele pisca..

Alguem tem ideia do que pode ser?

CUmprimentos

Edit:
É verdade! Afinal um motor nao trabalha mais rapido que o outro. O robot no video tem um desvio porque a roda livre estava mal feita.
Fiz uma roda nova muito melhor acabada que a anterior mas nota-se que ao longo de uma grande distancia o robot vai tambem curvando. Mais vale comprar uma roda perfeita vinda da industria que sao baratas e tudo, mas vou compensar esse desvio com o PWM

Coloquei uma pilha de 9V no robot, mas pelo que andei a ver nao me parec ser boa ideia pois so tem cerca de 170mha...
« Última modificação: 25 de Fevereiro de 2013, 00:45 por c3dr1c »
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Projecto - Introdução à Robotica
« Responder #55 em: 25 de Fevereiro de 2013, 00:47 »
É normal, porque os motores rodam mais para um lado que para o outro, é assim porque as escovas não estão montadas a 0º mas sim avançadas, para o motor fazer mais rotação no sentido para que é suposto rodar, tambem tem menos binário a rodar no sentido contrário, é assim e não defeito de nada, tens de compensar com pwm, e 8 bits não chega, o meu rato tem esse problema:/
Avr fanboy

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: Projecto - Introdução à Robotica
« Responder #56 em: 25 de Fevereiro de 2013, 01:05 »
Essa é que eu não sabia das escovas, que interessante :D
De qualquer maneira a roda tambem estava muito mal. Fiz outra mas quase no final de estar pronta dei cabo de tudo :P Fiz mais outra e esta está perfeita. Mas ya, terei sempre esse desvio.

Entao terei de usar o Timer 1 para poder ter PWM de 10 bits.

CUmps
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: Projecto - Introdução à Robotica
« Responder #57 em: 26 de Fevereiro de 2013, 22:32 »
Uma pergunta, no codigo postado o facto de se haver uma interrupação cada vez que o adc faz uma conversão, nao diminui a frequencia de PWM?

Código: [Seleccione]
// Iniciar programa
#include <avr/io.h>
#include <avr/interrupt.h>

// Criar uma variável com o valor do sensor de distância do ADC
volatile unsigned char adc; // char porque só precisamos de 8 bits

int main(void) {
DDRB |= (1<<PB1); // Definir o pino digital 6 como OUTPUT
DDRB |= (1<<PB2);


// Configurar o ADC:
ADMUX |= (1<<ADLAR); // Resolução de 8 bits
ADCSRA |= (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); //Prescaler de 128
ADMUX |= (1<<REFS0); // Referência: AVcc
ADCSRA |= (1<<ADATE); // Gatilho automático: Freerunning mode

// Input: ADC0 seleccionado por defeito
ADCSRA |= (1<<ADEN); // Ligar o ADC
ADCSRA |= (1<<ADIE); // Ligar a interrupção particular do ADC
sei(); // Ligar as interrupções globais
ADCSRA |= (1<<ADSC); // Iniciar as conversões no ADC

//Pwm init and config
TCCR1A = ((1<<COM1A1)|(1<<COM1B1)|(1<<WGM11)|(1<<WGM10)); // Enable pwm in both timer 1 pins with phase correct pwm
TCCR1B = (1<<CS10); // No prescaled clock, feed 16Mhz to the timer
OCR1A = 0;
OCR1B = 0;// This is to avoid stupid noises from the motors, and init the values

for(;;) {// Ciclo eterno
if((adc > 0) & (adc < 100))
OCR1A = 100;
OCR1B = 100;
if(adc > 100)
OCR1A = 1000;
OCR1B = 1000;
}
}

ISR(ADC_vect) {// Definir uma interrupção que ocorre a cada ocorrência de uma conversão
adc = ADCH; // Ler o valor do ADC, e guardá-lo numa variável

}

Fogo ando aqui as voltas e não consigo meter um motor a rodar  >:(
So ouço zumbidos :P
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Projecto - Introdução à Robotica
« Responder #58 em: 26 de Fevereiro de 2013, 22:37 »
Não, são interrupções, não são delays em software nem nada do género.
Mas usar interrupções para o adc, não me parece necessário.
E isto:
Código: [Seleccione]

for(;;) {// Ciclo eterno
if((adc > 0) & (adc < 100))
OCR1A = 100;
OCR1B = 100;
if(adc > 100)
OCR1A = 1000;
OCR1B = 1000;
}

Devia ser:

Código: [Seleccione]

for(;;) {// Ciclo eterno
if((adc > 0) & (adc < 100)){
   OCR1A = 100;
   OCR1B = 100;}

if(adc > 100) {
   OCR1A = 1000;
   OCR1B = 1000;}
}
Avr fanboy

Offline c3dr1c

  • Mini Robot
  • *
  • Mensagens: 854
Re: Projecto - Introdução à Robotica
« Responder #59 em: 02 de Março de 2013, 21:34 »
Obrigado senso, ja corrigi.

Troquei a breadboard por outra e troquei os bc337 por tip122 e ja consegui meter os motores a rodar :D

EDIT:
Roda mas nao roda continuamente, as vezes tem falhas...
« Última modificação: 02 de Março de 2013, 22:02 por c3dr1c »
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke