Autor Tema: Como conectar LinuxCNC a Arduino  (Leído 15635 veces)

Desconectado tio_gil

  • Global Moderator
  • Oficial 1ª
  • ****
  • Join Date: Sep 2009
  • Mensajes: 3099
  • Ubicación: Madrid - España
Re:Como conectar LinuxCNC a Arduino
« Respuesta #15 en: 15 Octubre 2013, 12:12 »
sois unos cachondos.  ;D ;D
Lo máximo en el PC es en MSdos (pero claro yo ahí controlo la máquina, no ella a mí, com en un Windows. En Linux no opino porque no se)
Los micros desde asembler a C (pero con la cabeza en assembler), así que miro bits, no palabras de 32 o 64 bits;
Así que deformación profesional de los años, cuando una memoria de 8Kx8 costaba 2000 pts y era ya la leche.

Flemming: EL TIEMPO, eso que siempre falta...  ;D

Me voy al TRAFIC para relajarme un poco, aver si veo algún colega y arreglamos el mundo  ;D
Torno Optimun D240x500 modificado, Fresa BF20L Vario modificada, mucha otra herramienta... y pocas ganas de trabajar !!

Desconectado fleming

  • Aprendiz
  • *
  • Join Date: Dic 2009
  • Mensajes: 737
  • Ubicación: BCN-A Coruña (cuando puedo)
Re:Como conectar LinuxCNC a Arduino
« Respuesta #16 en: 15 Octubre 2013, 12:24 »
... y ni de lejos hables de Kinemática, movimientos coordinados en 4 ejes, cambios de herramientas o compensaciones.

Pisa el freno, moreno!!! jajajaja
Yo estaba pensando en cosas más sencillas, máquinas estilo la BF20 (al nivel de CNCeado que hace aquí como las de Jmllosa), incluso el 4º eje del team rural, la de montoro, la de Argarrobo... y tantas otras sencillas... nada de cosas exóticas... incluso el cnceado de tornos como el de delichon


Saludo

Desconectado dedalo1111

  • Aprendiz
  • *
  • Join Date: Jul 2010
  • Mensajes: 918
  • Ubicación: Madrid
Re:Como conectar LinuxCNC a Arduino
« Respuesta #17 en: 15 Octubre 2013, 12:31 »
Ni aún cosas sencillas en su estado actual, piensa en una simple compensación de herramientas (los GCode que interpretan se limitan a G0 y G1) o una trayectoria 3D (incluyendo a Z, el planificador es un algoritmo "Bresenham" para trazar líneas 2D, Z para ellos es solo la altura de cada capa y no se calcula como trayectoria... es un movimiento independiente).

Bueno, muy sencillas muy sencillas si... cosas en 2D, plan router.

Salu2
Fresadora Wabeco F1200E CNC, Torno Warco WM-180, Sierra FEMI 780XL, cortadora porex FDC4

Desconectado Jbecerra

  • Aprendiz
  • *
  • Join Date: Feb 2011
  • Mensajes: 772
  • Ubicación: Mairena del Alcor, Sevilla.
Re:Como conectar LinuxCNC a Arduino
« Respuesta #18 en: 15 Octubre 2013, 15:19 »
Hola.

Parece que ya casi tengo terminado el eje Y donde pondre encima el pendulo invertido.

Intentare llevar a cabo la idea que empece en este post http://foro.metalaficion.com/index.php?topic=4842.msg57176#msg57176, todavia se llamaba EMC.

Espero usar el mismo codigo que hay el post y claro, que el pendulo se quede arriba y no abajo como tuve que resignarme anteriormente.

Me esta costando lo suyo conseguir que el eje quede "bien" sin ningun tipo de durezas al girar y que en todo el recorrido tenga la misma resistencia.

Que dificil me resulta mecanizar y centrar un simple casquillo  :'(


Torno chino 280 -700, Fresadora BF-20. Ceneados.Con Linuxcnc.

Pablo20061

  • Visitante
Re:Como conectar LinuxCNC a Arduino
« Respuesta #19 en: 29 Octubre 2013, 19:24 »
Muchas gracias por las orientaciones, la verdad es que con LinuxCNC no lo he logrado aún, intento seguir los pasos indicados en HAL2Arduino pero necesitaría unas pautas más detalladas porque me pierdo. Para resarcirme de la frustración he explorado el software de REPRAP y siguiendo un tutorial de instalación de Pronterface+Skeinforge en Windows 7 y reprap_new_firmware específico para arduino UNO los tres motores parece que funcionan bien.

