LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: Pressure1 em 02 de Julho de 2012, 23:36
-
Boa noite, vim aqui pedir ajudar pois estou um pouco enrascado com um projecto final de curso, um braço robotico, o qual tem 2 tipos de movimentos, manual através de potenciómetros (o qual já consegui efectuar, sem ser os tremeliques que da de vez em quando aos servos) e também o modo automático... que não consigo fazer um ciclo automático (pouco andei de volta disto), outro meu problema e mesmo a mudança entre os 2 ciclos com um botão de 2 posições, eu sei que devia fazer rotinas, se fosse BASIC seria mais fácil a parte das sub-routinas, mas tenho um arduino, que foi fornecido pela escola um arduino uno. se alguém me poder ajudar... vou deixar em baixo o meu material do braço, esqueci-me de referir que o braço tem 4 eixos mais a garra
material:
5 potenciómetros lineares de 100k
2 motores hitec hs-422 deluxe
3 motores hitec hs-311 standart ( queimei 2 com um pequeno erro do meu devido ao meu estendal de fios. estou a procura de 2 urgentemente( já mandei mensagem ao njay visto que ele tem uma mini loja)
se poderem ajudar agradecia
cumprimentos
pressure1
-
O modo auto utilizas cinemática directa e inversa, para calcular as rotações/translacções das juntas e/ou a posição final do braço robotico?
-
bem se queres seja sinsero eu tou um bucado distante do arduino ainda, ta aqui o meu programa automatico, foi o que eu e o meu grupo fizemos, isto e de grau a grau...
#include <Servo.h>
Servo myservo; // create servo object to control a servo
Servo myservo2; // a maximum of eight servo objects can be created
Servo myservo3;
Servo myservo4;
Servo myservo5;
//int pos = 30; // variable to store the servo position
void setup()
{
myservo.attach(2); //1ªrotaçã
myservo2.attach(7); //2ª rotação
myservo3.attach(8);//rotação garra
myservo4.attach(9);//garra
myservo5.attach(3); //base
}
void loop() {
myservo5.write(100);
myservo.write(100);
myservo2.write(100);
myservo3.write(100);
}
void loop() ;
{
for(pos = 100; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 140; pos+=1) // goes from 180 degrees to 0 degrees
{
myservo5.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 0; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo2.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 90; pos+=1) // goes from 180 degrees to 0 degrees
{
myservo3.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo4.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 110; pos+=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 40; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo5.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 60; pos+=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 60; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo4.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 120; pos+=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
for(pos = 9; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo5.write(pos); // tell servo to go to position in variable 'pos'
delay(70); // waits 15ms for the servo to reach the position
}
tou um bucado atrapalhado e precisava de ajuda :X
-
Esquece eu tava a pensar noutra coisa. Eu tb nao percebo nada de arduino :P
-
niguem tem como me ajudar :X
-
Assim lido na diagonal.
Este codigo é o q funciona ou o que não funciona?
O que queres fazer mesmo?
E os teus ciclos FOR estão esquisitos, deveria de ser algo do genero:
for(i = 0; i < 100; i++)
{
faz qq coisa
}
Mas posso n ter percebido bem.
-
eu tenho um braço robotico, o qual tenho de fazer o modo manual e automatico esse codigo foi um teste de moviemnto grau a grau so que eu n consigo meter isso a trabalhar como deve ser, gostaria de saber fazer subrotinas e a chamalas para usar um botao de 2 posiçoes que e para alternar entre o manual e o automatico...
-
eu tenho um braço robotico, o qual tenho de fazer o modo manual e automatico esse codigo foi um teste de moviemnto grau a grau so que eu n consigo meter isso a trabalhar como deve ser, gostaria de saber fazer subrotinas e a chamalas para usar um botao de 2 posiçoes que e para alternar entre o manual e o automatico...
No IDE da arduino tens um sketch com um "sweep" dos servos que faz o que estas a tentar fazer ali.
Esses ciclos for não funcionam porque me parece que estão mal feitos.
Tenta executar os exemplos e depois diz o erro que dá.
-
pois capaz de tarem mal tirei isso da net, agora tenho um problema como alternar entre o modo manual e automatico, com um switch? pensei em sub routinas mas n sei como fazer :X alguma ideia?
-
pois capaz de tarem mal tirei isso da net, agora tenho um problema como alternar entre o modo manual e automatico, com um switch? pensei em sub routinas mas n sei como fazer :X alguma ideia?
A primeira ideia que me vem logo a cabeça é fazeres uns tutoriais de Arduino e aprenderes a fazer as "subrotinas" ou funções. Interessante tambem saberes trabalhar com interruptos ou pelo menos com inputs digitais. Portanto leres umas coisas acerca disso tambem é interessante.
Ninguem te pode fazer o codigo que queres e dificilmente iras encontrar o que quer que seja na internet sem sequer saberes o que estás a procura.
http://arduino.cc/en/Tutorial/HomePage (http://arduino.cc/en/Tutorial/HomePage)
Força.
-
so mais uma cena como e se chama as subroutinas no arudino e funçoes? e se poderes dizer como chamas as routinas se n souberes explicar e na boa.
-
so mais uma cena como e se chama as subroutinas no arudino e funçoes? e se poderes dizer como chamas as routinas se n souberes explicar e na boa.
O arduino utiliza uma linguagem chamada de processing que por sua vez vem do C que é uma linguagem construida com o principio Imperativo ou seja é compilada hierarquicamente de cima para baixo, portanto as funções tem de ser declaradas num header ou antes das mesmas serem chamadas no codigo.
Uma linguagem de programação é um conjunto de instruções que permitem o ser humano atraves de uma linguagem "natural" enviar comandos para que o processador os possa compreender ou seja traduzindo-os para linguagem de maquina ou seja codigo binario (0 e 1) ou principio Boleano.
Para que não fosse preciso escrever sempre as mesmas funções as linguagens de programação permitem, desde muito cedo e mesmo antes de serem orientadas a objectos, criar blocos de codigos chamados de funções e procedimentos sendo as funções um bloco de codigo que retorna um valor e um procedimento um bloco de codigo que não necessita realmente de retornar um valor.
Essas funções e procedimentos podem por sua vez ser reutilizadas o que nos leva ao aparecimento das liguagens por objectos as quais com a ajuda do polimorfismo e a hereditariedade agrupam o codigo em classes e se transformaram em ferramentas potentes e nos trazem aos dias de hoje onde qualquer pessoa, por menos conhecimentos que tenha as vezes, pode tal como tu programar um braço robotico.
Agora explica-me tu se souberes, como é que chegas ao final de um curso a tentar fazer um braço robotico sem sequer saber o que é uma função?
-
e simples eu n tive programação em c, apenas basic e disseram-me que era facil programar em c e era melhor e mais facil para os motores e segui para isto.
-
Presure1
O melhor que tens a fazer é como o Marvin te disse, fazeres uma dúzia de tutoriais de Arduino dos iniciais e quando estiveres dentro do processing procurares talvez um ou outro tutorial que envolva um ou mais servos, vais de certeza (progressivamente) perceber o que fazer para o teu projeto.
Só dessa maneira vais perceber o que estás a fazer, aparentemente estás aqui à procura de uma Receita de Arduino para o teu braço robótico... e isso é pouco provável que alguém tenha essa receita ou uma solução tirada da cartola.
Estou a dizer-te isto porque já tive umas (mais do que uma) respostas do Marvin iguais à tua e ele tem razão quando manda um gajo de volta com "Vai aprender o básico, bate com a cabeça, aprende e depois pergunta coisas especificas com o teu código para eu te puder ajudar..."
Não te assustes a malta aqui ajuda bastante mas tem de ser algo objetivo e tens de demonstrar interesse e que não seja só para teres um 18 no projeto sem perceberes de facto o que fizeste..
Um abraço, boa sorte e boa aprendizagem...
Tiago carita
www.dronetech.eu (http://www.dronetech.eu)
www.bluesharkstudio.com (http://www.bluesharkstudio.com)
PS este Post foi escrito ao abrigo do acordo ortográfico... acho eu...
-
obg pelas ajudas msm, eu sinseramente tava mesmo procura de um programa que pode-se adaptar ao meu braço mas encontrei maneira de resolver o problema , assim que tiver tudo pronto, posto aqui o programa e um pequeno video do braço, vamos ver