Control remoto para tu impresora 3D con Raspberry Pi (1ª parte)

Una de las peores partes de imprimir en 3D, es el exceso de tiempo que requieren las impresiones, una pieza de un tamaño considerable puede tardar más de 8 o 10 horas, y lo más recomendable es tener la impresora vigilada, por si ocurriese algo inesperado, que estropease la impresión, para así cancelarla y poder apagar la impresora y evitar el gasto de material, electricidad y como no, poder evitar algún accidente por la temperatura acumulada en el extrusor y la cama de la impresora.

Captura de pantalla 2016-03-28 a las 13.00.53

En esta entrada, voy a mostraros como usando una Raspberry Pi y aprovechándonos de un gran proyecto llamado octoprint, vamos a crear un sistema de control total sobre la impresora, con el que podremos :

-Encender o apagar la impresora de forma remota.

-Enviarnos una notificación al móvil,cuando inicia, termina la impresión, en caso de error de la impresora, o cada cierto tiempo.

-Enviar un archivo he imprimirlo desde fuera de casa.

-Controlar el estado de la impresión en cualquier momento gracias a una webcam conectada a la Raspberry Pi

El material que vamos a necesitar para este proyecto es el siguiente:

  • Una impresora 3D .
  • Una Raspberry Pi ( Yo he usado la Pi model B , creo que es la segunda mas sencilla y barata ).
  • Una tarjeta SD de 8Gb de clase 10
  • Una Webcam
  • Dos módulos de relé para Raspberri Pi o arduino.
  • Conexión a internet.
  • Ganas de enredar un poco.

Pues vamos a empezar por partes, ya que el proceso va a ser un poco largo voy a realizar este tutorial en dos partes, la primera donde aprenderemos a instalar y configurar Octoprint para funcionar y activar los reles desde el propio entorno y la segunda, donde configuraremos las notificaciones y algún otro plugin interesante.

1º – Descargar he instalar la imagen de Octoprint en nuestra Raspberry Pi.

Visitaremos el sitio oficial de Octoprint, y descargaremos la imagen del software y la guardaremos ….

Captura de pantalla 2016-03-28 a las 13.10.08

Una vez descargada, descomprimiremos el archivo .img y lo cargaremos en una tarjeta SD para después ejecutarlo en nuestra Raspberry Pi.

Si usamos OSX usaremos ApplePi-Baker …

Introduciremos la tarjeta SD (aparece en el recuadro de la izq) y la seleccionamos…

Captura de pantalla 2016-03-28 a las 13.24.32

Pulsamos en «Restore Backup» y buscamos la imagen que acabamos de descomprimir…

Captura de pantalla 2016-03-28 a las 13.25.17

Y ahora toca esperar a que termine…

Captura de pantalla 2016-03-28 a las 13.25.53

Captura de pantalla 2016-03-28 a las 13.40.13

 

y en caso de usar Windows, tendremos que usar Win32 Disk Imager …

Abriremos la aplicación…

Captura de pantalla 2016-03-28 a las 13.43.32

Seleccionamos la imagen que acabamos de descomprimir…

Captura de pantalla 2016-03-28 a las 13.44.52

Seleccionamos la unidad donde este la tarjeta SD…

Captura de pantalla 2016-03-28 a las 13.45.11

Pinchamos en «Write» …

Captura de pantalla 2016-03-28 a las 13.45.21

Confirmamos que queremos continuar y a esperar que termine….

 

Una vez cargada la imagen en la tarjeta SD, ya podemos introducirla en nuestra Raspberry Pi, conectarla a una TV y con un teclado USB y cable de red ( para la configuración inicial ) y encenderla…

Una vez arrancada saldrá el siguiente menu, del que vamos a configurar un par de cosas…

En primer lugar, seleccionaremos la primera opción «Expand Filesystem» …

Captura de pantalla 2016-03-28 a las 14.38.37

Cuando haya terminado, aparecerá lo siguiente.. y daremos «OK»..

Captura de pantalla 2016-03-28 a las 14.42.16

Lo siguiente que vamos a hacer, es cambiar la contraseña de usuario, seleccionando la segunda opción «Change User Password» …

Captura de pantalla 2016-03-28 a las 14.42.53

Captura de pantalla 2016-03-28 a las 14.45.45

