LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: Sangolica em 03 de Março de 2014, 14:37
-
Olá.
Isto é capaz de ser uma pergunta estúpida, mas vai aqui na mesma :x
Ora, o meu colega anterior fez um programa para controlar um motor servo, agora a ideia é trocar isso por uma ventoinha. Dá para usar o mesmo código? Há alguma diferença em programar para um e outro?
E já agora, alguém conhece algum esquema porreiro para ligar a ventoinha (4 pin) ao Arduino?
Thanks :)
-
Como é que se controla um servo? E como é que se controla uma ventoínha de 4 pinos? Tens que procurar por isso, pelo menos os pinouts das fichas, para depois se poder comparar e chegar a alguma conclusão.
-
À partida, e de forma genérica, é habitual se controlar os servomoteres por PWM -> modulação por largura de impulso
http://www.jameco.com/Jameco/workshop/howitworks/how-servo-motors-work.html (http://www.jameco.com/Jameco/workshop/howitworks/how-servo-motors-work.html)
Ventoinhas... daquelas utilizadas nos computadores?
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fsavedonthe.net%2Fimage%2F986%2Fpinout.png&hash=5a9299809cb0880e9969f07856006669a491d94f)
-
Pois, o servo não sei, porque não está aqui. A ventoinha sim, é de 4 pinos (ou seja, controlada por PWM. Cores preto, amarelo, verde e azul).
Quer dizer, que se seguir um esquema de um servo para arduino e usar o cabo azul da ventoinha como se fosse o pwm do servo, talvez funcione.
Bem, vamos experimentar.
Ponho aqui o código, só para o caso de vir a ser necessário.
void setup() {
Serial.begin(57600); // Set terminal Serial Port interface
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("Serial Communication Works");
if (PERIPHERAL_MOTOR_INSTALLED)
{
servoPos = 0;
myServo.attach(9); // attaches the servo on pin 9 to the servo object
Serial.println("Servo Attached");
}
(...)
void moveMotor(int mode)
{
switch(mode)
{
case 1: // Turn Left
myServo.write(30); // 30 turns to left
delay(1500);
break;
case 2: // Turn Right
myServo.write(120); // 120 turns to right
delay(1618);
break;
case 3:
myServo.write(120);
delay(100);
myServo.write(30);
delay(119);
break;
case 4:
myServo.write(120);
delay(200);
myServo.write(30);
delay(222);
break;
case 5:
myServo.write(120);
delay(300);
myServo.write(30);
delay(329);
break;
case 6:
break;
}
myServo.write(90); // stop servo // keep constant the servo
}
(...)
void loop() {
// First checks is there any incoming packet
int packetSize = Udp.parsePacket();
if(packetSize)
{
/* EXPECTED PACKET TYPE */
/*
packetBuffer
0: deviceID
1: peripheralID m (motor)
2: actionType: m (mode)
3: actionValue CHAR[2]
4: actionValue CHAR[1]
5: actionValue CHAR[0]
6: XXXXX - not used
*/
Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
Serial.print("Incoming UDP Packet: ");
Serial.println(packetBuffer);
char id = packetBuffer[0];
// if Incoming packet is for this device keep continue
if (id == DEVICE_ID)
{
char peripheralType = packetBuffer[1];
char actionType = packetBuffer[2];
char buffer[5];
buffer[0] = packetBuffer[3];
buffer[1] = packetBuffer[4];
buffer[2] = packetBuffer[5];
int modeValue;
modeValue = atoi(buffer);
// --- BRGIN ACTUATORS --- //
if (peripheralType == 'm') // if peripheral is motor
{
if (PERIPHERAL_MOTOR_INSTALLED)
{
if (actionType == 'l')
{
myServo.write(30);
delay(modeValue);
myServo.write(90);
}else if (actionType == 'r')
{
myServo.write(120);
delay(modeValue);
myServo.write(90);
}else if (actionType == 'm')
{
moveMotor(modeValue);
}else if (actionType == 's')
{
myServo.write(90);
}else
{
Serial.println("Unexpected UDP Character in UDP Packet.");
}
}else
{
Serial.println("Server asked to control the motor but motor is not installed.");
}
}
(...)
Omiti partes do código que não estão ligadas ao motor.
-
Nas ventoinhas o PWM para controlar a velocidade tem de ser na alimentação (12V).
O sense é uma saída que envia um numero de impulsos cada rotação, para informar o sistema da sua velocidade.
Se ligares os impulsos para um servo à saída sense de uma ventoinha na melhor hipótese não acontece nada, na pior podes queimar qualquer coisa.
Edit: Esqueçam, não reparei que eram ventoinhas de 4 pinos.
-
Não sabemos qual é a aplicação, pois não foi dita, no entanto há uma questão que não pode ser ignorada.
É certo que controlas ambos por PWM, mas controlas coisas diferentes: no servo controlas posição e na ventoínha velocidade. Impossível estar à espera do mesmo comportamento, a não ser que a ideia seja mesmo essa...
-
Acho que este post te pode ajudar
http://forum.arduino.cc/index.php?PHPSESSID=9gvjju3f1v2pkrdbqlk3igsff3&topic=155089.45 (http://forum.arduino.cc/index.php?PHPSESSID=9gvjju3f1v2pkrdbqlk3igsff3&topic=155089.45)
A ventoinha pode funcionar com uma frequência de PWM diferente da gerada pelo Arduino(tens de ver na datasheet da ventoinha) e também a tensão do pwm pode ser diferente de 0-5V.
Outra solução possível será um circuito deste tipo
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.rcrowley.com%2Fimages%2FArduinoTIP120motor.png&hash=c4576a306df4c726f13aa7b1fa51d78e477170c6)
Se ligares os 12V e GND ela funciona sem sinal de PWM? Se sim podes implementar esta solução tb.
-
pelo que percebi ele quer usar o arduino e usar o mm codigo para controlar uma ventoinha com o codigo que foi feito pra controlar um servo.. (acho que o moço quer fazer copy-past do codigo e usar o mm codigo feito pra um motor servo de modo a poder usar para uma ventoinha.. :P)
Se queres procurar um programa pra ventoinha e fazer logo copy-past, acho que se procurares no google, encontras de certeza mil e um codigos feitos!..
https://www.google.pt/search?q=code+arduino+pwm+fan+controller&client=firefox-a&hs=7s0&rls=org.mozilla:en-GB:official&channel=sb&source=lnms&tbm=isch&sa=X&ei=gGgWU8PAL8nTsgbJ94G4Aw&ved=0CAcQ_AUoAQ&biw=1280&bih=661 (https://www.google.pt/search?q=code+arduino+pwm+fan+controller&client=firefox-a&hs=7s0&rls=org.mozilla:en-GB:official&channel=sb&source=lnms&tbm=isch&sa=X&ei=gGgWU8PAL8nTsgbJ94G4Aw&ved=0CAcQ_AUoAQ&biw=1280&bih=661)
Convinha era saber qual é o codigo que tens do servo, qual servo era e qual o schematic, e na ventoinha, saber qual o tipo de ventoinha (5v, 12v)?... consumo maximo da ventoinha?
-
O servo usa PPM, não acho correcto chamar-lhe PWM porque leva a este tipo de confusões!
A ventoinha basta ver um sinal PWM naquele pino que regula a rotação.
-
Quero ver se aproveito o código já feito, porque encurtaram-me o prazo para ter isto pronto, e por isso deixei de poder tentar perceber mais isto.
O código eu coloquei num post mais acima.
O objectivo é ligar a ventoinha a um servidor e consoante os valores que vêm de lá, controlar a velocidade dela.
Do servo, não sei nada, pois já cá não andava quando eu vim para cá. A ventoinha é 3000rpm, 12V, 0.26A.
Tiobel: sim funciona, mas quero regular a velocidade. Tks
senso: obrigada, por acaso pelo que me explicaram aqui o servo também era por PWM. Pelos vistos, enganaram-me :x
-
senso: obrigada, por acaso pelo que me explicaram aqui o servo também era por PWM. Pelos vistos, enganaram-me :x
Não enganaram... É PWM, só que não usas dos 0% aos 100% de duty cycle, por isso há algumas teorias que dizem que por causa disso não é PWM, mas PPM. Quando a mim estão errados... Mas encontras muita fruta por essa net fora se quiseres ouvir os argumentos acerca dessa questão...
PPM puro também não é, porque falta um meio extra para sincronizar...