Desconectado Jbecerra

  • Aprendiz
  • *
  • Join Date: Feb 2011
  • Mensajes: 772
  • Ubicación: Mairena del Alcor, Sevilla.
Re:Como conectar LinuxCNC a Arduino
« Respuesta #20 en: 31 Octubre 2013, 09:04 »
Hola.

Sigo haciendo las piezas del puzzle para el montaje del péndulo invertido aunque he cambiado algunos detalles.

No acababa de convencerme que fuera un potenciómetro el encargado de leer la posición del péndulo, lo he cambiado por un encoder de 500 pulsos.



Vista del péndulo:


Usare el arduino para leer desde 3 potenciómetros los valores que quiero asignar a los parámetros PID y así tener mas facilidad para "tunearlo"

He montado 3 potenciómetros de 10k en un panel, el cableado es fácil, consideramos que cada potenciómetro tiene los terminales positivo, señal y negativo, unir todos los positivos y llevarlo a +5 del arduino, igual con los negativos y nos quedan 3 cables que pongo en las 3 primeras entradas analógicas.





Un programa en el arduino lee las 3 señales y crea una palabra de las 3 lecturas poniéndole delante de cada lectura una P,D e I. ( ya esta hecho, no tiene porque ser asi,pero es que en esto de programar también estoy pegado ).

Código del programa en arduino:

/* Entradas analogicas, salidas serie. */

const int PinEntradaValorProporcional = A0;
const int PinEntradaValorIntegral = A1;
const int PinEntradaValorDerivativo = A2;


float ValorProporcional = 0;
float ValorIntegral = 0;
float ValorDerivativo = 0;

void setup() {
 
  Serial.begin(9600);
}

void loop()
{
  ValorProporcional = analogRead(PinEntradaValorProporcional); 
  ValorIntegral = analogRead(PinEntradaValorIntegral); 
  ValorDerivativo = analogRead(PinEntradaValorDerivativo); 
 

  Serial.print("P");
  Serial.print(ValorProporcional,0);
 
  Serial.print("I"); 
  Serial.print(ValorIntegral,0);
 
  Serial.print("D");
  Serial.println(ValorDerivativo,0);   

  delay(2);   
 
}


Después de cargar el programa en el arduino, este se queda en ejecución enviando por su puerto serie la palabra con los datos.

Ahora le toca el turno a un programa en python que sera llamado por el linuxcnc y leerá estos datos por el puerto serie. Hay que guardarlo en un directorio que este en el PATH del usuario, recomiendan usr/local/bin. y darle permiso de ejecución.

Pido perdón a los "pica-teclas" ;) y aviso a los incautos de que estos programas no son ejemplos a seguir ya que soy un "lacuentadelavieja"  y nunca aprobé esta dichosa asignatura.

Código en python para leer del puerto serie y pasar valores al HAL

#!/usr/bin/python
import hal, time, serial

h = hal.component("PID_Arduino")
h.newpin("P", hal.HAL_FLOAT, hal.HAL_OUT)
h.newpin("I", hal.HAL_FLOAT, hal.HAL_OUT)
h.newpin("D", hal.HAL_FLOAT, hal.HAL_OUT)
h.ready()

cadena = ""
pos_P = 0
pos_I = 0
pos_D = 0

val_P = 0
val_I = 0
val_D = 0

ser = serial.Serial('/dev/ttyACM0', 9600, bytesize=8, parity='N', stopbits=1, timeout=0, xonxoff=0, rtscts=0)

try:
   while 1:
      time.sleep(0.5)

      cadena = ser.readline()
      cadena = ser.readline()

      pos_P = cadena.find("P")
      pos_I = cadena.find("I")
      pos_D = cadena.find("D")

      val_P = int(cadena[1:(pos_I)])
      h['P']=val_P
      val_I = int(cadena[(pos_I+1):(pos_D)])
      h['I']=val_I
      val_D = int(cadena[(pos_D+1):])
      h['D']=val_D

      ser.flushInput()

except KeyboardInterrupt:
   raise SystemExit


Este programa al ser llamado desde el linuxcnc nos crea 3 pines para usarlos con el HAL que son "P", "I" y "D".

Desde el linuxcnc tan solo hay que cargarlo con la instrucción loadusr nombredelphyton y ya se puede usar sus pines.

Ahora le toca el turno al panel de control que se crea con un fichero .xml y donde aparecerán los valores leídos por el arduino para usarlos como parámetros del PID.
« última modificación: 31 Octubre 2013, 22:11 por Jbecerra »
Torno chino 280 -700, Fresadora BF-20. Ceneados.Con Linuxcnc.