Nos saldrá una advertencia que deberemos aceptar… y seguidamente nos pedirá que escribamos la contraseña nueva dos veces..


Ahora vamos a configurar la region, idioma y teclado… seleccionando la opción cuatro «Internationalisation Options»

Captura de pantalla 2016-03-28 a las 14.47.33

Dentro de este menú, nos aparecerán tres opciones más…Así que seleccionaremos la primera… » Change Locale»

Captura de pantalla 2016-03-28 a las 14.48.20

De la lista buscaremos las del idioma que nos corresponda… en mi caso Español…

IMG_1251

Aceptaremos  se añadirán a la lista, y seleccionaremos es_ES.UTF-8

IMG_1252



Continuaremos con la zona horario » Change Timezone»

IMG_1256

Seleccionaremos «Europa » ( en mi caso )

IMG_1254

Y «Madrid»…

IMG_1255

Ahora ya podemos pulsar «Finish» y reiniciar la Raspberry Pi…



Ya tenemos un primer paso … para comprobar si esta bien configurada y esta funcionando… podemos teclear en el navegador la dirección IP de nuestra Raspberry (Aparecerá en las lineas de texto al arrancar la Raspberry)..

Si todo esta bien, al cargar la pagina por primera vez, aparecerán las opciones de control de acceso a la aplicación de Octoprint…

Captura de pantalla 2016-03-28 a las 14.57.53

En esta ventana, pondremos un usuario y contraseña para el acceso, que NO son las mismas que las de acceso a la Raspberry…

Captura de pantalla 2016-03-28 a las 15.00.17

 

Pincharemos en «Keep Access Control Enabled» para activarlo…

Ahora ya podemos acceder haciendo Login en la parte superior derecha…

Captura de pantalla 2016-03-28 a las 15.01.37

En mi caso, al hacer Login, me ha aparecido un mensaje de actualización…

Captura de pantalla 2016-03-28 a las 15.03.04

 

Así que vamos a actualizar…. Pincharemos en «Update now» y confirmando el siguiente mensaje…

Una vez actualizado.. ya tenemos el sistema listo para acceder a el… pero antes vamos a apagarlo para conectar el adaptador wifi configurarlo…

Captura de pantalla 2016-03-28 a las 15.53.13

 

Una vez apagado , ya podemos conectar la webcam y la impresora… y encenderlo de nuevo, acceder al entorno de octoprint, y conectarnos a nuestra impresora para empezar a trabajar…

Iniciaremos sesión, seleccionaremos el puerto de conexión y la velocidad (250000 por defecto en Marlin)…

Y ya podremos controlar la impresora de forma remota…

En este punto , recomiendo enredar un poco con el entorno para que podáis ver lo sencillo que es.

En el lado izquierdo, se ven las opciones de conexión con la impresora, y el gestor de archivos, para que podamos subirlos desde el PC o bien poder seleccionar los que tengamos en la tarjeta SD de la impresora, y en la parte derecha, hay 5 pestañas que podemos seleccionar.

Temperature:

Como su nombre indica, muestra en una gráfica el estado de la temperatura del Hotend y de la cama.

Captura de pantalla 2016-03-28 a las 17.01.05

Control:

Muestra una ventana con la imagen de la webcam, y los botones para controlar los motores de forma manual .

Captura de pantalla 2016-03-31 a las 19.11.22

GCode Viewer:

Muestra a tiempo real el estado de la impresión capa a capa.

Captura de pantalla 2016-03-31 a las 19.11.32

 

Terminal:

Muestra la posición y temperatura en cada momento.

Captura de pantalla 2016-03-31 a las 19.11.43

Timelapse Configuration:

Aqui podemos programar una grabación en timelapse de la impresión que estamos haciendo, los videos resultantes son muy chulos.

 

Captura de pantalla 2016-03-31 a las 19.11.56

 

Solo acabamos de empezar, hemos instalado el entorno y ya podemos controlar la impresora ( que no es poco ), a partir de ahora vamos a añadirle alguna opciones… y vamos a empezar por añadir dos módulos de relé a la placa Raspberry , para poder encender y apagar la impresora, y también para poder encender y apagar una luz a 12v conectada a la fuente de alimentación de la impresora…

