Electroensaimada DIY, Raspberry Pi, Arduino ...
  • Home
  • Raspberry Pi
    • Básico >
      • Primeros pasos
      • IP estática
      • Montar Pendrive
      • Escritorio remoto
      • Conexión Wifi
      • no-ip
    • Intermedio >
      • Openelec Xbmc
      • OwnCloud
      • Torrent
      • Parpadeo led
      • Xbee
    • Avanzado >
      • SPI con WiringPi
      • ADC
      • Control temperatura
      • Alarma con aviso por mail
    • Raspberry Pi Expansion Board >
      • Control temperatura
      • Alarma con aviso por mail
  • Arduino
    • Motor paso a paso
    • Servomotor
    • PWM
    • Sensor Infrarrojo
    • SPI
    • I2C
    • Relé y LDR
    • Mando Radiocontrol
  • Blog
    • Contacto
  • CNC
    • Material
    • Codigo Maquina >
      • Leer el fichero
      • Decodificar fichero
      • Entorno de usuario
    • Movimiento >
      • Recta a trozos
      • Taladrar o cortar
    • Estructura
    • Estructura(2º Version)
    • Modelo CAD 3D
  • Software
    • Qt
    • Eagle >
      • Instalación y primeros pasos eagle
      • Librerías
  • Utilidades
  • Laboratorio
    • Fuente alimentación >
      • Material
      • Montaje

Recta a trozos

Al llegar a este punto ya tenemos la lectura del fichero y la interpretación de sus comandos. Es decir sabes con cada instrucción el punto objetivo al que queremos ir. Con esos datos y el punto inicial hay que movernos hacia allí. 

Hay varias maneras pero creo que la correcta es trazar una recta entre el punto inicial y el final. Dado que nos movemos por incrementos que al final son la resolución de nuestro motor paso a paso hay que trocear esa recta en pequeños punto por los cuales habrá que moverse. Esos puntos si se ven de cerca no son rectos sino que forman escalones, pero al alejarnos nos parecerá que han dibujado una recta.
Imagen
Recta a dibujar
Imagen
Zona a ver con zoom
Imagen
Movimiento Real con la resolución del motor
Si nos acercamos en vez de una recta son escalones pero dado que se supone que la resolución del motor es menor que el error que podemos permitir al final nos parecerá que ha trazado una recta. El movimiento a parte de producirse por partes, un motor y luego otro aunque sea en tiempos muy pequeños también se produce desigualado en cada eje.
Puede que se nos pida que nos movamos 20 en el eje X y 10 en el eje Y. Suponiendo que el mínimo paso que podemos hacer es 1, lo mejor es adaptar el movimiento del eje Y al del eje X. En mi caso de la siguiente manera.

El mínimo paso del eje X sera 1. Es decir en cada iteración incrementaremos uno.

El mínimo paso del eje Y sera 10/20=0.5. Dado que hemos dicho que el mínimo paso es 1, esta claro que no podemos hacer esos incrementos, de echo no lo haremos simplemente le sumaremos el valor a una variable que sea del tipo float(X,Y) y se la asignaremos a otra del tipo int(Sistema.X,Sistema.Y). Vamos a ver como seria la supuesta ejecución del programa.



Iteración=1
X=X+1  En este caso la variable valdrá 1.
Sistema.X=X
Y=Y+0.5 En este caso la variable valdrá 0.5 Como esta posición  no existe para el motor la variable Sistema.Y seguirá valiendo 0.
Sistema.Y=Y

Iteración=2

X=X+1  En este caso la variable valdrá 2.
Sistema.X=X
Y=Y+0.5 En este caso la variable valdrá 1 Ahora si que es posible acceder a esa posición con el motor por lo tanto Sistema.Y valdrá 1
Sistema.Y=Y


Cada cuantas iteraciones se actualice el valor de la variables mas pequeña dependerá de la relación entre las dos.

Aquí tenéis la implementación de código que realiza lo descrito.
Os dejo el proyecto entero y una demostración de su funcionamiento con el ejemplo anterior. La función Mover() esta en Sistema.c
cnc_121216.zip
File Size: 28 kb
File Type: zip
Descargar archivo

Imagen
Ejemplo con X=20 e Y=20.
Las unidades en que esta el fichero no son pasos del motor sino mm o pulgadas(tampoco eso sino menos), pero como aun no tengo el motor ni la relación de transmisión lo usare como si cada paso del motor fuese un mm. Es posible que mas adelante haya que mover mas de 1 paso para avanzar un mm.

Durante la ejecucción se guarda las posiciones por donde pasa el cabezal en un fichero, de esta manera vamos a ver cual es el recorrido real.
Se puede abrir con Matlab,Scilab,Octave o creo que incluso Excel. En ella se ve la trayectoria del fichero Borde.DIM que si recordamos era un cuadrado de perfil de una placa.
Imagen
Ahora vamos a comprobar el funcionamiento con algun diseño un poco mas complejo. En este caso un poligono con diversos lados.
Imagen
Diseño con programa de CAD
Imagen
Trayectoria calculada por el programa
Con tecnología de Crea tu propio sitio web único con plantillas personalizables.
  • Home
  • Raspberry Pi
    • Básico >
      • Primeros pasos
      • IP estática
      • Montar Pendrive
      • Escritorio remoto
      • Conexión Wifi
      • no-ip
    • Intermedio >
      • Openelec Xbmc
      • OwnCloud
      • Torrent
      • Parpadeo led
      • Xbee
    • Avanzado >
      • SPI con WiringPi
      • ADC
      • Control temperatura
      • Alarma con aviso por mail
    • Raspberry Pi Expansion Board >
      • Control temperatura
      • Alarma con aviso por mail
  • Arduino
    • Motor paso a paso
    • Servomotor
    • PWM
    • Sensor Infrarrojo
    • SPI
    • I2C
    • Relé y LDR
    • Mando Radiocontrol
  • Blog
    • Contacto
  • CNC
    • Material
    • Codigo Maquina >
      • Leer el fichero
      • Decodificar fichero
      • Entorno de usuario
    • Movimiento >
      • Recta a trozos
      • Taladrar o cortar
    • Estructura
    • Estructura(2º Version)
    • Modelo CAD 3D
  • Software
    • Qt
    • Eagle >
      • Instalación y primeros pasos eagle
      • Librerías
  • Utilidades
  • Laboratorio
    • Fuente alimentación >
      • Material
      • Montaje