El formato para guardar con GCodeTools del Inkscape es: *.ngc (Linux CNC GCode)
=========================================================================================
Autor del proyecto:
Ian D. Miller --> iandouglas96engravR --> Raspberry Pi Powered Laser Engraver
(grabador láser) (2D)piPrint ----> Raspberry Pi 3D Printer Firmware
(impresora 3D) (3D)Link al vídeo del proyecto original
Y aquí los códigos para cargar en la Raspberry Pi y poder usar los GCODE (a mi me funcionó con la Pi 3 y el Raspbian).
https://github.com/iandouglas96 (proyecto engravR)
=========================================================================================
OpenWRT imprimiendo imágenes exportadas a *.C y convertidas a scripts (usando GPIO's para los drivers L293D)
Vídeo -= Pincha Aquí para verlo =- 
Haber encontrado este proyecto "engravR" supone la clave para tratar de portarlo a OpenWRT y hacerlo funcional.
El programa principal "
laserengraver" nos da la opción de configurar los pines a usar por cada motor y para cada bobina, el pin para el laser, en nuestro caso el Servo (GPIO 14 x ej) controlado por PWM ó en el peor de los casos por el script que hice, que siempre se puede mejorar, aunque no consigo tiempos exactos ni sé su duración con los que crear un PWM bueno, y por último da la resolución, que es importante, tuve que poner 0.025 en ambos ejes, porque si no Bart salía en modo chapita pa la camisa (minúsculo).
MX=Bipolar_Stepper_Motor(22,18,24,26); #pin number for a1,a2,b1,b2. a1 and a2 form coil A; b1 and b2 form coil B
MY=Bipolar_Stepper_Motor(10,8,12,16);
Laser_switch=3;
dx=0.075; #resolution in x direction. Unit: mm
dy=0.075; #resolution in y direction. Unit: mm
El código está escrito en Python, así que instalé el Python en el router y me dispuse a ejecutar el programa del engraver, aunque ya suponía que no iba a funcionar con la misma. El programa se ejecuta pero obviamente, las librerías incluidas no coinciden con el sistema OpenWRT
https://www.dropbox.com/sh/alc6mwpio8y5ab3/AAAJ8Ms8msGJBxoeJ6_YIE4Aa?dl=0
import RPi.GPIO as GPIOimport Motor_control
from Bipolar_Stepper_Motor_Class import Bipolar_Stepper_Motor
import timefrom numpy import pi, sin, cos, sqrt, arccos, arcsin
import argparseHe visto los códigos de las librerías y dentro de lo que puedo llegar a entender de programación (que es poco), creo que se pueden sustituir muchos de ellos por scripts "en principio" y luego en python.
RPi.GPIO --> Me bajé esta librería y el código es bien largo (está en el enlace de arriba), con los scripts de arriba mejorados no habría problema, ya que una vez los GPIO's está exportados al igual que los leds que ni hay que exportarlos, los podemos usar con echo > 1 y echo > 0 como siempre, no hay que comprobar si están libres, etc, como me parece que hace esa librería.
import time --> Tengo una duda sobre esta librería y OpenWRT, ya instalé el sleep, pero cómo se usan los timer del sistema? Sleep no es constante en el tiempo, ....con los triggers del kernel como comentó danitool o se puede hacer de otra forma
from numpy import pi, sin, cos, sqrt, arccos, arcsin import argparse --> Estas desconozco si son del python ¿?¿?
Para el control de los motores están estos 2 scripts sencillos que hice (están en el 1º mensaje):
3_pasos_gpio_der_e_izq_X (faltaría mejorarlos para que guarden en que bobina/s está situado para cuando retome el movimiento)
3_pasos_gpio_der_e_izq_Y
El láser es sólo 1 pin para activar o desactivarlo, hay que sustituirlo por el servo y manejarlo por PWM, el cual conseguí semi-controlarlo, aunque no es fiable al 100% y a veces gira al revés. Por lo que buscando en el repositorio "PWM" encontré esto:
Install kmod-pwm 3.10.49-1 Kernel module that implement a generic PWM API
Install kmod-pwm-gpio 3.10.49-1 Kernel module to models a single-channel PWM device using a timer and a GPIO pin
https://wiki.openwrt.org/doc/hardware/port.gpio/pwmSigo los pasos, instalo el "configfs":
Install kmod-fs-configfs 3.10.49-1 Kernel module for configfs support
Pero me da fallo y no aparece la carpeta pwm en SYS/CLASS/PWM
root@OpenWrt:/# mkdir /config
root@OpenWrt:/# mount -t configfs none /config
root@OpenWrt:/# mkdir /config/gpio_pwm/14
mkdir: can't create directory '/config/gpio_pwm/14': No such file or directory
root@OpenWrt:/# mkdir /config/gpio_pwm
mkdir: can't create directory '/config/gpio_pwm': Operation not permittedEl servo por lo que estoy mirando, al usar sólo 1 PIN y funcionar por PWM, se comporta así en función del movimiento que queramos:
Lo que hice para el servo, fué un simulacro del PWM, que no sé que combinación hice al principio que estaba descontrolado pero se movía bastante y con fuerza, pero modificando el código perdí esa combinación y ya sólo consigo que suba tal como se ve en el vídeo (pocos grados y tuve que hacer un bucle de 3), y bajando si que siempre ha sido igual, más rápido o más lento pero no da un salto brusco, el ruido que se oye, es porque lo controlo con el GPIO 14 que va conectado al relé de ADSL y se pone a toda pastilla.
LAN4="/sys/class/gpio/gpio14/value"
echo 0 > $LAN4
VUELTAS=`expr $1`
TIME=`expr $2`
DIRECCION=`expr $3`
COUNTER=$VUELTAS
if [ $DIRECCION -eq 1 ]
then
# ========== BAJAR BOLÍGRAFO ================
until [ $COUNTER -lt 1 ]; do
#LAN4
echo 0 > $LAN4
sleep $TIME
echo 1 > $LAN4
sleep 0.0001
let COUNTER-=1
done
fi
# ========== FIN BAJAR BOLIGRAFO ================
if [ $DIRECCION -eq 0 ]
then
# ========== SUBIR BOLÍGRAFO ================
until [ $COUNTER -lt 1 ]; do
#LAN4
echo 1 > $LAN4
sleep $TIME
echo 0 > $LAN4
sleep 0.018
echo 1 > $LAN4
sleep 0.001
let COUNTER-=1
echo 0 > $LAN4Por otra parte, siempre quedó en la PCB del HG556a el GPIO 14 un pin donde soldar, lo que trabaja a 5v (con un divisor de tensión listo) y no a 3,3 v que es lo típico de los GPIOs, y por lo que he visto el servo trabaja con el pin de señal a 5v (aunque me parece que tb lo hace a 3,3v o en la Raspi no hubiera funcionado si no)
Bueno de momento, esto es todo, si alguien puede dar luz a las sombras se lo agradecería
Sombras: - Tratar de sustituir las librerías o aclarar la función de cada una, o si el python las tiene y no hay que añadirla (time,
from numpy import pi, sin, cos, sqrt, arccos, arcsin, import argparse)
- PWM en OpenWRT para controlar el servo. Actualmente uso la 14.07 RC3
- Saber usar el timer sin tener que recompilar el kernel, por si hicieran falta hacer retardos exactos para crear el PWM o por si el "time" importado al código de python no fuera correcto.
En la biblioteca que pones, sólo veo una actuación directa de los pines del arduino, sobre los polos del motor,
dependiente de una constante de tiempo, que es derivada del reloj del arduino.
No hay interpretación del código G-CODE, por lo que supongo que esta interpretación estará hecha, por algún
programa, que le mande los datos al arduino.
Si no me equivoco, hace tiempo miré algo de esto, y el programa que interpreta los G-CODE para arduino, se llama
GRBL.
Buenas, tienes razón en todo, me da que con el overbooking que tenía en mi cabeza no asimiliba más conceptos y el código se vuelve matrix para mi (vaya que no me entero ni de lo que tengo delante).