En primer lugar, voy a mostrar los pines GPIO de los que disponemos en la Raspberry PI…

687474703a2f2f656c696e75782e6f72672f696d616765732f322f32612f4750494f732e706e67

 

En nuestro caso, vamos usar 2 salidas GPIO , la 17 y la 23 y para poder controlarlas tendremos que instalar una librería para poder controlarlos…. empecemos….

Nos conectaremos a nuestra Raspberry o bien a través de la TV o bien a través de un terminal (  putty en windows)

Usuario : Pi

Password : La que hayas puesto en la configuración inicial de la Raspberry ( raspberry por defecto)

Teclearemos los siguientes comandos para instalar la librería wiringPi

  • sudo apt-get install git-core
  • sudo apt-get update
  • sudo apt-get upgrade
  • git clone git://git.drogon.net/wiringPi
  • cd wiringPi
  • git pull origin
  • ./build

Ahora ya podemos controlar los GPIO de la Raspberry Pi… Vamos a probar… podemos usar un led con una resistencia de 1K conectada a los GPIO 17 y 23 y probar con los siguientes comandos…

Para configurar los pines GPIO 17 y 23 como salida…

  • gpio -g mode 23 out
  • gpio -g mode 17 out

Para encender los led

  • gpio -g write 23 1
  • gpio -g write 17 1

Para apagar los led

  • gpio -g write 23 0
  • gpio -g write 17 0

Una vez comprobado que podemos controlarlos, procederemos a configurar Octoprint para poder añadir el control al menu «System».

En primer lugar definiremos como salida los pines en el archivo /etc/init.d/octoprint en la linea 77 , la linea anterior a RETVAL=»$?»

editaremos el archivo con el comando.

  • sudo nano /etc/init.d/octoprint

y añadiremos lo siguiente en la linea 77 y 78

  • gpio export 17 out
  • gpio export 23 out

Ahora editaremos otro archivo para añadir las opciones al menu «System».

  • cd /
  • cd ./home/pi/.octoprint
  • sudo nano config.yaml

En la linea 45 antes de «webcam» añadiremos lo siguiente…

  - action: printer on
    command: gpio -g write 17 1
    name: Turn on the printer
  - action: printer off
    command: gpio -g write 17 0
    confirm: You are about to turn off the printer.
    name: Turn off the printer
  - action: Ligth on
    command: gpio -g write 23 1
    name: Turn on the ligth  
  - action: Ligth off
    command: gpio -g write 23 0
    name: Turn off the ligth 

Guardaremos el archivo y reiniciaremos la Raspberry con el comando

    sudo reboot

 

Aqui dejo el código de mi archivo config.yalm, las keys personales de configuración las ha cambiado, así que deberíais de poner las vuestras.. ( Key , upnpUuid, token, secretkey )

 

Ahora en el menu «System» ya aparecerán las nuevas opciones…

Captura de pantalla 2016-03-28 a las 18.19.04

Que podemos probar con los led pulsando sobre ellas…

Hemos probado usando unos led, pero realmente lo que queremos es usar dos módulos de relé para controlar algo con mas potencia…

modulo-rele-relay-de-1-canal-5v-10a-arduino-pic-avr-robotica-17851-MLA20145775313_082014-OEn este punto me he encontrado con un par de problemas, el primero ha sido que los dos módulos de relé que yo he comprado no son compatibles con calidad de 3,3v ( que es la señal GPIO de la placa Raspberry PI) y segundo la activación del relé es por nivel bajo, es decir cuando la salida GPIO esta a «0» el relé esta activado, y cuando la salida esta a «1» el relé se desactiva.

Así que para solucionarlo, he realizado un sencillo esquema con dos transistores y cuatro resistencias, para poder modificar la salida GPIO de la placa Raspberry Pi a 5V y para invertir  los niveles lógicos.

PD: Los relés del esquema no son los mismos que los de la foto de arriba, son los que vienen con el programa.

 

adaptador_niveles

De todas maneras, una vez realizado este pequeño esquema para convertir los niveles para que funcione el módulo de relé, se podría poner un relé normal de 5V y ahorrarnos el módulo.

reles raspberry_bb

 

 

Para conectar los módulos de relé, vamos a modificar el cable de alimentación de la Raspberry Pi para poder alimentar los dos módulos usando el mismo alimentador…

