Carolina Herrero nos propone un sistema de un sistema automatizado para riego que ademas no precisa de conexión a Internet porque todas las medidas se gestionan de forma interna y por tanto no precisan ningún servicio de IoT para su funcionamiento ( como por ejemplo Cayenne.com del que hemos hablado numerosas ocasiones en este blog)
La idea principal de Carolina era construir un sistema de riego automático, controlado por diferentes tipos de sensores, de forma que el sistema tomase decisiones de modo automático guiándose en función de las condiciones del ambiente y la necesidad de riego que tiene la tierra según el grado de humedad de modo que cuando las condiciones fuesen óptimas comenzase el riego(, siempre y cuando exista agua en el depósito)
Además su creadora también quería que los datos se almacenaran de forma periódica en una base de datos local mySQL , y a través de una aplicación Web, con sus credenciales poder acceder y ver un histórico gráfico de las mediciones de los sensores .
Para conseguir esto básicamente ha utilizado:
Varios Sensores
Una placa Microcontroladora
Un Servidor local
Sensores
El sistema utiliza diferentes tipos de sensores, porque se requiere controlar diversos valores como son :
Valores de la humedad de la tierra para lo que se usa un sensor conocido como YL-69, que consiste en dos picas que se encuentran enterradas en tierra de manera que controlando la resistencia de la tierra se puede conocer la humedad.Esta es una herramienta indispensable para un jardín conectado pues por si mismo nos puede recordar que debe regar las plantas de interior o para monitorear la humedad del suelo en su jardín . Se alimenta a: 3.3V-5V y el modo de módulo de salida dual, salida digital, salida analógica más precisa
Para recoger los valores de humedad y temperatura ambiente se utiliza un simple sensor DHT11 (si bien un DHT22 hubiese sido mas recomendable por su mayor precisión , aunque es cierto que su coste es algo mayor)
De la temperatura del suelo se encarga el DS18B20, un sensor sumergible y resistente a la humedad, que se usará para controlar la temperatura de la tierra.
Por seguridad, y para evitar que las bombas funcionen en vacío, y puedan dañarse, es imprescindible controlar el nivel de agua que hay en el depósito, y estos se consigue con un sensor de nivel .Estos sensores pueden medir humedad entre el 10% -90% sin condensación con un consumo de menos de 20mA y ofreciendo una salida analógica con un área de detección de 40mmx16mm
Por último controlar si hay luz o no, para evitar el riego de noches se ha usado un sensor de luz, también conocido como resistencia LDR.
Arduino
El encargado de recoger todos los valores procedentes de los sensores descritos y tomar las acciones necesarias es una placa sistema Arduino que ha sido programado para recoger datos, actuar en función de los valores de dichos datos, y en última instancia se encarga de mandarlos a un servidor ( una Raspberry Pi) para su seguimiento estadístico de modo que en principio si no nos interesa seguir esa traza perfectamente el proyecto quedaría únicamente con esta placa y sus sensores .
Aquí su autora comparte una parte del código encargado de recoger los datos, y enviarlos por el puerto serie.
//Función que se encarga de leer datos de todos los sensores
void leer_datos_sensores(){
valor_ha = dht.readHumidity();//Se lee la humedad en el ambiente
valor_ta = dht.readTemperature();//Se lee la temperatura en el ambiente
valor_ht1 = analogRead(hum_tierra1);//Se lee humedad en tierra en la zona1
valor_na = analogRead(nivel_agua);//Se mide el nivel de agua existente en el depósito
valor_luz = analogRead(luz_ldr);//Se lee la luz
DS18B20.requestTemperatures();//Prepara el sensor para la lectura
valor_tt1 = DS18B20.getTempCByIndex(0);//Se lee la temperatura en tierra en la zona 1
}
//Función para enviar valores de los sensores por el puerto serie
void enviar_datos(){
Serial.print(valor_ha);Serial.print(«,»);
Serial.print(valor_ta);Serial.print(«,»);
Serial.print(valor_ht1);Serial.print(«,»);
Serial.print(valor_na);Serial.print(«,»);
Serial.print(valor_luz);Serial.print(«,»);
Serial.print(valor_tt1);Serial.print(«,»);
}
Servidor web y BBDD
Como servidor no podía ser de otra manera que optar por una Raspberry PI conRaspbian, basada en Debian y que hace de servidor Base de Datos, y además también de de Servidor Web.
Como servidor web se usa el Servidor Web Apache funcionando junto con MySQL como servidor de BBDD.
Además para que Arduino y Raspberry se comuniquen entre sí, se requiere un script en Python, que se encarga de recibir los datos por el puerto Serie que Arduino está enviando de forma constante .
Básicamente este script recibe los datos de Arduino , se conecta con la BBDD MySql e inserta los datos.
#!/usr/bin/python
#-*- coding: UTF-8 -*-
import MySQLdb
import serial
# Establecemos la conexión con la base de datos
bd = MySQLdb.connect(«host»,«user»,«pass»,«db»)
# Preparamos el cursor que nos va a ayudar a realizar las operaciones con la base de datos
cursor = bd.cursor()
#Inicia la comunicación con el puerto serie
PuertoSerie= serial.Serial(‘/dev/ttyACM0’,9600)
#Lectura de datos
sArduino = PuertoSerie.readline()
#Separa la cadena en valores, cada valor hasta la coma es almacenado en una variable
#Almacenamos los valores en tabla datos de la base de datos huerto
sql1=«INSERT INTO datos_huerto(hum_ambiente,temp_ambiente,hum_tierra,nivel_agua,luz,temp_tierra,id_zona) VALUES (%f,%f,%d,%d,%d,%f,%d)» % (ha,ta,ht1,na,luz,tt1,zona1)
try:
# Ejecutamos el comando
cursor.execute(sql1)
bd.commit()
except:
print«Error»
bd.rollback()
# Nos desconectamos de la base de datos
bd.close()
Para se hacer esto de forma periódica pero no constante, puede usarse la herramienta Cron integrada en Raspbian, de manera que cada “X” minutos se ejecute el script en Python.
Para la parte de visualización de los datos la autora opto por o una aplicación Web sencilla, programada n Php, junto con pequeñas funciones en Javascript para controlar y validar ciertos campos. En el aspecto visual uso el framework Bootstrap, asi como la librería HighCharts para la creación de gráficas y así conseguir visualización de los datos muy atractiva.
Es muy importante que si le damos salida a internet a La Rasberry PI nos cercioremos de que está segura. Para ello es interesante :
Modificar el archivo de configuración de Apache, para que ante un ataque muestre la mínima información posible sobre el servido
Encriptar el tráfico entre cliente y servidor mediante certificados SSL
Forzar para que el acceso siempre sea seguro vía peticiones del tipo HTTPS.
Finalmente esta es la lista de componentes utilizados para el sistema:
Recipientes para depósito de agua y electrónica x2
Tarjeta SD para Raspberry PI x1
Tubos de goteo x2
Plantasx 6
Fuente de alimentación 220V x1
Le damos nuestra mas sincera enhorabuena a Laura por su sistema que animamos a que siga perfeccionando así como compartiendo con la comunidad todos sus progresos
Kemal Ficici nos demuestra con su proyecto escrito en python, que por cierto ha publicado con su código completo en github, como es posible usando la librería OpenCv construir un detector de carril que incluso maneja carriles con curvas.
A pesar del gran avance , sin embargo el autor reconoce que la salida de su sistema todavía se ve afectada por sombras y drásticos cambios en la textura de la carretera lo cual invalida en gran parte su resultado , lo cual le hace pensar en futuras actualizaciones de su proyecto haciendo uso de técnicas de aprendizaje automático para llegar a desarrollar un sistema de detección de vehículo e increíblemente robusto carril.
En el siguiente video podemos ver el resultado de su trabajo:
En cualquier escenario de conducción, las líneas de carril son un componente esencial de lo que indica el flujo de tráfico y donde se debe conducir un vehículo así que también es un buen punto de partida en el desarrollo de niveles de automatismos de ayuda a la conducción ( Sistemas ADAS).
En un proyecto anterior de detección de carril Kemal había implementado un sistema de detección de carril que funcionaba decentemente en perfectas condiciones, sin embargo no detectaba curvas carriles con precisión y no era robusta a obstrucciones y sombras, de modo que esta nueva versión mejora su primera propuesta puesto que ha implementado detección de lineas curvas en los carriles , de modo que funciona mucho mejor y es más robusto para entornos exigentes.
El sistema de detección de carril ha sido escrito en Python usando la librería OpenCV y ha seguido resumidamente las siguientes etapas en el procesamiento de imagen:
Corrección de distorsión
Deformación de la perspectiva
Filtro de Sobel
Detección de picos del histograma
Búsqueda de ventana deslizante
Ajuste de curvas
Superposición de carril detectado
Aplicar el resultado a la salida al vídeo
Respecto al hardware utililizado :
Nvidia Jetson TX2×1
Raspberry Pi 3 Model B×1
Corrección de distorsión
Las lentes de las cámaras distorsionan la luz entrante al enfocarla en el sensor de la cámara o CCD . Aunque esto es muy útil porque nos permite capturar imágenes de nuestro entorno, a menudo terminan distorsionando la luz ligeramente de forma imprecisa lo cual puede ofrecernos medidas inexactas en aplicaciones de visión por ordenador . No obstante fácilmente podemos corregir esta distorsión calibrando la imagen de un objeto conocido ( por ejemplo tablero de ajedrez asimétrico,)y generando un modelo de distorsión que represente las distorsiones de la lente.
La cámara utilizada en la prueba video fue utilizada para tomar 20 imágenes de un tablero de ajedrez, que fueron utilizados para generar el modelo de distorsión.El autor comenzó por convertir la imagen a escala de grises y entonces aplico la función cv2.findChessboardCorners .Como sabemos que este tablero de ajedrez es un objeto tridimensional con líneas rectas exclusivamente podemos aplicar algunas transformaciones a las esquinas detectadas para alinearlos correctamente utilizando cv2.CalibrateCamera() obteniendo así los coeficientes de distorsión y la matriz de cámara de modo que así ya estaba calibrada la cámara
Realizado el proceso anterior se puede utilizar cv2.undistort() para corregir el resto de sus datos de entrada.
Como demostración en la imagen se puede ver la diferencia entre la imagen original del tablero de ajedrez y la imagen corregida a continuación:
Aquí está el código exacto que usó el autor para esto:
defundistort_img():# Prepare object points 0,0,0 ... 8,5,0
obj_pts = np.zeros((6*9,3), np.float32)
obj_pts[:,:2] = np.mgrid[0:9, 0:6].T.reshape(-1,2)
# Stores all object points & img points from all images
objpoints = []
imgpoints = []
# Get directory for all calibration images
images = glob.glob('camera_cal/*.jpg')
for indx, fname in enumerate(images):
img = cv2.imread(fname)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, (9,6), None)
if ret == True:
objpoints.append(obj_pts)
imgpoints.append(corners)
# Test undistortion on img
img_size = (img.shape[1], img.shape[0])
# Calibrate camera
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img_size, None,None)
dst = cv2.undistort(img, mtx, dist, None, mtx)
# Save camera calibration for later use
dist_pickle = {}
dist_pickle['mtx'] = mtx
dist_pickle['dist'] = dist
pickle.dump( dist_pickle, open('camera_cal/cal_pickle.p', 'wb') )
defundistort(img, cal_dir='camera_cal/cal_pickle.p'):#cv2.imwrite('camera_cal/test_cal.jpg', dst)with open(cal_dir, mode='rb') as f:
file = pickle.load(f) mtx = file['mtx']
dist = file['dist']
dst = cv2.undistort(img, mtx, dist, None, mtx)
return dst
undistort_img()
img = cv2.imread('camera_cal/calibration1.jpg')
dst = undistort(img) # Undistorted image
Y ahora podemos ver la corrección de distorsión aplicada a una imagen de la carretera.
Solo se puede notar diferencias leves, pero esto como veremos puede tener un impacto enorme en el tratamiento de la imagen.
Deformación de la perspectiva
La detección de carriles con trazados curvas en espacios de la cámara espacio no es uan tarea fácil asi que la idea es conseguir una vista de pájaro de las pistas , lo cual se e puede hacer aplicando una transformación de perspectiva en la imagen. Aquí es lo que parece:
Como vemos nos es nada espectacular debido a que el carril esta sobre una superficie plana en 2D, asi que podemos encajar un polinomio que puede representar fielmente el carril en el espacio del carril
Puede aplicar estas transformaciones a cualquier imagen usando la función cv2.getPerspectiveTransform() para obtener la matriz de transformación, y aplicar la función cv2.warpPerspective() a una imagen.
Aquí está el código que uso el autor para ello:
defperspective_warp(img,
dst_size=(1280,720),
src=np.float32([(0.43,0.65),(0.58,0.65),(0.1,1),(1,1)]),
dst=np.float32([(0,0), (1, 0), (0,1), (1,1)])):
img_size = np.float32([(img.shape[1],img.shape[0])])
src = src* img_size
# For destination points, I'm arbitrarily choosing some points to be# a nice fit for displaying our warped result# again, not exact, but close enough for our purposes
dst = dst * np.float32(dst_size)
# Given src and dst points, calculate the perspective transform matrix
M = cv2.getPerspectiveTransform(src, dst)
# Warp the image using OpenCV warpPerspective()
warped = cv2.warpPerspective(img, M, dst_size)
return warped
Filtro de Sobel
En otras versiones una opción era filtrar las líneas de carril con el color peor sin embargo, esto no siempre es la mejor opción. Si el camino utiliza luz de color concreta en lugar de asfalto, el camino pasa fácilmente a través del filtro de color, y esta la percibirá como una línea de carril blanco, pero eso no es correcto.
En su lugar, podemos utilizar un método similar al detector de borde, esta vez para filtrar hacia fuera de la carretera. Las líneas de carril suelen tienen un alto contraste en la carretera, por lo que podemos utilizar esta peculiaridad para nuestro beneficio. La funcion detector de borde Canny utilizado anteriormente hace uso de Operador de Sobel , para obtener el gradiente de una función de la imagen. La documentación de OpenCV tiene una fantástica explicación sobre cómo funciona asi que utilizaremos esto para detectar zonas de alto contraste para las marcas de carril filtro e ignorar el resto del camino .
Todavía utilizaremos el espacio de color HLS nuevamente, esta vez para detectar cambios en la saturación y la ligereza. Los operadores de sobel se aplican a estos dos canales, y extraemos el gradiente con respecto al eje x y añadiremos los píxeles que pasan nuestro umbral de degradado a una matriz binaria que representa a los píxeles de nuestra imagen. Aquí está como se ve en cámara espacio y lane
:
Tenga en cuenta que las partes de la imagen que estaban más lejos de la cámara no conserven su calidad muy bien. Debido a las limitaciones de resolución de la cámara, datos de los objetos más lejos son muy borrosos y ruidosos pero no necesitamos concentrarnos en la imagen, para que podamos utilizar sólo una parte de esta.
Detección de picos del histograma
Ahora aplicaremos un algoritmo especial llamado SlidingWindowAlgorithm ( algo asi como algoritmo Desplazamiento de Ventana )para detectar nuestras líneas de carril. Sin embargo, antes de que lo podemos aplicar, debemos determinar un buen punto de partida para el algoritmo pues este funciona bien si comienza en un lugar donde haya píxeles de lineas presentes, pero ¿cómo podemos detectar la ubicación de estos píxeles de carril en primer lugar?
Estará recibiendo un histograma de la imagen con respecto al eje X. Cada parte del histograma siguiente muestra píxeles blancos en cada columna de la imagen. Entonces tomamos los picos más altos de cada lado de la imagen, uno para cada línea de carril y tendríamos resulto esta parte
Aquí vemos como el histograma parece, al lado de la imagen binaria:
Búsqueda de ventana deslizante
Ahora necesitamos utilizar el algoritmo de ventana deslizante para distinguir entre los límites del carril de la izquierda y derecha para que podemos caber dos curvas diferentes que representan los límites del carril.
El algoritmo sí mismo es muy simple. A partir de la posición inicial, la primera ventana mide cuántos píxeles se encuentran dentro de la ventana. Si la cantidad de píxeles alcanza un cierto umbral, desplaza la siguiente ventana a la posición lateral media de los píxeles detectados. Si no se detectan los suficientes píxeles, comienza la siguiente ventana en la misma posición lateral.
Esto continúa hasta que las ventanas alcanzan el otro borde de la imagen .Asimismo los píxeles que corresponden a las ventanas reciben un marcador.
En las imágenes de abajo, los píxeles marcados azules representan el carril derecho, y los rojos representan la izquierda:
Ajuste de curvas
El resto del proyecto es ya mas fácil. Aplicamos la regresión polinomial para los pixeles rojos y azules individualmente usando np.polyfit() , y entonces el detector se hace sobre todo
Esto es lo que parecen las curvas:
Superposición de carril detectado
Ya estamos en la parte final del sistema de detección: la interfaz de usuario. Simplemente creamos una superposición que llena en la parte detectada del carril, y luego finalmente lo aplicamos al vídeo.
Este es el resultado final
!Sin duda un resultado realmente espectacular que puede servir de partida para proyectos mas ambiciosos!
Airdroid es una potente herramienta que permite controlar un terminal Android desde otro terminal Android , permitiendo hacer cosas muy interesantes como por ejemplo transferir archivos entre estos o usar uno de los terminales como cámara de seguridad . Este programa ,que por cierto también esta disponible para PC y Mac , es complementado por una nueva aplicación con la que acceder de móvil a móvil: AirMirror .Por cierto lo de Mirror o e “espejo” viene porque a distancia Air ( por el aire) tenemos la posibilidad de gestionar otro móvil como si lo estuviera tocando.
Si bien AirMirror es una utilidad muy interesante , hay un pequeño problema :se requería hasta hace poco que el terminal estuviese rooteado ,pero afortunadamente desde la versión v3.1.6 desde AirDroid de Android, AirDroid Mac v3.2.1, v3.2.2 AirDroid para Windows o Android ya se puede utlizar AirMirror sin tener permisos de root (siempre que los terminales Android sean superiores a 4.1).
AirMirror con terminales rooteados
Para los afortunados usuarios que tengan permisos de root con Android 4.1 en adelante pueden controlar su móvil remotamente a través de AirMirror fácilmente pero para ellos necesitara autorizar AirDroid.
En primer lugar iniciar AirMirror en el dispositivo que desea controlar y después haga clic en el icono de AirDroid Windows/Mac, pulsar GRANT cuando aparezca la ventana que autorizan en su Android.
Otras opción es ir a la aplicación de gestión de permiso de root (como SuperSU) y conceder manualmente AirDroid el permiso necesitado.
Para que no sea necesario tener que conceder el permiso para AirDroid cada vez después de actualizar / reinstalar AirDroid, simplemente ir a configuración de la aplicación de gestión de permiso de root (como SuperSU) y pulsar la opción de re-autenticación para desactivarla
AirMirror en terminales que no dispongan permisos de root
También es fácil usar Airmirror en terminales que no son root,para ello haga clic AirMirror pulse a la izquierda en el icono no-root
Ahora siga las instrucciones para conectar los dispositivos al ordenador a través de USB cable y asegúrese de que modo de conexión es MTP y habilitar la «depuración USB»
Si no ve un pop up en el terminal para habilitar la depuración USB, vaya a Setting( configuración) > «About phone»(teléfono) > «Build number» y pulse sobre este al menos 7 veces para activar «Opciones del desarrollador».
Ahora vuelva hacia atras y vera «Opciones de desarrollador» > alli Activar «depuración USB».
En el caso de que su teléfono sea Xiaomi, también debería permitir USB debugging (security settings) es decir configuración de seguridad para depuración USB para que pueda controlar su teléfono desde el PC.
Después de terminar este proceso , conecte el dispositivo a su ordenador y haga clic en configuración completada.
¡Ahora ya debería de poder e utilizar AirMirror para acceder a sus dispositivos en cualquier momento y en cualquier lugar !
Lamentablemente una pega importante de este proceso es que necesitara restablecer la depuración USB, si reinicia el dispositivo.
Por cierto si el dispositivo tiene permisos de root pero el permiso fue denegado para AirDroid, por favor, trate de usar AirMirror con no-root como hemos comentado mas arriba…
Esta claramente de moda la reutilización de electrónica antigua a nuevos tiempos acoplando uno de los elementos mas versátiles que existen como son los smartphones
En este caso se trata de conversión de viejas pletinas analógica donde se instala un smartphone que también puede ser reciclado o desuso en el hueco originalmente destinado a la cinta de casete.
Para dar mas realismo ,mientras el reproductor está en funcionamiento sobre la pantalla del smartphone se muestra la imagen animada de una cinta de casete en movimiento sobre la que ademas podemos interactuar.
En realidad puede parecer ingenioso la conversión , pero el proceso no es demasiado complejo sobre todo si no se tiene nostalgia de mantener la parte mecánica del casete pues esta no sera útil , pero haciendo por tanto el proceso irreversible
Cada pletina actualizada con este sistema está llena de posibilidades:
Reproductor de MP3 y FLAC con simulación de casete animado
Radio Internet
Reproductor de Spotify, Tidal, Deezer, Pandora etc.
Radio FM
Carga y administración de música inalámbrica
Control táctil
Almacenamiento interno para archivos de música
En realidad como se comentaba ,los pasos para la conversión no son demasiado complejos:
Paso 1 :Elección de la pletina
El primer paso es encontrar una pletina grabadora que sea adecuada para la modificación y luego imaginar y planificar con precisión el efecto final.
Debido a la construcción sólida y duradera y la simplicidad, las pletinas mecánicas vintage con amplificador HIFI incorporado son una de las opciones preferidos pues le daremos una segunda oportunidad al menos a la parte de BF y de paso recordaremos tiempos pasados.
Algunas grabadoras no son adecuadas para el procesamiento debido a su diseño mecánico y eléctrico. Las viejas y simples cubiertas vintage con teclas mecánicas son una opción favorita para la conversión .La cubierta destinada a la conversión debe ser eléctricamente funcional. Los circuitos de audio, las entradas / salidas, los medidores de nivel, las regulaciones, los interruptores, etc. deberían funcionar correctamente.
El motor, las correas y los engranajes no son importantes, pueden estar rotos o dañados.
Obviamente para poder partir de algo sobre lo que montar el smartphone al menos la parte de BF ( es decir la etapa de audio ) debería funcionar para poder continuar la conversión , aunque si esta parte no funciona también podemos optar por reemplazar la vieja etapa de audio por un amplificador clase D ya montado, pues no ocupan nada de espacio y son realmente económicos .
Paso 2 Software
El corazón del sistema es un teléfono inteligente con pantalla táctil con software dedicado.
El teléfono debe estar equipado con suficiente memoria incorporada a ser posible con una tarjeta de memoria adicional para almacenar música.
Es ademas necesario un cargador adecuado y cables de audio de jack de 2 1/2″ stereo a dos conectores macho RCA
En cuanto al software el abanico es inmenso,como pueden ser Casse-o-player, Cassete Tapes, Easy Music Player, etc
Uno de los mas realistas es Delitape una app nº 1 para iPhone ahora disponible también para Android. Esta app rememora el sentimiento de los viejos tiempos y convierte cualquier smartphone moderno en un walkman clásico
Esta app vintage de musica le devuelve a los viejos tiempos. Deslízese por las cintas más elegantes, hechas con pasión por los detalles. Durante la reproducción de los temas, la app simula la forma en que se reproducían las cintas de antes.
Esta app ademas tiene Soporte de radio de Internet con más de 1000 de las mejores estaciones de radio del mundo web!
Otro app necesaria es Airdroid pues esta app permite acceder y manejar su teléfono o tableta Android desde Windows, Mac o la web, sin cables, y de forma gratuita.
Cada platina sin cinta ofrece muchas posibilidades: reproductor MP3 / FLAC con animación de cassette, radio por Internet y radio FM (algunos modelos). Si lo desea, puede instalar cualquier aplicación de Android, por ejemplo, su servicio favorito de transmisión de música: Tidal, Spotify, Dezeer, Pandora … o lo que sea que necesite.
Paso 3 Montaje
Es hora de ensamblar y combinar componentes, incluidos trabajos mecánicos de precisión .
Lo más difícil es poner el teléfono inteligente en el compartimiento del casete sin romper nada lo cual necesitara grandes dosis de paciencia e ingenio
Durante el procesamiento, muchas partes mecánicas se eliminan para siempre, por lo que ya no podrá usar las casetes siendo la conversión irreversible.
Respecto a la electrónica , debemos conectar con cable estero apantallado desde un jack macho stereo de 2 1/2″ hacia la entrada de auxiliar de la pletina ( bien con conectores RCA o bien soldando a la placa de BF).
Obviamente tampoco debemos olvidarnos de alimentar al smartphone por lo que situaremos el cargador en el interior de la pletina tomando la alimentación de ca directamente desde esta (por ejemplo a la salida de interruptor mecánico de power que este tipo de equipos llevan)
La batería se cargara automáticamente cuando se encienda la plataforma. Si no usa la plataforma durante un período prolongado, recuerde apagar el teléfono para evitar descargar la batería por completo. En caso de que la batería esté descargada, simplemente encienda la plataforma y espere un momento hasta que el teléfono muestre signos de vida. Luego encienda el teléfono nuevamente.
Para operar el teléfono dentro de la plataforma se hará al igual que un teléfono estándar, con una excepción, ya que el teléfono está integrado en la plataforma y el conmutador de encendido / apagado es de difícil acceso, por lo que lo «correcto» seria conectarlo eléctrica mente a una de las teclas de la plataforma y así funcionaria de la misma manera que el original.
El resultado como se podía esperar es bastante impresionante dependiendo mucho de como seamos capaces de disimular el smartphone dentro de la pletina :
Finalmente, el dispositivo se ve y actúa como una platina de cinta real, que incluye una fascinante animación de casete, medidores de nivel de trabajo, señal de salida ajustable, etc. Hermosa pieza de artesanía hecha a mano. Además, cada TapeLess Deck MP3 es un dispositivo único y artesanal, el único en el mundo.
Paso 4: Subir y administrar música…
Para preparar el smartphone , conecte el WiFi del smartphone e inicie sesión en su red doméstica. Recuerde que sin cubierta y ordenador deben trabajar en la misma red.
Haga clic en el icono de AirDroid y espere pacientemente a la siguiente pantalla. En el primer uso toma algún tiempo…
Encuentre y haga clic en el icono azul de la AirDroid Web. A veces puede ser cubierto por los anuncios, así que mire con atención…
Espere al respuesta del servidor y escriba dado la direcciónexactamentepara el navegador de su ordenador.
Vaya a su ordenador e introduzca la url citada en un navegador .Ahora verá una página web generada por AirDroid. Contiene algunas informaciones útiles acerca de los teléfonos sin cubierta, como memoria disponible o estado de la batería y mucho mas
Haga clic en el icono de archivos y localize la carpeta MUSIC en la tarjeta SD o tarjeta SD externa (dependiendo de la configuración del teléfono). Es el momento para cargar música del ordenador a la memoria del smartphone:Abra la carpeta con la música en su ordenador seleccione los archivos y sólo tiene que arrastrar a la! Ventana _MUSIC. Espere a que la transferencia hasta el final.
Por cierto esta idea se puede extender no solo a una pletina hifi, también radiocasete , equipos compactos , etc ¿tiene alguno de estas viejas leyendas en el trastero y no sabe que hacer con estas pues con un viejo smartphone le puede dar otra nueva vida?
Family Link de Google puede ayudar a configurar determinadas reglas básicas sobre el uso de la tecnología pues tenga en cuenta que las aplicaciones de Google no se han diseñado teniendo en mente a los menores, de modo que si quiere ayudar a su hijo a tomar decisiones acertadas cuando utilice su dispositivo Android , esta app que vamos a ver , y que ya esta disponible en España ,sin duda es una interesante opción , aunque debe saber que el tutor o padre es quien decide finalmente las aplicaciones y los servicios que puede utilizar el menor.
En efecto desde hace unos días ya esta disponible en España ( y pronto en el resto de países que usan la lengua española ) la app para instalar en nuestros terminales Google Family Link, una aplicación de control parental oficial de Google disponible gratuitamente en Google Play que permite a los padres supervisar el uso que los menores hacen de sus terminales móviles o tabletas.
Con Family Link se puede crear una cuenta de Google para un menor similar a la suya, con acceso a la mayoría de los servicios de Google, y, al mismo tiempo, establecer algunas normas básicas sobre la experiencia digital de su familia:
Gestionando las aplicaciones que puede usar el menor: aprobando o bloqueando las apps que quiera descargar de Google Play Store.
Controlando el tiempo de conexión permitiendo consultar cuánto tiempo usa el menor sus aplicaciones favoritas mediante los informes de actividad semanal o mensual, y configurando límites de tiempo de conexión diarios.
Configurando horas para dormir en el dispositivo: con esta función puede bloquear los dispositivos de manera remota cuando sea la hora de dormir o de hacer un descanso.
Ademas una de las características clave de Google Play Family (razon por las que nos pide una tarjeta de credito al instalar la app por primer a vez ) es es que podremos compartir apps y contenidos, que hayamos comprado, con nuestra familia ( hasta un grupo de seis personas)
Ademas de las apps es extensible a las películas y música que compramos, que podrán ser descargadas y utilizadas por los otros cinco componentes del plan, por lo que nos ahorraremos mucho dinero con determinadas aplicaciones o juegos que, en lugar de tener que comprar todos, podremos comprar solo una única vez.
Para poder usar Family Link se necesita :
Un dispositivo Android compatible para el menor con Android 7.0 (Nougat) o versiones posteriores. Algunos dispositivos con Android 5.0 y 6.0 (Lollipop y Marshmallow) también puedan ejecutar Family Link.
Una cuenta de Google para el menor que se gestione con Family Link: No deja usar cuentas ya creadas porque los menores en cada país tienen una política de privacidad distinta, así que hay que aceptarla y generar un usuario nuevo. La edad mínima para usar YouTube en USA es 13 años razón por la que no deja instalar esta app pero para usar otras aplicaciones de redes sociales lógicamente también existe una edad mínima en este caso de 14 años, aunque también depende del país. Todo esto viene en el disclaimer, aviso legal de la app cuando la instalas. En algo tan serio como a que se exponen nuestros hijos en Internet creo que merece la pena leerte por una vez lo que estas aceptando.
Para los padres, madres y tutores un dispositivo Android 4.4 (Kit Kat) o versiones posteriores, o un iPhone con iOS 9 o versiones posteriores.
Una cuenta de Google
Encontrarse en un país donde la aplicación esté disponible:en Estados Unidos, México, Argentina, Chile o Brasil, Europa, y los usuarios españoles pueden empezar a utilizarla desde hoy.
Como vemos un gran inconveniente es que se requiere un terminal muy actual pues se recomienda un android 7.0 para los menores, mientras que el del tutor puede ser uno mas antiguo(Android 4.4) o incluso un Iphone
La app es técnicamente gratuita pero es posible que Google verifique su tarjeta de crédito para confirmar que estás dando su consentimiento como padre, madre o tutor al crear una cuenta de Google para su hijo o hija aunque donan todos los fondos de estas transacciones a una organización para la protección de los niños.
Su gran limitación , ademas de la versión de Android para los menores, es como puede suponerse, que requiere cuentas de gmail para los menores nuevas , es decir no sirven cuentas facilitadas en el trabajo o centro educativo u otras que se tengan pues Family Link solo funciona con cuentas de Google creadas a través de esta aplicación para niños menores de 13 años (o la edad que corresponda según la legislación vigente en su jurisdicción). Cuando el niño cumpla esta edad, podrá seguir utilizando Family Link si quiere
Pasos para Instalar y configurar Google Family link
También es posible instalar la aplicación paterna de control en un terminal iOS ( para los menores por el momento no , es decir solo Android 7)
Rápidamente le aparecerá un breve asistente para guiarle en el proceso completo que solo tiene tres pasos:
Enseguida nos va a preguntar la cuestión principal sobre el terminal del menor ya que se aconseja este sea Android 7.0 (Nougat) o versiones posteriores.
Algunos dispositivos con Android 5.0 y 6.0 (Lollipop y Marshmallow) también puedan ejecutar Family Link. pero no esta asegurado su funcionamiento
Ahora tendremos que aceptar las condiciones contractuales si estamos de acuerdo , por lo que debemos que aceptar esta pantalla vinculando la nueva cuenta que se cree al menor con la cuenta del tutor
Ahora ya lo siguientes toca crear la cuenta del menor por lo que tendremos que darle nuevamente a siguiente
Vamos por el segundo paso, así que volveremos a dar a siguiente:
Finalmente desde la propia app nos va a permitir crear la cuenta del menor
Ahora ya solo tenemos que seleccionar el nombre y apellidos del hijo
Lo siguiente que nos pedirá es a la fecha de nacimiento del menor así como un nombre de usuario para su cuenta de Gmail (que debe ser único ) y una contraseña.
Finalmente de cara al terminal del tutor tendrá que facilitar los datos de una tarjeta bancaria ( se recomienda de delito y a ser posible virtual o de prepago) para otorgar el consentimiento parental para crear la cuenta.
Una vez configurado la app toca ir al terminal Android del menor donde tendremos que introducir la cuenta que se haya creado para él de modo que Android identificará que este forma parte de Family Link asi que que tendremos que introducir las credenciales de tutor para avanzar en la configuración del terminal del menor
En este el proceso puede restringir las aplicaciones que no se quiere que pueden utilizar y el asistente irá guiando por los distintos pasos.
Revise detenidamente las aplicaciones del dispositivo de su hijo e inhabilite aquellas que no quiera que use. En muchos casos es posible que no pueda inhabilitar algunas aplicaciones preinstaladas en determinados terminales.
Se puede asimismo en este paso personalizar los controles de Google Play, crear filtros de contenido y de búsqueda, ver qué aplicaciones ha instalado y restringir las que no parezcan apropiadas, ver su ubicación en tiempo real y configurar el tiempo en pantalla.
La actividad de algunas aplicaciones, como las de reproducción de música y las de mensajería que se ejecutan en segundo plano, no se registra por completo en los informes de actividad semanal o mensual.
Aunque Family Link ayuda a gestionar las compras y las descargas de los menores, este no necesitará la aprobación del tutor para instalar actualizaciones de aplicaciones (incluidas aquellas que amplían permisos), las aplicaciones que haya aprobado anteriormente ni las que se hayan compartido en la colección familiar, así que los padres, madres o tutores deben revisar de manera periódica qué aplicaciones tiene instaladas su hijo y los permisos de las aplicaciones en Family Link.
En efecto vamos a hablar de Grafana ,un software de código abierto, rico en muchas características, potente, elegante ideal par analytics y monitorizacion que se puede ejecutar en Linux, Windows y MacOS.
Tal es su aceptación que de hecho es un software de facto para el análisis de datos, utilizado en DStack overflow, eBay, PayPal, Uber y Digital Ocean – sólo por mencionar algunos.
Soporta más de 30 código abierto así como fuentes de datos bases de datos comerciales incluyendo MySQL, PostgreSQL, Graphite, Elasticsearch, OpenTSDB, Prometheus y InfluxDB . Le permite digerir profundamente en grandes volúmenes de datos en tiempo real, datos operativos; visualizaciones, consultas, establecer alertas y obtener ideas de sus métricas desde ubicaciones de almacenamiento diferentes.
Es de destacar que, Grafana permite la creación de múltiples configuraciones independientes teniendo su propio entorno de uso (administradores, fuentes de datos, paneles y usuarios).
Algunas características de Grafana
Elegantes gráficos para visualización de datos.
Gráficos rápidos y flexibles con muchas opciones.
Cuadros de mando dinámicos y reutilizables.
Es altamente extensible en cientos de paneles de control y plugins de la biblioteca oficial.
Ayudas de alimentación las preferencias del usuario.
Soporta multi tenancy, configuración de múltiples organizaciones independientes.
Compatible con la autenticación via LDAP, Google Auth, Grafana.com y Github.
Soporta notificaciones via Slack, PagerDuty y mas
Apoya notable colaboración que permite compartir datos y cuadros de mando a través de equipos y mucho más.
Una demostración en línea está disponible para probar antes de instalar Grafana en tu distribución Linux.: Demo URL: http://play.grafana.org/
En este post vamos a explicar cómo instalar software Grafana – visualización de datos y monitoreo en las distribuciones CentOS, Debian y Ubuntu .
Instalar Grafana en sistemas Linux
1. Vamos a instalar Grafana desde sus repositorios YUM o APT para que usted pueda actualizar con su administrador de paquetes predeterminado.
2. Después de instalar Grafana, puede encontrar archivos importantes en las siguientes ubicaciones:
El Binario se instala en /usr/sbin/grafana-server
Instala el script de Init.d para /etc/init.d/grafana-server
Crea archivo predeterminado (entorno vars) a /etc/default/grafana-server
Instala el archivo de configuración para /etc/grafana/grafana.ini
Instala servicio systemd service grafana-server.service
La configuración predeterminada establece el archivo de registro en /var/log/grafana/grafana.log
La configuración predeterminada especifica un db de sqlite3 en /var/lib/grafana/grafana.db
Instala JS/HTML/CSS y otros archivos de Grafana en /usr/share/grafana
3. A continuación, iniciar el servicio Grafana , y comprobar si esta levantado y funcionando, habitándolo para el inicio automático en el arranque siguiente. De forma predeterminada, el proceso se ejecuta como el usuario grafana (creado durante el proceso de instalación) y escucha en el puerto HTTP 3000.
# service grafana-server start
# service grafana-server status
# sudo update-rc.d grafana-server defaults [On Debian/Ubuntu]
# /sbin/chkconfig --add grafana-server [On CentOS/RHEL/Fedora]
4. Si su sistema tiene un firewall activado por defecto, necesita abrir el puerto 3000 en el firewall para permitir las solicitudes de cliente para el proceso de grafana.
5. Ahora utilice la siguiente URL para acceder a la Grafana, que le redirigirá a la página de inicio de sesión, las credenciales de usuario como username: admin y contraseña: admin)
http://Your-Domain.com:3000
OR
http://IP-Address:3000
6. Después del inicio de sesión, usted accederá a la consola casera, como se muestra en la imagen de abajo.
7. A continuación, agregar un origen de datos o base de datos, haga clic en «Agregar origen de datos«. Por ejemplo vamos a añadir una base de datos MySQL ; especificar los parámetros de nombre, tipo y conexión de fuente de datos. Haga clic en Guardar y probar.
Se le notificará si la conexión de base de datos es exitosa o ha fracasado, como se muestra en la captura de pantalla.
Luego volver a la consola Inicio para añadir un panel nuevo.
8. En el panel de Inicio , haga clic en tablero de instrumentos nuevo para añadir un nuevo panel para visualizar parámetros de origen de datos.
Desde aquí, puede agregar más fuentes de datos, dashboards, invitar a los miembros de su equipo, instalar aplicaciones y plugins para extender las funcionalidades por defecto y hacer más.
En el post de hoy vamos a ver como es posible enviar datos usando la Raspberry Pi , pero esta vez no desde la distribución de Raspbian sino con una propia imagen de windows 10 especifica para Iot que Mircrosoft ha preparado precisamente para esta plataforma
En realidad el montaje propuesto es bien sencillo pues se basa en un típico esquema del cableado entre la Raspberry Pi 3B y un módulo GPS a través de UART serie.
Como podemos ver alimentamos al GPS con 5V DC y masa desde los pines respectivos 2 y 3 de la raspberry Pi y conectamos el pin rx al pin 6 (puerto serieTX) de la raspberry Pi y tx del gps al pin 10(puerto serie RX) de la raspberry Pi .
Ahora vamos a preparar la instalación de tarjetas SD para el sistema operativo Windows IO. Se recomienda altamente la tarjeta SanDisk Extreme micro SD de 16 GB HC o mayor Nos intentado este paso en particular con cinco tarjetas diferentes de diferentes marcas y cronometré pues los resultados fueron malos.Algunas otras tarjetas de SanDisk (incluso uno normal) tomaron varias horas que van de 3 a 9 horas para el sistema operativo fuese instalado y actualizado pero esta toma alrededor de 35 minutos.!
Microsoft ha hecho que sea muy fácil de instalar su nuevo sistema operativo básico de Windows IO en una tarjeta SD.Sólo tiene que descargar su nuevo Panel de control de Windows Core IO de https://developer.microsoft.com/en-us/windows/iot/downloads e instalarlo en su PC principal.
Una vez instalado correctamente, vaya a la ‘Configurar un nuevo dispositivo picando en el enlace en el panel izquierdo.Aquí da a su dispositivo un nombre.Este nombre se utiliza para identificar el dispositivo en la red.
Cuando se pulsa el botón «Descargar e instalar», verá una barra de progreso para el sistema operativo está descargando.En nuestro caso fue 649MB al 99%, como se muestra a continuación.
l
Después de finalizar la descarga, el proceso comienza a parpadear.Aquí es donde se puede probar el rendimiento de su tarjeta SD, ya que este proceso es de escritura pura.En el caso de la tarjeta comentada literalmente tomó 25 segundos.
Si de alguna manera su instalación no funciona o se bloquea, puede que tenga que volver a la imagen o volver a instalar el sistema operativo.En esos escenarios no se olvide de formatear la tarjeta SD.
Una vez más como hemos hablado muchas veces en este blog , se recomienda SDFormatter V4.0, con la configuración se muestra a continuación:
Después de que la tarjeta SD se haya formateado, repita el proceso de instalación del sistema operativo de Windows utilizando la IO núcleo del tablero de instrumentos.
Para el primer arranque recomendamos tener un monitor HDMI, teclado y ratón, y una conexión ethernet.Aunque puede ejecutar totalmente una Raspberry Pi con Windows IO completamente sin monitor, con un monitor y conectividad Ethernet acelera el proceso de instalación.
La primera cosa que usted notará en el monitor HDMI es el logotipo de Windows sesgadas de metro con una bola / anillo de carga, que de una manera extraña ofrece gratifaction.Imagínese un escenario en el que tenías que mirar a ese logo estática, sin retroalimentación.
Después de esa pantalla, recibirá un mensaje de bienvenida del equipo de Windows IO, lo que nos gusta mucho.¡Gracias chicos!
Al cabo de unos segundos se le llevará a la página de selección de idioma.Se dará cuenta de que algo extraño aquí.El nombre del dispositivo que se muestra en el panel de la derecha es «MINWINPC«.«Oh vaya, ¿qué pasó con el nombre que le puse al dispositivo a través del panel de control, mientras que la formación de imágenes», se podría pensar.
pantalla de selección de idioma primer arranque
No se preocupe, sea paciente y espere a esta ventana por un tiempo (unos 11 segundos).De repente, el Raspberry Pi se reiniciará de nuevo sin ninguna advertencia.En este punto, lo mejor es dejar que su pi haga su cosa.IO de Windows Core está en desarrollo activo, por lo que sabe en el momento de probar esto sólo podría comenzar con el nombre proporcionado en el tablero de instrumentos.
Puede haber un reinicio sin previo aviso
Encender de nuevo
Esta vez las ventanas arrancado con el nombre de dispositivo configurado correctamente.Ahora sólo tiene que seleccionar el idioma y haga clic en «Siguiente«.
En la siguiente pantalla se le pedirá que introduzca las credenciales de seguridad Wi-Fi.Si por alguna razón usted no puede establecer la contraseña de WiFi ahora, usted será capaz de restablecerla a través del Portal de dispositivo más tarde.
Después de configurar el WiFi / Red se le llevará a la página principal del dispositivo.
Hay dos cosas muy importantes a tomar nota de en esta página: El nombre del dispositivo y la dirección IP.Esta dirección IP es lo que vamos a usar más tarde para conectar con el dispositivo, ya sea a través del portal del dispositivo, a través del acceso de cliente remoto, o a través del cliente Power Shell.
Ahora mueva su atención a su PC principal y ponga en marcha el Panel de control de Windows Core IO.Si ha instalado dos raspberrys en la misma red que tiene su PC principal, verá los dispositivos que aparecen en su página Mis dispositivos.(Puede dirigirse a esta página haciendo clic en «Mis dispositivos» en el panel de la izquierda).
Haga clic en uno de los dispositivos y seleccione «Abrir» en el Portal de dispositivos.Esto abrirá la ventana de su navegador favorito con alerta de seguridad de Windows.Entre ‘administrador’ como nombre de usuario y la contraseña que utiliza para configurar el dispositivo en el panel del dispositivo anterior.
Una vez que introduzca sus credenciales, podrá acceder a su portal de dispositivos.Desde aquí se puede cambiar todos los ajustes para su dispositivo.Esta característica es muy util asi que felicitamos al equipo de Microsoft que la IO.
Ahora vamos a cambiar en primer lugar la configuración de zona horaria a la zona horaria actual.Después de eso, cambiar la resolución del dispositivo de su elección.Esto podría provocar un reinicio.
Ahora, que el servidor remoto de Windows IO.Esta función será muy útil más adelante, prometemos!
Ya casi ha terminado de definir nuestra IO Principal OS de Windows.En este punto debey dejar que la actualización de su dispositivo haciendo clic en «Buscar actualizaciones».
Una vez que las actualizaciones se instalan correctamente, el dispositivo le pedirá que reinicie.
Haga clic en «Restart» ahora, y ser paciente.
Ahora los cambios se están reconfigurando y en realidad están instalando, lo que puede tardar desde 15 minutos hasta varias horas.Esto es cuando realmente va a ser agradecidos si actualizó su tarjeta SD para SanDisk Extreme.
Después de todas las actualizaciones se instalan correctamente su dispositivo Portal milagrosamente primavera de nuevo a la vida y mostrar este mensaje inmensamente satisfactorio.
No se olvide de actualizar todos sus dispositivos.En este punto, le recomendamos que cierre todos sus dispositivos y desenchufe sus HDMI, teclados y monitores.Usted no va a necesitar ellos por un tiempo.También recomendamos conseguir un par de paquetes de batería USB y va móvil.
¡Eso es!Hemos ya completado la mitad del viaje.
Ahora vamos a pasar nuestra atención en el Portal de Azure y Visual Studio lado de las cosas.En primer lugar, abrir portal.azure.com y navegar en el cubo de la IO en el panel de la izquierda.
Aquí es donde lo dejamos el Portal de Azure En este punto, tendrá que hacer clic en «políticas de acceso compartidos ‘.En la lista de políticas, seleccione ‘iothubowner‘ y copiar la clave de cadena de conexión a la primaria, como se muestra en la imagen siguiente.
Ahora está listo para empezar a programar.¡Sí!Si usted no tiene ya instalado Visual Studio, vaya a www.visualstudio.com para descargarlo e instalarlo.
Recomendamos Visual Studio Comunidad para empezar.Es gratuito para uso no comercial, por lo que hacen uso de este servicio gratuito hasta que comienze a vender sus productos / servicios.
Así pues, ahora usted tiene una copia nueva de instalado en el equipo de Visual Studio.O es posible que tenga que ya está instalado.De cualquier manera, es el momento de poner en marcha y crear un nuevo proyecto.Para esta aplicación particular, vamos a crear una aplicación de consola.
Crear una aplicación de consola en blanco y guardarlo en su lugar preferido.
En este punto, la ventana de código debería tener este aspecto:
Haga clic derecho sobre el archivo de proyecto en el Explorador de soluciones en el panel derecho y seleccione ‘Administrar paquetes NuGet’ desde el menú desplegable.
t
En la ventana del administrador NuGet paquete, vaya a explora y buscaMicrosoft.Azure.Devices. Haga clic en «instalar».
NuGet gestor de paquetes puede pedirle que revise los cambios y solicitar sus permisos.Aceptar todos los cambios e instalar el paquete.Una vez que se instala el paquete es posible que se le ofrecen algunas actualizaciones basadas en el paquete que acaba de instalar.Se recomienda que conserve todo al día.Es sólo una cosa de una vez y que mantiene sus aplicaciones al día y seguro.Considere que una buena limpieza.
Vamos a utilizar estos espacios de nombres para importar las clases mediante el uso de declaraciones.
Después de instalar los paquetes NuGet, la aplicación de consola que acabamos de crear está listo para hacer uso de la clase RegistryManager.Esta clase se utiliza para añadir / quitar los dispositivos a / desde el registro del dispositivo IO Azure concentradores.En el área de instrucciones de este tutorial hemos proporcionado un ejemplo de código que utilizamos para desarrollar una aplicación que puede tener acceso al registro del dispositivo y realizar cambios en él.
En este punto, se aconseja que usted mire en el código y trate de construir algo similar, de modo que se puede acceder y realizar cambios en el Registro de dispositivos IO Azure concentradores.
Con la ayuda de esta aplicación, puede dar algunos bien pensado identificaciones de los dispositivos a los Pies de frambuesa.
Finalmente llegamos al final de este tutorial.Hacia el final de esto, el Cuadro de mando Azure debe ser similar a esto:
Tome nota del número de dispositivos en la sección de la IO concentradores.
CÓDIGO
AzureIoTRegistryManagerApp C #
Este es el código de acceso y gestión Azure Registro Hub IO, haciendo uso de la clase RegistryManager.
////The MIT License(MIT)////Copyright(c) 2016 BardaanA////Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:////The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.////THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.usingSystem;usingSystem.Threading.Tasks;// These are the Microsoft's recommended libraries to access// and make changes to Azure IoT Hub's RegistryusingMicrosoft.Azure.Devices;usingMicrosoft.Azure.Devices.Common.Exceptions;// This namespace which also dictates the name of the Assembly can be anything you desire.namespaceAzureIoTRegistryManagerApp{classProgram{// RegistryManager object which is going to do most of the work for our applicationstaticRegistryManagerregistryManager;// This here is the Connection String that you copied from the IoT Hub Shared Access Policies > iothubowner > Shared access keys; remember??staticstringconnectionString="Don't forget to replace this with your own connection string";// Keeps track of the registry access statusstaticstringregistryAccessStatus="";staticvoidMain(string[]args){try{// Let's try and create a Registry Manager using our connection string, shall we?registryManager=RegistryManager.CreateFromConnectionString(connectionString);registryAccessStatus="Successfuly connected to the IoT Hub registry";// Yay!}catch(Exceptionex){Console.WriteLine("Registry access failed! {0}",ex.Message);// Bummer!!}// Check if RegistryManager was created successfullyif(registryManager!=null){Console.WriteLine("*****************************************************");Console.WriteLine("===== Welcome to the Azure IoT Registry Manager =====");Console.WriteLine();Console.WriteLine("++ {0} ++",registryAccessStatus);Console.WriteLine();intmenuSelection=0;while(menuSelection!=3)// Loop to keep you going...{Console.WriteLine(" 1) Add device into registry");Console.WriteLine(" 2) Remove device from the registry");Console.WriteLine(" 3) Close this application");Console.WriteLine("------------------------------------");Console.Write("Enter your selection: ");menuSelection=int.Parse(Console.ReadLine());Console.WriteLine();switch(menuSelection){case1:Console.Write("Enter device name that you want to register: ");stringdeviceName=Console.ReadLine();Console.WriteLine();if(deviceName.Length>0&&!deviceName.Contains(" "))// Weak validation :){// Calling method that actually adds the device into the registryAddDevice(deviceName).Wait();}else{Console.WriteLine("---");Console.WriteLine("Enter valid name!");Console.WriteLine("---");}break;case2:Console.Write("Enter name of the device to be removed: ");stringdeviceRemoveName=Console.ReadLine();Console.WriteLine();if(deviceRemoveName.Length>0&&!deviceRemoveName.Contains(" "))// Weak validation :({// Calling method that actually removes the device from the registryRemoveDevice(deviceRemoveName).Wait();}else{Console.WriteLine("---");Console.WriteLine("Enter valid name!");Console.WriteLine("---");}break;case3:// Breaks out of the loopbreak;default:Console.WriteLine("---");Console.WriteLine("Choose valid entry!");Console.WriteLine("---");break;}}// Closes the RegistryManager access right before exiting the applicationregistryManager.CloseAsync().Wait();}}// Method used to add device into the Registry, takes in a string as a parameterprivatestaticasyncTaskAddDevice(stringdeviceId){// A Device objectDevicedevice;try{// Lets try and create a Device into the Device Registrydevice=awaitregistryManager.AddDeviceAsync(newDevice(deviceId));if(device!=null){Console.WriteLine("Device: {0} added successfully!",deviceId);// Hooray!}}catch(DeviceAlreadyExistsException)// What?{Console.WriteLine("---");Console.WriteLine("This device has already been registered...");// When did I do that??Console.WriteLine("---");device=awaitregistryManager.GetDeviceAsync(deviceId);}Console.WriteLine();Console.WriteLine("Generated device key: {0}",device.Authentication.SymmetricKey.PrimaryKey);// Now you're talking!Console.WriteLine();}// Method used to remove a device from the Device Registry, takes a string as a parameterprivatestaticasyncTaskRemoveDevice(stringdeviceId){try{// Lets try and get rid of the Device from our registry, using the device id.awaitregistryManager.RemoveDeviceAsync(deviceId);Console.WriteLine("Device: {0} removed successfully!",deviceId);// Yup!}catch(DeviceNotFoundException){Console.WriteLine("---");Console.WriteLine("This device has not been registered into this registry!");// Are you sure??Console.WriteLine("---");}}}}
iRobot Roomba Create2 es una a plataforma grande y muy asequible para el desarrollo de la robótica, costando alrededor de US$ 200 permitiendo una variedad de métodos de programación. Como comienzo mjrovi usó un Arduino y una aplicación Android para mover el robot por puerto serie consiguiendo asi controlar sus motores, LEDS y sonido.
Como uno de los ganadores de 2016 del concurso de robótica en Instructables, mjrovi recibió como premio un iRobot Roomba Create2.
La Roomba es un robot de impulsión diferenciada, con 2 ruedas motrices y una rueda central guía. Su velocidad va hasta 500 mm/s y puede ser mandado a ir hacia arriba o hacia atrás.
Para señalización, contamos con cuatro 7 segmentos display y 5 LEDs :
Limpiar
Punto
Muelle
ADVERTENCIA/Check
Suciedad/escombros
Como sensores internos, tenemos entre otros:
Detector de acantilado (4 en el frente)
Detectores Bump (frente 2)
Codificadores de rueda
Para la programación, el documento: iRobot® Create® 2 abierto interfaz (OI) debe ser utilizado.El Roomba puede ser programado en 3 modos:
Modo pasivo:Al enviar el comando de Start o cualquiera de los comandos de modo de limpieza (por ejemplo, punto limpio, muelle buscar), la OI entra en modo pasivo. Cuando la OI está en modo pasivo, puede solicitar y recibir datos de los sensores usando cualquiera de los comandos del sensor, pero no puede cambiar los parámetros de comando actuales para los actuadores (motores, altavoces, luces, controladores de lado de baja, salidas digitales) a otra cosa.
Modo seguro :Le da un control completo de Roomba, con excepción de las siguientes condiciones relacionadas con la seguridad:
Cargador conectado y alimentado:detección de una caída de rueda (en cualquier rueda),detección de un acantilado mientras se mueve hacia adelante (o hacia atrás con un pequeño radio de torneado, menos de un radio de robot) o si ocurre una de las condiciones relacionadas con la seguridad mientras que el OI es en modo seguro, Roomba detiene todos los motores y vuelve al modo pasivo.
Modo completo:Le da un control completo sobre Roomba, todos de sus actuadores y todas las condiciones relacionadas con la seguridad que están restringidas cuando la OI en modo seguro, como el modo completo se apaga el acantilado, caída de rueda y características de seguridad cargador interno.
Comunicaciones
Para programar la Romba la lista de materiales usada es la siguiente:
iRobot Create2
Arduino UNO
Módulo Bluetooth HC-06
Pulsador
Para la comunicación entre la Roomba y Arduino, se utilizará el puerto Serial. Por defecto, Roomba comunica a 115.200 baudios, pero para comunicarse con Arduino, se cambiará a 19.200.
Hay 2 formas de establecer la tasa de baudios de Roomba:
Mientras que apagar Roomba, continúan mantenga pulsado el botón de encendido o limpiar después de que la luz se ha apagado. Después de unos 10 segundos, Roomba juega una melodía descendente de las echadas. Roomba se comunicará a 19.200 baudios hasta que el procesador pierde energía de la batería o la tasa de baudios se modifica explícitamente a través de la OI.
Utilizar el pin de cambio de tasa de baudios (pin 5 del conector mini-DIN) para cambiar la velocidad en baudios de Roomba. Después de encender la Roomba, esperar 2 segundos y luego pulso el cambio de la tasa de baudios baja tres veces. Cada impulso debe durar entre 50 y 500 milisegundos. Roomba se comunicará a 19200 baudios hasta que el procesador pierde energía de la batería o la tasa de baudios se modifica explícitamente a través de la OI.
El diagrama de arriba muestra cómo la Arduino debe conectarse al conector mini-DIN de Roomba
Lo primero creo que debe hacerse cuando un Roomba de programación es «Despertar» el robot y Definir el modo (segura o completa)
Nosotros podemos hacer un «wake-up», enviar un poco de pulso al pin mini-DIN 5 (detección de dispositivo de entrada) como se muestra en la siguiente función:
void wakeUp (void)
{
setWarningLED(ON);
digitalWrite(ddPin, HIGH);
delay(100);
digitalWrite(ddPin, LOW);
delay(500);
digitalWrite(ddPin, HIGH);
delay(2000);
}
Para empezar a Roomba deberán enviarse 2 códigos de siempre: «START» [128] y el modo, en nuestro caso «Modo seguro» [131]. Si usted quiere un «modo completo», debe enviarse en su lugar el código [132].
void startSafe()
{
Roomba.write(128); //Start
Roomba.write(131); //Safe mode
delay(1000);
}
Como se describe en la introducción, el Roomba tiene 5 LEDs:
Energía/limpiar (bicolor rojo/verde e intensidad controladas)
Punto (verde, intensidad fija)
Muelle (verde, intensidad fija)
ADVERTENCIA/Check (naranja, intensidad fija)
Suciedad/escombros (azul, fija la intensidad)
Control de leds
Todos los LEDs pueden ser ordenados mediante código [139]
Para controlar el LED de encendido, debe enviar dos bytes de datos a Roomba: «color» y la «intensidad». Color:
Verde = 0
Naranja = 128
rojo = 255
Intensidad:
Bajo = 0
Max = 255
La función setPowerLED (colores bytes, setIntensity bytes) lo hace:
Por ejemplo, para encender el LED de POWER de color naranja en la mitad de su intensidad, usted puede llamar a la función como bramido:setPowerLED (128, 128);
Encender los 4 LEDs restantes, deberán utilizarse las siguientes funciones:
setDebrisLED(ON);
setDockLED(ON);
setSpotLED(ON);
setWarningLED(ON);
Todas las funciones anteriores tiene un código similar a este:
void setDebrisLED(bool enable)
{
debrisLED = enable;
Roomba.write(139);
Roomba.write((debrisLED ? 1 : 0) + (spotLED ? 2 : 0) + (dockLED ? 4 : 0) + (warningLED ? 8 : 0));
Roomba.write((byte)color);
Roomba.write((byte)intensity);
}
Básicamente, la diferencia será la línea: debrisLED = habilitar; debe modificarse permitiendo a cada uno de los otros LEDs (spotLED, dockLED, warningLED).
Envío de mensajes
Roomba tiene cuatro 4 displays de 7 segmentos que puede utilizar para enviar mensajes de dos maneras::
[163] código: Dígitos LED crudo (numérico)
[164] código: Dígitos LED de ASCII (aproximación de letras y códigos especiales)
Para mostrar números debe enviar el código [163], siguiendo las 4 digitas a mostrar. La función: setDigitLEDs (bytes digit1 digit2 bytes, digit3 bytes, digit4 bytes) lo hace para usted:
Por ejemplo, para mostrar «1, 2, 3, 4», debe llamar a la función: setDigitLEDs (1, 2, 3, 4);
Con el código [164], es posible enviar aproximación de ASCII.
La función setDigitLEDFromASCII (dígitos de byte, char letra) hace esto para nosotros:
void setDigitLEDFromASCII(byte digit, char letter)
{
switch (digit){
case 1:
digit1 = letter;
break;
case 2:
digit2 = letter;
break;
case 3:
digit3 = letter;
break;
case 4:
digit4 = letter;
break;
}
Roomba.write(164);
Roomba.write(digit1);
Roomba.write(digit2);
Roomba.write(digit3);
Roomba.write(digit4);
}
Para simplificar, crear una nueva función para enviar los 4 dígitos al mismo tiempo:
void writeLEDs (char a, char b, char c, char d)
{
setDigitLEDFromASCII(1, a);
setDigitLEDFromASCII(2, b);
setDigitLEDFromASCII(3, c);
setDigitLEDFromASCII(4, d);
}
Por ejemplo, para mostrar «STOP», usted debe llamar a la función: writeLEDs (‘s’, ‘ t ‘, ‘ o ‘, ‘p’);
Mover la Roomba
Para la movilidad, Roomba tiene 2 motores independientes que pueden programarse para ejecutar 500mm/s. Hay varios comandos que pueden utilizarse para controlar el robot. Los principales son:
Código [137]: Unidad == > debe enviar +-velocidad en mm/s y +-radio en mm
Codigo [145] de código: Impulsión directa == > debe enviar izquierda velocidad en mm/s (+ para adelante y para atrás)
Código [146]: Unidad PWM == > debe enviar +-datos PWM para la izquierda y derecha las ruedas
A continuación el código para estas 3 opciones:
void drive(int velocity, int radius)
{
clamp(velocity, -500, 500); //def max and min velocity in mm/s
clamp(radius, -2000, 2000); //def max and min radius in mm
Tenga en cuenta que la función de «fijar» define los valores máximos y mínimos que se permitieron la entrada. Esta función se define en el archivo rombaDefines.h:
#define abrazadera (valor, min, max) (valor < min? min: valor > max? max: valor)
Utilizando el código anterior, se pueden crear funciones más simples para Roomba alrededor de:
/—————————————————————
void turnCW(unsigned short velocity, unsigned short degrees)
{
drive(velocity, -1);
clamp(velocity, 0, 500);
delay(6600);
drive(0,0);
}
//—————————————————————
void turnCCW(unsigned short velocity, unsigned short degrees)
{
drive(velocity, 1);
clamp(velocity, 0, 500);
delay(6600);
drive(0,0);
}
Tenga en cuenta que para girar en ángulo, debe calcularse el argumento de «retraso» específicamente para una velocidad dada
A continuación algunos ejemplos que pueden utilizar para probar los motores:
turnCW (40, 180); girar 180 grados hacia la derecha y parada
driveWheels (20, -20); vuelta
driveLeft(20); girar a la izquierda
Para las pruebas de los motores, es bueno añadir un pulsador externo (en mi caso conectado al Arduino pin 12), para que puedan descargar el código de Arduino, a partir de la Roomba, pero parando la ejecución hasta que se pulsa la tecla. Generalmente, para los motores de prueba lo puedes hacer en la parte de configuración del código.
Como ejemplo, consulte el código de Arduino simple abajo (nota que el código usa funciones y definiciones desarrollaron antes):
#include «roombaDefines.h»
#include
// Roomba Create2 connection
int rxPin=10;
int txPin=11;
SoftwareSerial Roomba(rxPin,txPin);
Para controlar Roomba de modo inalambrico vamos a instalar un módulo Bluetooth (HC-06) a nuestro Arduino. El diagrama de arriba muestra cómo hacerlo. Suele ser el HC-06 settle up de fábrica con una velocidad de 9.600. Es importante cambiarlo a 19.200 para ser compatible con la velocidad de la comunicación de Arduino-Roomba. Usted puede hacer que el envío un comando AT para el módulo (AT + BAUD5 donde «5» es el código de 19.200).
Para controlar la Roomba, utilizaremos una aplicación genérica que fue desarrollada por jrovai para el control de robots móviles, con el MIT AppInventor 2: «MJRoBot BT Remote Control». La aplicación puede descargarse gratuitamente de la tienda de Google a través del enlace: aplicación: MJRoBot BT Remote Control.
La aplicación tiene una interfaz sencilla, lo que le permite enviar comandos al módulo de BT en ambos, modo de texto o directamente a través de botones preprogramados (cada vez que se pulsa un botón, un carácter se envía):
w: hacia adeñante
S: hacia atras
d: derecho
a: izquierda
f: parada
p: ON / OFF (no usado en esta primera parte)
m: manual / automático (se utiliza para reiniciar Roomba si un obstáculo como un acantilado se encuentra en modo seguro)
+: Velocidad +
-: Velocidad –
También puede enviar otros comandos como texto si es necesario. También hay una ventana de texto para los mensajes recibidos desde el módulo de BT. Esta característica es muy importante durante la fase de prueba, puede ser utilizado en la misma forma que el «Serial Monitor».
El loop() parte del código será «escuchando» el dispositivo bluetooth y dependiendo del comando recibido, tomar una acción:
void loop()
{
checkBTcmd(); // verify if a comand is received from BT remote control
manualCmd ();
}
La función checkBTcmd() se muestra a continuación:
void checkBTcmd() // verify if a command is received from BT remote control
{
if (BT1.available())
{
command = BT1.read();
BT1.flush();
}
}
Una vez que se recibe un comando, la función manualCmd() tomará la acción apropiada:
void manualCmd()
{
switch (command)
{
case ‘m’:
startSafe();
Serial.print(«Roomba in Safe mode»);
BT1.print(«Roomba BT Ctrl OK – Safe mode»);
BT1.println(‘\n’);
command = ‘f’;
playSound (3);
break;
case ‘f’:
driveStop(); //turn off both motors
writeLEDs (‘s’, ‘t’, ‘o’, ‘p’);
state = command;
break;
case ‘w’:
drive (motorSpeed, 0);
writeLEDs (‘ ‘, ‘g’, ‘o’, ‘ ‘);
state = command;
break;
case ‘d’:
driveRight(motorSpeed);
writeLEDs (‘r’, ‘i’, ‘g’, ‘h’);
break;
case ‘a’:
driveLeft(motorSpeed);
writeLEDs (‘l’, ‘e’, ‘f’, ‘t’);
break;
case ‘s’:
drive (-motorSpeed, 0);
writeLEDs (‘b’, ‘a’, ‘c’, ‘k’);
state = command;
break;
case ‘+’:
if (state == ‘w’)
{
motorSpeed = motorSpeed + 10;
if (motorSpeed > MAX_SPEED)
{
motorSpeed = MAX_SPEED;
}
command = ‘w’;
} else {command = state;}
break;
case ‘-‘:
if (state == ‘w’)
{
motorSpeed = motorSpeed – 10;
}
if (motorSpeed < MIN_SPEED )
Varias de las funciones que el autor ha creado en su programa se basaron en la biblioteca de crear 2 desarrollada por Dom Amato. Puede descargar la librería completa en: https://github.com/brinnLabs/Create2.
Aunque vivimos sin duda una gran revolución con la impresión 3d, de forma silenciosa ,pero firme , también estamos viviendo un considerable avance en el mundo de las maquinas tradicionales de todo tipo (fresadoras, piro-grabadoras, dibujo, corte, láser, etc. ) , eso si ,controladas no por maquinas especificas diseñadas para su control como antaño , sino simplemente por cualquier ordenador y por potentes software de control que sin duda permite obtener resultados completamente profesionales.
Estas maquinas conocidas como router CNC o simplemente CNC en efecto son adecuadas para tallar madera, acrílico o metal blando, madera nativa, PCB CCL, PVC y un largo etcétera lo cual permite infinidad de aplicaciones para los profesionales y también para los aficionados al bricolaje y a la electrónica dado que su precio así como también su tamaño han hecho que estén accesibles a casi todos los bolsillos .
Un router CNC se puede simplemente comprar ya montado , en kit con todos los componetes ya preparados para montarlos por uno mismo o fabricarlo por uno mismo (en la web de OpenBuilds han publicado unos interesantes vídeos sobre una maquina llamada OX y todo el proceso ), pero en todo caso su coste suele ser una fracción de lo que cuesta una impresora 3d en parte porque normalmente se va a mover sobre solo dos ejes y no requiere otras partes que añaden coste y complejidad al equipo ( un eje z largo , el extrusor o la cama caliente)
Una de las utilidades que ya comentamos en un post anterior es la posibilidad de realizar placas de circuito impreso (PCB), pero hay muchísimas opciones como cortar madera, realizar grabados , escultura y un largo etcétera
Para fabricar placas de circuito impreso con una maquina CNC comentamos en este post , el potente programa OPenCNCPilot que nos permite obtener resultado muy profesionales precisos y limpios sin usar peligrosos líquidos peligrosos, pero para otros usos , sin duda bCNC es otro programa muy versátil que permite controlar CNC que funcionen a través de arduino y que usen el firmware grbl.
bCNC
Este programa en un gestor GRBL es un CNC command sender, autoleveler y editor de g-code
Cuenta con un emisor avanzado de códigos g para GRBL . Este programa es multiplataforma (Windows, Linux, Mac) escrito en python. El remitente es robusto y rápido capaz de trabajar muy bien con hardware antiguo o lento como Rasperry PI (como fue validado por el mainter de GRBL en pruebas pesadas) y como vamos a ver tiene infinidad de opciones.
Como no podía ser de otra manera también permite realizar placas de circuito impreso:
Necesitará los siguientes paquetes para ejecutar bCNC
tkinter el conjunto de herramientas gráficas para python Dependiendo de su python / OS ya puede estar instalado o bajo los nombres tkinter, python-tkinter, python-tk
pyserial o bajo el nombre python-serial, python-pyserial
python-image-tk: las bibliotecas PIL para el mapa de altura de autolevel (opcional)
python-opencv: para la transmisión por webcam en el colgante web(opcional)
Expanda el directorio o descárguelo desde github y ejecute el comando bCNC
Puede modificar la mayoría de los parámetros desde la página «Herramientas -> Máquina». Solo los cambios / diferencias del archivo de configuración predeterminado se guardarán en su directorio de inicio $ {HOME} /. BCNC o ~ / .bCNC
La configuración predeterminada se almacena en bCNC.ini en el directorio de instalación. (POR FAVOR NO CAMBIE ESTE)
Menú editor Gcode
Entre sus características principales esta el editor de gcode, que nos permite hacer modificaciones sin tener que volver al software CAM.
Entre las opciones del menú de edición podemos nombrar las funciones de copiar y pegar lo que nos permite duplicar una porción del código, opciones de selección de bloques de código lo que nos facilita la edición.
El botón insertar nos permite, agregar lineas de código dentro de un bloque, clonar nos permite duplicar bloques, ademas tenemos botones para eliminar bloques, habilitar o deshabilitar bloques para que estos no se ejecuten pero sin borrarlos.
Los botones de Subir y Bajar , cambian el orden en el que se ejecuta un bloque de código,esto nos permite ordenar el gcode a nuestro gusto, y también tenemos una herramienta para invertir el orden de los bloques seleccionados.La herramienta mover nos permite cambiar la posición de los bloques simplemente seleccionando un bloque y arrastrarlo a la posición deseada. Necesaria para mover bloques que fueron clonados o copiados.El botón de establecer origen nos permite mover todo el trabajo, a la posición donde hagamos clic con el ratón.
Adicionalmente tenemos herramientas de rotar y reflejar y botones que nos permiten invertir el la dirección del corte.
Menú Herramientas
En el menú herramientas o tools tenemos la posibilidad de configurar los materiales o sustratos que usamos y guardarlos en una base de materiales y lo mismo podemos hacer con las herramientas de corte. Esto nos sirve en caso de que generemos las trayectorias directamente desde bCNC.
Ya que en bCNC es posible importar directamente vectores DXF o SVG y hasta tiene soporte para STL.
Dentro de las opciones cam, tenemos herramientas para hacer cortes, perfilados y taladrados.También podemos ahuecar una superficie, generar pestañas y aplanar superficies.
Y aqui vienen realmente las posibilidades de este programa :
E
BOWL Bowl, sirve para generar una concavidad o como su propio nombre loo describe un bowl.
BOX :Box es una herramienta para generar cajas con encastres como las que se encuentran en la web pero esta integrada con el programa , ademas las trayectorias generadas con para corte con fresa o con router cnc ya que compensa la circunferencia de la herramienta.Para poder generar una caja lo único que tenemos que hacer es darle los valores de altura, ancho, y profundidad ( X, Y, Z), ademas de la cantidad de encastres que queremos en cada cara y seleccionar el tipo de corte perfilado (Por fuera) , o corte (por sobre).Y por ultimo presionamos el botón ejecutar y se nos genera el g-code de nuestra caja con encastres.
Driller:El Driller nos permite generar trayectorias de taladrado, a lo largo de un vector, como se puede ver en la imagen hemos creado una seria de taladrados a lo largo de un vector con forma de circulo.
Aplanado (Flatten):Esta herramienta es muy simple nos permite generar una trayectoria de aplanado, con nuestro router cnc, solo tenemos que darle las coordenadas de los ejes X e Y para el inicio, y luego el alto, el ancho y la profundidad final del aplanado.Luego damos en el botón ejecutar y se nos genera el código G correspondiente.
Gear – Generador de Engranajes:Esta opción nos permite generar engranajes, los parámetros que debemos pasarle con el numero de dientes el angulo del diente y el diámetro.
Heightmap – Mapas de altura:Los mapas de altura son imágenes en escala de grises, que el programa interpreta como ALTOS los colores obscuros y como bajos los colores claros.Bcnc tiene la función heightmap que lo que hace es generar una trayectoria de corte a distintas profundidades generando así un relieve o corte en 3d.Pero en vez de usar un modelo 3d se pueden usar imágenes o fotografías pero para obtener buenos resultados se requiere que la imagen tenga las condiciones adecuadas de luz y sombras.
Pyrograph – Pirograbado con router cnc: El pirograbado es similar al grabado con láser, pero en vez de utilizar un haz de luz láser para el grabado, (lo cual es bastante peligroso si no se toman las medidas de protección correspondientes ) , utilizando en su lugar una punta caliente o pirograbador. Bcnc cuenta con una herramienta para generar gcode para pirograbado, este gcode lo que hace es recorrer la imagen variando la velocidad de avance o feed rate para así lograr mayor o menor grado de quemado sobre la madera o material a grabar, sin cambiar la altura del eje Z.Para hacer una trayectoria de pirograbado necesitamos una imagen de preferencia en escala de grises, y luego pasar los parámetros.Diámetro de la punta, altura de trabajo en Z, tamaño máximo, velocidad mínima, velocidad máxima, dirección del recorrido, y la imagen a grabar.Luego damos click en execute y se nos genera el gcode correspondiente, si ven la imagen anterior parece que el gcode solo fuera un recorrido recto, pero eso es por que solo varia la velocidad de avance de la herramienta no la altura en Z.
Spirografo – Generador de patrones espirografico.:Interesante si le gustan los espirografos….
Text Generator – Generador de Texto para CNC o Imagen Texto:Interesante herramienta para generar texto para cortar letras con tu cnc o Láser.Solo tendremos que introducir el texto deseado elegir el archivo del tipo de fuente que queramos, establecer parámetros como anchura de los caracteres y listo.Pero esta herramienta tiene una función extra que es la capacidad de generar un texto a partir de una imagen.
Menu maquina o (machine)
En este menú tendremos la posibilidad de configurar las características de nuestro router cnc o Láser. Primero configuramos las unidades, por defecto vienen configurado para milímetros así que a menos que queramos trabajar en pulgadas no deberemos tildar la opción UNITS (INCHES).
La siguiente opción es LaserCutter esta opción solo se deberá activar si en vez de un router cnc tenemos un cortador o grabador Láser. Lo que hace esta opción es activar el uso del los comandos gcode para control de un modulo láser por ttl. Esta opción esta disponible para la versión del firmware GRBL V1.1
En los siguientes nueve parámetros podremos configurar las aceleraciones, velocidades, y recorrido máximo para cada eje de nuestro router o maquina cnc.La opción decimal digits nos permite configurar cuentos decimales le enviara el programa al firmware en los movimientos de los ejes.Luego tenemos resolución de arcos, por defecto en 0,1.
Startup es el gcode de inicio que se envía a la maquina por defecto G90 ( distancias absolutas) si queremos movimientos incrementales tenemos que poner ( G91).Spindle RPM maximas y minimas.
Y por ultimo el header gcode y footer gcode, estos son los gcodes de inicio y fin nos sirve para por ejemplo hacer que se encienda nuestro husillo y que se ajuste a las rpm deseadas antes de empezar y el de fin nos sirve para mover los ejes a una posición deseada luego de finalizado el corte o trabajo.
Control
En esta pestaña es donde vamos a pasar ms tiempo ya que aquí están todas las herramientas de control mas comunes de cualquier software para cnc.
Primero tenemos los botones para crear, abrir y guardar gcode o cualquier archivo con el que vallamos a trabajar. Ademas tenemos el botón de HOME, que lo que hace es enviar el comando G28.
Lo que hace es mover los ejes en busca de los finales de carrera, luego el botón de unlock que nos permite desbloquear nuestra maquina ( recordar que GRBL firmware tiene una opción para bloquear los movimientos de los ejes. ), y por ultimo el reset que reinicia el firmware.
Ahora le toca el turno a una de las funciones que yo mas valoro de este software, y aunque es muy simple también resulta muy util.
Scan
SCAN este botón nos permite hacer un recorrido por los margenes de nuestro vector, gcode o diseño. De modo que al presionarlo los ejes X e Y se moverán recorriendo los limites del espacio que ocupa el modelo. Esta función es muy útil cuando deseamos saber si lo que vamos a cortar, entra dentro del sustrato o de la pieza a cortar. También podremos determinar si la posición a cortar sera la que necesitamos. Hay que tener la precaución de levantar el eje Z a una posición en la que no tenga riesgos de colisionar con la pieza o algún otro obstáculo.
Debajo de scan tenemos otros botones que son 2, 3, 4, 5 y 6, estos botones son programables o personalizables aquí podemos escribir comandos.
Por ultimo los botones de control de gcode: Start inicia el corte o trabajo, pause nos permite pausar el trabajo y stop detienen el proceso que se este ejecutando. Luego tenemos el visualizador del estado de la maquina, donde veremos el estado de la conexión con el cnc, las posiciones de trabajo y las posiciones de la maquina.
Debajo de la posición de caga eje tenemos 3 botones con la inscripción X=0, Y=0 y Z=0. Estos nos permiten establecer el cero de cada eje para la posición de trabajo.
Ahora vemos la sección workspaces, donde tenemos 6 espacios de trabajo (G54, G55, G56, G57, G58 y G59) donde podremos personalizar distintas configuraciones para aplicarlas al trabajo que estemos por realizar. Aquí podremos definir valores como el el modo de desplazamiento (absoluto o incremental), las unidades de trabajo (mm o Pulgadas) plano de trabajo (XY, YZ o ZX),
Control de los ejes
Aquí tendremos acceso a los botones correspondientes al control manual de los ejes de nuestro cnc donde ademas podremos seleccionar la cantidad de unidades de desplazamiento.También vemos que podremos controlar el feed rate, al vuelo mientras estamos realizando un corte o trabajo con nuestro cnc.
Y de el mismo modo podremos acceder al control de rpm de nuestro husillo.
Visor de trabajo
A la derecha tenemos el visor del gcode o archivo que estemos por ejecutar, aquí podremos seleccionar entre distintos planos de vista, ( XY, XZ, YZ, ISO1, 2, 3).Ademas tenemos los controles de zoom in y zoom out y mostrar todo.Ahora en la sección tool tenemos la herramienta de selección que lo que nos permite es seleccionar partes de nuestro gcode para realizar acciones como eliminar o desactivarlas entre otras.b También tenemos la herramienta mover visor que lo que hace es mover la posición del modelo en el visor.
Y ahora vemos las funciones MoveGantry y Set Work Position,
Move gantry nos permite mover con 2 click el cabezal a la posiciones de nuestro gcode que le indiquemos en el visor.Asi por ejemplo si yo hago click en move Gantry y luego hago click en el centro de mi gcode formado por 2 círculos concéntricos, los ejes X e Y se moverán hasta alcanzar la posición señalada con el puntero.Esto es muy útil por ejemplo para saber donde estará el centro de mi gcode en el material o pieza a cortar, de modo que con esta herramienta podremos movernos con 2 clics a cualquier posición de nuestro plano de visión. Tener en cuenta que los ejes se moverán de a cuerdo al plano de visión, de modo que si estamos en el plano X-Z los ejes que se moverán serán X y Z.
SetWorkPosition;Esta botón también es uno de los mas usados en Bcnc ya que nos permite establecer la posición de trabajo de nuestros ejes con solo hacer 2 clicks.Como en el ejemplo anterior, con set work position podremos con solo 2 clicks decirle al programa que en la posición donde hicimos click es donde están posicionados nuestros ejes X e Y en este momento. Otro ejemplo de uso seria, mover nuestros ejes a una posición determinada donde queremos que quede el centro de nuestro trabajo, y luego damos click en SetWorkPosition y luego hacemos click en el centro de nuestro gcode en el visor.
Ademas en la sección Draw tenemos botones para activar o desactivar la visualización de las diferentes partes de nuestro trabajo. Primero tenemos el botón Display Axis, que lo que hace es activar o desactivar la visualización de los ejes del visor.Después tenemos Grid Lines que activa o desactiva la visualización de la cuadricula.
Display Margins lo que hace es activar o desactivar la visualización de los margenes.
Por ultimo activar o desactivar la visualización de los movimientos G1, G2 y G3 o los movimientos de corte y también tenemos un botón para desactivar los movimientos G0 o los movimientos Rápidos.
Terminal
Ademas bcnc nos provee de un terminal desde el que podremos enviar comando manuales a nuestro cnc, en grbl es muy útil por ejemplo para hacer la configuración de los valores de la eeprom. Y para dar por finalizado este recorrido por las características y herramientas de bcnc, nos vamos a la pestaña files: Aquí vamos a encontrar la configuración de la conexión con nuestra maquina, donde podremos seleccionar el puerto serie donde tenemos conectado nuestro arduino, y la velocidad de comunicación o baudrate.
Hemos recorrido la mayoría de las funciones disponibles en este estupendo software Libre para control de una CNC llamado Bcnc.
Un circuito impreso no es mas que una placa aislante sobre la cual se dibujan «pistas» e «islas» de cobre las cuales formaran el trazado de dicho circuito, partiendo de un plano creado normalmente desde un esquema eléctrico que se pasa a pcb con un programa de enrutamiento ,aunque obviamente ese se puede hacer de forma manual.
Para empezar tenemos que decidir que material vamos a precisar pues si se trata de un circuito donde vayan a estar señales de radio o de muy alta frecuencia tendremos que usar placas de fibra de vidrio o de pertinax, que es un material poco alterable por la humedad o de lo contrario, para la mayoría de las aplicaciones, con placa de fenólico , baquelita , etc pueden ser mas que suficiente.
Tradicionalmente los PCB se realizaban a partir de un método foto-químico : se exponía con luz una placa de cobre cubierta de emulsión fotosensible con un acetato transparente que contenida el diseño de las pistas , luego se revelaba y finalmente se atacaba con un ácido , el cual normalmente era cloruro ferrico(FeCI3) o una disolución de agua oxigenada de 100 volúmenes y agua fuerte(H2SO4)
Mas modernamente con las fotocopiadoras o las impresoras láser , se ha sustituido la placa fotosensible por simplemente una fotocopia con el diseño del pcb que se pone cara abajo con la placa virgen y se plancha el conjunto
Después del planchado se humedece en agua caliente , se retira el papel (con cuidado de romper la tiras de tinta ) y luego se ataca finalmente con un ácido que también puede ser una disolución de agua oxigenada de 100 volúmenes y agua fuerte(H2SO4) o cloruro ferrico(FeCI3).
Este proceso ultimo por cierto requiere que pulamos con lana de acero o el estropajo de aluminio hasta que quede brillante pues dependiendo de como quede de limpia se pegará mas o menos el toner (de nuestra fotocopia) en la placa.
Hasta ahora hemos descrito como se hacían ( y/o se siguen haciendo) muchas placas de circuito impreso para uso personal pero ¿y si existiera algún otro método menos engorroso,limpio, eficiente,profesional y menos peligroso para hacer una placa de circuito impreso?
Pues en efecto se puede hacer y gracias a una máquina CNC, que no solo sirve para crear piezas de todo tipo, sino que también puede servir para hacer placas PCB caseras en muy poco tiempo (por ejemplo diseñadas com EAGLE y PCB-gcode)
Un programa muy famoso es bCNC que nos permite controlar un CNC que funcione a través de arduino y que usen el firmware grbl. Este programa es el mas completo en cuanto a funciones, pero quizás tenga demasiadas opciones que dificultan que nos centremos en el proceso que vamos buscando , que es el de creación de pcb mediante el pulido de las zonas que no deben conducir con una herramienta controlada por control numérico
Precisamente para superar las dificultades de bcnc surge OpenCNCPilot , que es un sencillo programa creado específicamente para crear placas PCB con una maquina CNC .
Podemos ver una descripción general rápida en YouTube:
OpenCNCPilot es un emisor de código G compatible con GRBL.
Su característica principal es su capacidad de explorar áreas definidas por el usuario para alabeo y envolver la trayectoria alrededor de la superficie curva . Esto es especialmente útil para grabar superficies metálicas con cortadores en forma de V donde cualquier desviación en la dirección Z resultará en trazas más anchas o más angostas, por ejemplo, para el aislamiento de PCBs donde el alabeo daría lugar a rastros rotos o en corto.
Está escrito en C # y usa WPF para su interfaz de usuario. Lamentablemente, esto significa que no se ejecutará en Linux, ya que Mono no es compatible con WPF. La ventana gráfica 3D se gestiona con HelixToolkit.
Instalación y primeros pasos
Para instalar este programa se requiere .NET 4.6 ,Vaya a la sección de Versiones y descargue los últimos binarios (o compílelo desde la fuente).Descomprima todos los archivos en su disco duro y ejecute «OpenCNCPilot.exe«
Asegúrese de utilizar la versión 1.1f de GRBL (las versiones posteriores pueden funcionar pero aún no han sido probadas)
Antes de la primera ejecución, debe seleccionar un puerto serie, el selector está oculto en el menú de configuración al que puede acceder en la pestaña «Máquina».Aparte de eso, no es necesario modificar ninguna configuración de modo que seleccionado podra conectarte a su máquina.
Abra archivos gcode o height map arrastrándolos a la ventana, o usando los botones correspondientes.
Para crear un nuevo mapa de altura, abra la pestaña «Sonda» y haga clic en «Crear nuevo».Se le pedirá que ingrese las dimensiones. Asegúrese de ingresar las coordenadas reales, por ejemplo, cuando su trayectoria esté en la dirección X negativa, ingrese «-50» a «0» en lugar de «0» a «50».Verá una vista previa del área y los puntos individuales en la ventana principal
Para explorar el área, configure su sistema de coordenadas de trabajo ingresando «G92 X0 Y0 Z0» en su origen seleccionado, asegúrese de conectar el A5 de su Arduino a la herramienta y GND a su superficie , y presione «Ejecutar».
Una vez que haya terminado de explorar la superficie, cargue el archivo gcode que desea ejecutar y presione el botón «Aplicar mapa de altura» en la pestaña «Editar».Ahora puede ejecutar el código con el botón «Inicio» en la pestaña «Archivo».
En la ultima version hay una opción muy interesante, casi diría que imprescindible, como el autonivelado por malla. Eso permite que la profundidad de corte siempre sea la misma y el resultado quede perfecto.