Realizaremos un corte en el lado del conector de la Raspberry dejando a la vista los cables rojo y negro …
Ahora, vamos a preparar dos latiguillos de la medida que necesitéis ( yo voy a poner los dos relés junto a la fuente de alimentación, así que voy a cortarlos de unos 40 cm) de cable de 3 hilos, voy a usar cable de audio que tiene, malla para el negativo, rojo para el positivo y blanco para la señal de activación ,y pelaremos un extremo,

img_1263

img_1264
Juntaremos las mallas y las soldaremos al cable negro de alimentación y juntaremos los rojos y los soldaremos al cable rojo de la alimentación .

Al otro extremos de cada cable vamos a soldar un conector hembra de tres pines que conectaremos al módulo de relé.

IMG_1269

Una vez todo soldado colocaremos los módulos donde a nosotros nos venga bien en la propia impresora y conectaremos la entrada de 220v a uno de los relés y la luz de 12v ( he usado una tira de led ) al otro relé.

IMG_1266

 

IMG_1267

 

IMG_1268

 

IMG_1270

 

En la siguiente entrada, veremos como configurar nuestro servidor de impresión para que nos envíe mensajes de estado de como va la impresión, usando telegram. También lo configuraremos para que nos actualice nuestra DNS para usar un servicio como Dyndns y poder acceder desde fuera de nuestra red, y alguna cosa más…

 

DonacionPayPal

47 Respuestas a “Control remoto para tu impresora 3D con Raspberry Pi (1ª parte)

  1. Pingback: Control remoto para tu impresora 3D con Raspberry Pi (2ª parte) |

  2. Enhorabuena, quiero instalar el Octoprint en mi 3D, he estado viendo por encima todo lo que pones y me ha aclarado las ideas muchísimo, seguiré tu tutorial a ver que tal se me dá, Muchas gracias!!!!

  3. holaaa buen tutoo unas cuestiones en :

    – action: Ligth on esta bien pero el off lo pones como print…

    yo tengo reles que el disparo lo controla bien mi rpi 3 model b sin necesidad de poner transitores ni resistencias

  4. Has tenido suerte, hay muchos módulos de relé a 5v que con los 3,3v de la raspberry no se activan, por eso le añadí el transistor, para hacer el ajuste de nivel a 5 v

  5. genial, pues si he tenido suerte probe por probar… porfa lisergio cambia si puedes lo de la instrucion off de la luz que pones en tu tuto que esta mal escrito

    muchas gracias de nuevo este tuto lo sigue mucha gente ya que es de los pocos de octoprint en español y tan completo¡¡¡

  6. Hola, he seguido tu tutorial pero he tenido problemas a la hora de imprimir. En el LCD de la impresora pone IDLE y se queda la raspberry que no puedo acceder a ella. No responde a las llamadas a la IP. Otras veces se queda parada y pone stepper disable. He preparado un archivo log de la raspberry por si puedes verlo.

    https://dl.dropboxusercontent.com/u/42986267/octoprint.log.html

    La impresora es una 3dcstar con repetier host 0.91 y desde la SD si imprime bien, de hecho tuve que hacerlo asi para poder tener la pieza. Uso una webcam Microsoft hd-3000 y me llega la imagen con mucho LAG. no se si tendrá que ver.

  7. parece que el problema, es que la raspberry se cuelga, y por lo tanto la comunicación con la impresora también… comprueba el cableado de la raspberry, y si se te cuelga también sin estar conectada a la impresora…

  8. Hola, muchas gracias por el tutorial. Me gustaría hacer lo mismo para controlar mi impresora 3D, pero tengo algunas dudas.
    El cable de la raspberry Pi que yo tengo, no tiene tantos hilos como el que tu muestras, ¿es posible?¿Qué tipo de alimentador es?
    Por otra parte, he visto que tienes como una fuente de alimentación (en la foto debajo de los relés). ¿La has comprado aparte?

  9. El cable de alimentacion es un microusb normal, por eso tiene 4 hilos , y la fuente de debajo de los reles es la de la impresora ..

  10. Pingback: Tutorial. OctoPrint, control remoto de impresora 3D (Parte 1)

  11. Buenas noches 🙂

    Llevo días queriendo ponerme y hoy he dicho, ¡al lío!

    Cuando instalo OctoPrint va todo genial, pero es tocar los archivos de configuración para los GPIO y añadir las opciones a la interfaz web, reiniciar y deja de funcionar el servicio web… he mirado los logs y no hay ningún error aparente, ¿quizás estoy poniendo mal las cosas en los archivos de configuración? te adjunto unas capturas de los archivos a ver si ves algo raro…

    https://www.dropbox.com/sh/jk226iuxukskemf/AAAwzUEAUikyVP-y63jkGn99a?dl=0

    Gracias!

  12. Sí, he probado con el relé que tengo por aquí y funcionan perfectamente, incluso creo que llegué a probar después de reiniciar, ya que el sistema arranca, lo que no llega a arrancar es el servicio octoprint, ni reiniciándolo, ni parándolo y arrancándolo de nuevo.

    Tras esto, probé a devolver los archivos a su estado original, asegurarme que se guardaron y reiniciar y ni aun así se volvió a ejecutar el servicio

  13. Te adjunto las últimas lineas del archivo de configuración de la versión que estoy usando ahora…

    server:
    commands:
    serverRestartCommand: sudo service octoprint restart
    systemRestartCommand: sudo shutdown -r now
    systemShutdownCommand: sudo shutdown -h now
    firstRun: false
    secretKey: ———————————–
    seenWizards:
    cura: null
    telegram: 1
    system:
    actions:
    – action: printer on
    command: gpio -g write 17 1
    name: Encender la impresora
    – action: printer off
    command: gpio -g write 17 0
    confirm: ESTAS SEGURO DE APAGAR LA IMPRESORA?.
    name: Apagar la impresora
    temperature:
    profiles:
    – bed: ’90’
    extruder: ‘240’
    name: ABS
    – bed: 60
    extruder: ‘200’
    name: PLA
    webcam:
    ffmpeg: /usr/bin/avconv
    snapshot: http://127.0.0.1:8080/?action=snapshot
    stream: /webcam/?action=stream

  14. Pues nada, no hay forma, es editar el config.yaml y se va todo a pique, aparece la pantalla de «The OctoPrint server is currently not running, compruebo que el proceso no está ejecutándose, lo reinicio y tampoco va, miro el log de octoprint y nada raro, desde el reinicio… he probado con el código que hay en el post, y en el que me has pegado en el comentario, y tampoco, no sé que puede estar pasando uhm…

  15. Pingback: Tutorial Octoprint: Controlar nuestra impresora 3D (Parte 2) - Mr. Moviliano

  16. Te lo has currado muy bien. Pero lo veo muy complicado de hacer. Me pierdo un poco porque no tengo ni los conocimientos basicos. Solo tengo las ganas de hacerlo jeje.
    Es posible o te has planteado hacerlo tu para los demas cobrando lo que pidieras???
    Como yo seguramente mas personas estarian interesadas

  17. Gracias… pero te aseguro que cuando cobras lo que cuesta hacerlo, a la gente ya no esta tan interesada…
    Te lo aseguro…
    De todas formas, no es tan complicado, solo hay que seguir los pasos del tutorial…
    Suerte…

  18. Lo explicaste bastante bie. Pero aun así me veo torpe para hacer este tipo de cosas. De donde eres tu?? Yo te aseguro que si te pagaria por hacermelo

  19. Hola,gracias por hacer estas cosas.para muchos como yo seria impensable desarrollar determinados proyectos sin estas valiosisimas e imprescindibles entradas.
    Para ahorrar tiempo y explicaciones decir que me sucede lo mismo que a #haruijima ,cada vez que edito el archivo config.yaml OctoPrint server no arranca.
    Decir que los GPIO funcionan pues el sistema si arranca, verificando el log de arranque me dice «Error parsing the configuration file, it appears to be invalid YAML. The parser reported an error on line 70, column 0.
    There was a fatal error starting up OctoPrint.».
    Bueno depende de como lo edite,pero siempre en la linea en que comienza «– action: printer on».
    Es como si la sintaxis estuviese mal escrita,no se ,me pierdo,escribo esto por si la cosa fuese una simple tonteria en la que no caigo.
    Lo dicho,muchas muchas gracias por todo lo que haces,lo que tu haces nos hace mejores

  20. Gracias por responder,lo de un solo GPIO es igual,de hecho los leds en mi caso carecen de importancia.
    Comentar que cuando borro o comento los comandos para añadir las opciones al menú “System» todo vuelve a la normalidad al contrario del amigo #haruijima .
    También decir que copio y pego,lo único que hice ,aconsejado por alguien que tuvo fallos por el pegado de comandos,edite a mano los guiones en el propio Nano ,no obstante tampoco funciono

  21. Perfecto,funciono,sigo sin saber por que,pero funciono,pero bueno tampoco se como funcionan muchas cosas y soy feliz igual 🙂 .
    Quedo enormemente agradecido,que Dios te lo pague o te lo deba en gloria.
    Muchísimas gracias y por supuesto a tu completa disposición para yo que yo te pueda servir

  22. Saludos excelente tutorial, todo me ha salido my bien la unica duda que tengo es donde conectar el modulo de rele (consegui uno de 4 reles) tengo pensado conectarlo en el cable rojo q sale de la fuente en un lado del rele y del otro lado un cable q vaya a la misma entrada de la fuente estara bien? de electronica no se nada

  23. El sistema esta pensado para cortar la tensión de 220v de la fuente de alimentación , la mejor opción seria cortar uno de los dos cables que llegan a la fuente ( el de Fase a ser posible ) e intercalar los contactos del rele…

  24. saludos, muy buen tutorial,creo que me funciona todo, incluso el telegram,
    solo comentar,que mi rele doble, tambien es por bajo nivel y lo he solucionado, con un script de python y puesto en el crontab, para que cuando arranque la rpi, ponga en estado alto, con un retardo de 1 seg, los gpio 17 y 23.
    quedaria algo asi:

    sudo nano /home/pi/rele.py

    import RPi.GPIO as GPIO
    import time
    import os

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(03, GPIO.IN, pull_up_down = GPIO.PUD_UP)
    GPIO.setup(17, GPIO.OUT) ## GPIO 17 como salida
    GPIO.setup(23, GPIO.OUT) ## GPIO 27 como salida
    time.sleep(1)
    GPIO.output(17, True)
    GPIO.output(23, True)

    #lo guardamos con ctrl+o y salimos con crtl+x

    y ahora editamos el cron
    sudo nano crontab -e

    y escribimos al final:
    @reboot sudo python /home/pi/rele.py

    ctrl+o para guardar y crtrl+x para salir.

    reiniciamos y al arrancar la rpi,el rele se quedara listo para que le enviemos la señal por gpio,
    eso si ahora es al reves, para encender la impresora o la luz, hay que mandarle un 0 , no un 1, y para apagar le enviamos un 1

    saludos
    javier

  25. Hola buenas, muchas gracias al creador de este blog ya que me ayudó bastante a hacer el setup. A quién le interese y si te gusta y quieres explicarlo mejor , hay un plugin en Octoprint que permite convertir unos GCODES personalizados (OCTOXX: OCTO1, OCTO2,…) en ejecuciones de scripts de la Raspberry que lleven los comandos explicados aquí.

    Por lo que poniéndolos en la parte del «END GCODE» en Cura o el Slicer que utilicéis, me ayudan a que la impresora se apague sola cuando acabe de imprimir la pieza, muy útil sobre todo por las noches. (No lo he probado aún pero creo que también la encenderían si lo pongo en el «START GCODE», casi automatizando todo el proceso)

    Además, creo que no lo he leído aquí ni en la segunda parte o a lo mejor me lo he saltado, pero quiero indicar que gracias al pluggin de Telegram se pueden mandar los comandos directamente ya que aparecen en /sys.

    Si alguien tiene dudas a veces me paso por este blog , aunque seguro que el autor podrá responderlas sin duda.

    Un saludo.

  26. Hola, que tal? Gracias por el artículo
    Me queda una duda, este software en caso de interrupción por corte de luz te permite ver la línea de G-code en que se ha interrumpido..🤷‍♂️?
    Gracias d antemano por tu respuesta

  27. hola funciona perfecto pero seria posible agregar un botón físico para encender y a apagar tanto la impresora como la iluminación?, logre hacerlo por separado pero no en simultaneo.

Deja un comentario