- Un teclado viejo que no se use, lo único que se rescata son los pulsadores como entradas del Arduino
- Un Arduino Uno o como finalmente descubrí que era mejor el Arduino Leonardo pues tiene interface midi, directo, esto ayuda que no tengas que hacer un programa adicional para mapear las salidas de Arduino Uno y convertirlas en midi, en concreto con Arduino Leonardo puedo usar el teclado midi hasta en mi celular (con Garage Band u otro)
- Diodos para evitar el ghosting, esto ultimo me dio dolores de cabeza pues en algunas combinaciones de teclas simplemente no sonaban juntas, ellos porque al conectarse a un mismo punto la corriente se devolvía por donde no debía.
Edward Angelino
Optimización, Series Temporales, Programación Qt, Electricidad, Música, Aeromodelismo.
martes, 7 de enero de 2025
Teclado Midi con Arduino Leonardo.
martes, 6 de abril de 2021
Series Restringidas :
Uno de lo principales problemas que se enfrenta al momento de hacer pronósticos de series temporales con la metodología ARIMA univariante, es la posibilidad de que el valor escocástico medio no necesariamente represente los valores anuales que se esperan, aunque el intervalo de confianza si lo considere ver gráfico.
En el gráfico, el pronóstico original (negro) es la estimación inicial con el modelo Arima, la linea roja recortada representa la serie que se espera y que suma los valores meta anuales.
El intervalo de confianza (color gris) nos brinda un espacio estadísticamente valido para poder obtener estimaciones mensuales que satisfacen condiciones anuales, cómo es el caso del gráfico en el cual se impuso valores promedios anuales (7.5% todos los siguientes años).
Serie Original | % | Serie Restringida | % Impuesto | |
2020 | 38567.79 | 38567.79 | ||
2021 | 42083.98 | 9.1% | 41460.38 | 7.5% |
2022 | 43839.39 | 4.2% | 44569.91 | 7.5% |
2023 | 45506.84 | 3.8% | 47912.66 | 7.5% |
El indicador que mide si las tasas son compatibles y por ende que se esta restringiendo adecuadamente la serie original considerando el intervalo de confianza (95%) es el Kcal, el cual se compara con los grados de libertad (χ2), este estadístico verifica si la restricción esta dentro de la region de compatibilidad o intervalo de confianza.
Kcal < χ2
7.347649235181968 < 7.8147
Dado que en el cálculo actual estamos considerando casi los limites el valor es cercano al máximo, este valor es 0.0 cuando se estima con las mismas tasas.
Con esta metodología se puede unir horizontes temporales de modelos Arima, en el caso mostrado se une estimaciones econométricas anuales ( variables explicativas son el PBI, Precio de energía y Población), con el modelo Arima univariante (puramente data histórica de la serie).
El modelo de restricciones utiliza como datos.
Datos del modelo Arima:
Ecuaciones de diferencias regular y estacional de la serie (Función L) = (1-L)*(1-L^12)
Ecuaciones de media móvil (Función de Theta y L) = (1-0.159399*L-0.197145*L^2)*(1-0.925187*L^12)
Ecuación de autoregresivo (Función de Phi y L) = 1
Desviación estándar (SD) del modelo = 0.011548
⎛ 12⎞ ⎛ 2 ⎞
⎝1 - 0.925187⋅L ⎠⋅⎝- 0.197145⋅L - 0.159399⋅L + 1⎠
Yt = ─────────────────────────────────────────────────── * Et
⎛ 12⎞
(1 - L)⋅⎝1 - L ⎠
Pronóstico a restringir.
Pronóstico historia y
Pronostico sin atípicos. (si se tiene modelado atípicos ver figura)
El resultado se muestra en la primera figura.
Implementación del Modelo de Restricciones:
Los cálculos necesarios se realizan con rutinas Python en Julia para resolver ecuaciones de manera algebraica, considerando la metodología explicada en las referencias [1][2][3]
se tiene que instalar el programa ArimaRest (by Edward Angelino), en Julia.
(v1.0) pkg> add https://github.com/EdwardAngelino/ArimaRest.jl
julia> using ArimaRest
julia> datos=leedatostxt("DatosArimaRest.txt")
julia> restringido(datos,"salida.csv")
Asimismo se tiene una interface gráfica (SeriesRest) hecha en QT (C++) que llama al programa ArimaRest internamente.
cuyo instalador se tiene en el siguiente link, previamente deberas tener instalado Julia y ArimaRest.
[1] Pronósticos con restricciones para series de tiempo, Jesús Alberto Albarracín, Harney Palacios Bejarano, 2011. Link
[2] Pronósticos restringidos con modelos de serie de tiempo multiples y su aplicación para evaluar metas de política económica en Mexico, Victor M, Guerrero 2005. Link
[3] Pronósticos con restricciones en series de tiempo univariadas: Aplicación al seguimiento del PIB de Mexico en 2001, Victor M. Guerrero 2001. Link
martes, 24 de octubre de 2017
Como hacer una CNC con restos de DVDs usando ARDUINO
Hardware
------------
1. Arduino UNO
2. CNC Shield
3. Drivers de motores DRV8825
4. Fuente de Poder 12V
5. Cables
6. Protoboard
7. Motores de paso de 2 DVDs
8. Servo Turnigy pequeño
9. Bastidor con dos MDF y algo para el lapicero.
Programas
-------------
1. Arduino IDE
2. GRBL-servo master
3. Universal G-Code Sender.
4. Inkscape
5. Extension Inkscape para servo.
El controlador Arduino, CNC Shield y el driver de motores se conectan, luego se tiene que ajustar la tensión de operación de esos motores, maso menos la corriente que circula Corriente limite = VREF * 2 (Amp), yo le puse 200 mV se obtiene 400 mA, lo cual es mas que suficiente para los motores de paso de DVD. para ello se tiene que energizar CNC Shield y con un perillero modificar la tensión, usando como punto positivo el potenciometro, también se puede conectar con cocodrilo en el perillero.
Luego instalamos Motores de paso, son 4 cables 2 bobinados si tuviera que invertir el sentido se cambia entre pares de bobinados, para determinar cada par se conecta un diodo y mueve el motor con la mano debería encender cada para de bobinas.
Finalmente conectamos el servo 5V (rojo), GND (Negro) y el de señal (amarillo o color mas claro) en Z+ ya que esté esta conectado directamente a D11 en Arduino ver gráfico.
Conectamos Arduino a la PC con el cable USB , y CNC Shield con 12 V, yo tenia la fuente con la que cargo baterías LiPo, asi que lo puedo utilizar. Se tiene que esperar que el driver configure en windows o Mac Arduino, luego al arrancar Arduino IDE, se tiene que direccionar el puerto (COM*) y le nombre de Arduino, se comprueba leyendo datos de la placa desde el mismo menu de herramientas.
Una vez comprobado que todo funciona adecuadamente, subimos GRBL, el cual es un firmware que permite a Arduino operar CNC Shield y motores de paso copiamos en /Documentos/Arduino/ Librerias la carpeta GRBL -Servo. Luego lo levantamos desde Arduino en la opcion Archivo/ejemplos.
Abrimos Universal G-Code Sender, escojamos puerto COM que obtuvimos en Arduino IDE y baud: 115200, si todo esta bien no hay mas mensajes y podemos entrar comandos desde linea comandos del programa.
$$ : para ver configuración.
M5 : para poner el servo en posición central.
M3S030: Para mover el servo 30 grados.
mas información en este link, En nuestro caso se tuvo que invertir el sentido de giro del servo.
luego pruebas paso a paso con X+, X-, Y+, Y- (botones) esta configuración permite como máximo un dibujo de 33 x 33 mm. para efectos del inkscape.
hacer dibujos en Inkscape: El concepto es vectorizar los dibujos que se quiera obtener, primero se importa el dibujo luego se convierte a vectorizado, finalmente ejecutar la extensión Electronica Hoje, se incluyendo los siguientes parámetros:
M3, M5, 2000, 2000, 30, 0.5
Directorio y el nombre de archivo
si todo OK, ya tenemos el archivo gcode correcto, este lo abrimos en Gcode Sender y visualizamos, verficamos que no exceda los limites de impresion y enviamos.
En este momento hice pruebas con lapiz o lapicero, con resultado regular, me falta probar con lapicero de tinta, con el que espero tener mejores resultado. Mucho tiene que ver el bastidor y la prescicion.
lunes, 25 de abril de 2016
Hoy - Gian Marco
todos los días que el tiempo
no me dejó estar aquí.
Tengo una fe que madura,
que va conmigo y me cura
desde que te conocí.
Tengo una huella perdida
entre tu sombra y la mía,
que no me deja mentir.
Soy una moneda en la fuente;
tú mi deseo pendiente
mis ganas de revivir.
Tengo una mañana constante
y una acuarela esperando
verte pintado de azul.
Tengo tu amor y tu suerte
y un caminito empinado.
Tengo el mar del otro lado:
tú eres mi norte y mi sur
(Coro)
Hoy voy a verte de nuevo
voy a envolverme en tu ropa,
susúrrame en tu silencio
cuando me veas llegar.
Hoy voy a verte de nuevo,
voy a alegrar tu tristeza:
vamos a hacer una fiesta
pa' que este amor crezca más.
Tengo una frase colgada,
entre mi boca y mi almohada,
que me desnuda ante ti.
Tengo una plaza y un pueblo
que me acompañan de noche
cuando no estas junto a mí.
Tengo una mañana constante
y una acuarela esperando
verte pintado de azul.
Tengo tu amor y tu suerte
y un caminito empinado.
Tengo el mar del otro lado:
tú eres mi norte y mi sur.
(Repetir coro)
viernes, 6 de junio de 2014
Instalar CAS en TI-Nspire CX non CAS
Indagando en paginas como las indicadas lineas abajo, entendí que el hardware de ambas calculadoras son iguales solo que una tiene restricciones (software control) para no poder bajar de versión o actualizar a la CAS, y es solo por una estrategia comercial, para suerte mía.
En fin, para liberar esta máquina se tiene que hacer varias cosas entre ellas copiar archivos en el área de Documentos.
1. Se debe instalar TI-Nspire Computer Link para conectar a la PC
2. Asimismo el software para utilizar y navegar por carpetas de la TI TI-Nspire Student Software
3. Para hacer la transformacion se requiere correr nless 3.1, intercambia entre SO inclusive permite tener dos SO.
4. Asimismo nsNandMgr el cual permite eliminar las restricciones al inicio del arranque o instalacion de OS.
5. TNOC para disminuir el tamaño de los SO y quitarle algunas cosas como Boot2.
6. TI-NspireCXCAS-3.1.0.392.tcc el SO que incluye CAS (ojo que este tiene extensión tcc)
En una carpeta aparte se debe tener las carpetas ndless, nlaunch, nsNandMgr y el archivo nlaunch.tco todas estas de los archivos antes mencionados.
7. el archivo TI-NspireCXCAS-3.1.0.392.tcc se debe modificar, primero con el software TNOC quitando Boot2, luego se renombra a phoenic.tns. he incluirlo en la carpeta nlaunch, reemplazar por el anterior. Luego mediante la conexión copiar las primeras 3 carpetas. Se debe ejecutar nsNandMgr para activarla.
8. Reiniciar la TI-Nspire y borrar el SO actual esto con presionando primero "reset" luego las teclas EE+Enter+doc luego sin soltar estas tres ultimas soltar "reset". Entonces se escoge opción 2 y luego 1.
9. La TI-Nspire ya no tiene SO y esta a la espera del mismo con la barra de avance atorada en el medio, utilizando la conexion se instala el archivo "nlaunch.tco" instalar SO asi:
si sale error no hay problema, entonces comienza a utilizar el SO que esta en phoenic.tns (que tiene CAS). Finaliza y no hay mas errores pasa a nsNandMgr y hay que escojer el SO que tiene CAS en mi caso era BootD, luego se sale con 0.
Luego de ello todo Ok y ya se tiene todas las funciones de CAS en la TI-Nspire CX .
Referencias:
https://github.com/bibanon/android-development-codex/wiki/Nspire-Nlaunch
http://www.omnimaga.org/general-calculator-help/installing-cas-on-ti-nspire-cx-non-cas/60/
https://www.youtube.com/watch?v=brd8q0huPuY
lunes, 28 de enero de 2013
Uso de TortoiseSVN / Subversion
Bueno no diré de donde bajarlo pues de seguro ya lo saben (googlea)
La mecánica de SVN en este caso de tortoise es:
- Se crea un repositorio.
- Se sacan copia del repositorio (copias de trabajo)
- Desde las copias de trabajo, se actualiza el repositorio, como una nueva versión.
- Se puede sacar desde el repositorio copia de cualquier versión que se tiene almacenada.
- Se puede trabajar en paralelo con una misma versión y luego combinar y resolver conflictos de ambos archivos.
- Una vez instalado el Tortoise se añadirá al menú contextual las opciones interesantes del mismo.
La forma mas segura de crear un repositorio es importarlo, para tal fin se sigue los siguientes pasos:
- Se crea una carpeta donde se guardara el repositorio: ejemplo
"svnEjemplo", Bueno alli se hace menú contextual /TortoiseSVN/Create Repository here.. luego "create folder structure".
Luego hay que importar los archivos que formaran parte del repositorio. Para ello uno se ubica en la carpeta donde están los archivos y con el menú contextual en /TortoiseSVN/Import...
Pide como datos la dirección del repositorio en mi caso como esta en el disco D puse
file:///D:/ejemSVN, se pude añadir un comentario. (ojo son 3 /// para direccionar a disco).
Una ves importado ya se puede prescindir de los archivos de la carpeta importada, pues todo estara ahora en D:/ejemSVN, inclusive las futuras modificaciones o versiones. - Para poder utilizar los archivos del repositorio uno tiene que realizar un checkout del repositorio para ello se debe crear una nueva carpeta donde se tendrán los archivos de trabajo. ejemplo "proy1", igual con menu contextual SVN Checkout sobre la carpeta creada. en la ventana también se pude indicar la versión que queremos en "Revision", de otro modo sera la ultima o mas reciente. Si todo esta bien obtendremos en "Proy1" todos los archivos y según la versión requerida.
- Una ves trabajados los archivos con actualizaciones o nuevos archivos (este ultimo se usa el add) se realiza una actualización de version con el menu contextual SVN commit. Ahora cuando hagamos otra copia de trabajo se tendra siempre la ultima version. E inclusive si ya teniamos una copia de trabajo la podemos actualizar con el comendo SVN Update..
- El procedimiento descrito anteriormente, es para trabajo secuencial, es decir SVN checkout - Modificaciones - SVN Commit.. / SVNUpdate. Pero que sucede si dos personas hacen cada uno una copia de trabajo y actualizan en paralelo los dos archivos. Ello para el Tortoise indicara un error, pues las versiones no estaran actualizadas. Para resolver ese problema se tiene que combinar (merge) y corregir (resolved), sea de manera manual o automática con Tortoise.
En mi caso tuve el problema de trabajar un archivo word de manera paralela, para suerte nuestra se tiene que el Word puede hacer el combinado con lo cual nos ahorra bastante trabajo. El procedimiento es el siguiente:- Modifican 1
Modifican 2 - Commit en 1 - Aceptado los cambios de 1
- Update en 2 : Muestra error por q el archivo esta desactualizado. Sirve para que se muestre el error
- Commit en 2 (color rojo archivo) : muestra donde esta los errores para hacer commit; resolver conflictos con doble click en archivo rojo, se abre word con opcion - merge : finalmente solo se tiene que guardar.
- Resolved... en 2: Nueva version con los cambios de 1 y 2.
- Commit en 2 : version final recoge lo de 1 y 2
- Update 1: para tener la ultima version para 1 tambien
- Modifican 1
martes, 14 de junio de 2011
MPICH2 - Qdevelop/QT C++
se detalla el procedimiento para echarlo andar, ahora con resultados interesantes:
1. Instalar el programa correcto de mpich , la versión propuesta o actual todavía tiene problemas con la librería mpi.lib.
2.Copiar los archivos lib a la carpeta del \\Qt\4.3.2\lib
3. Lamarlos desde el compilador en mi caso uso QDevelop y tengo adicionar a la variable
INCLUDEPATH += "c:\Program Files\MPICH2\include"
LIBS += -lmpi
4. Compilar linkear y todo bien para el caso del QT se tiene estos:
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"e:\Qt\4.3.2\include\QtCore" -I"e:\Qt\4.3.2\include\QtCore" -I"e:\Qt\4.3.2\include\QtGui" -I"e:\Qt\4.3.2\include\QtGui" -I"e:\Qt\4.3.2\include" -I"..\..\..\Program Files\MPICH2\include" -I"e:\Qt\4.3.2\include\ActiveQt" -I"release" -I"." -I"e:\Qt\4.3.2\mkspecs\default" -o release\pi.o src\pi.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,console -mthreads -Wl -o "release\Multi.exe" release\pi.o -L"e:\Qt\4.3.2\lib" -lmpi -lQtGui4 -lQtCore4
Luego de muchos intentos y problemas como que el printf( del C++ no funciona correctamente y además detiene la ejecución del MPI (???) conseguí el código correcto para correr el calculo de pi.
Codigo de Calculo de Pi#include
#include
#include
#include "math.h"
int main(int argc, char *argv[])
{
int n, myid, numprocs, i;
double PI25DT = 3.141592653589793238462643;
double mypi, pi, h, sum, x;
double starttime, endtime;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
while (1) {
if (myid == 0) {
fprintf(stdout,"Enter the number of intervals: (0 quits) ");
fflush(stdout);
//qDebug() << "Enter the number of intervals: (0 quits) ";
scanf("%d",&n);
}
starttime = MPI_Wtime();
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (n == 0)
break;
else {
h = 1.0 / (double) n;
sum = 0.0;
for (i = myid + 1; i <= n; i += numprocs) {
x = h * ((double) i - 0.5);
sum += (4.0 / (1.0 + x*x));
}
mypi = h * sum;
MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0,
MPI_COMM_WORLD);
endtime = MPI_Wtime();
if (myid == 0){
fprintf(stdout,"Pi es = %lf y el error es %lf ", pi, fabs(pi - PI25DT));
fprintf(stdout,"el tiempo fue %f seg\n",endtime-starttime);
fflush(stdout);}
}
}
MPI_Finalize( );
return 0;
}
Asimismo para poder ejecutarlo en paralelo en las diferentes opciones se usa el mpiexec asi:
Usos del mpiexec
#Correr en la misma máquina 10 procesos
mpiexec -n 10 pi.exe
#Correr en otro maquina n procesos
mpiexec -n 10 -host nombrehost pi.exe
#Correr en varias maquinas n procesos
#se indica el archivo hosts.txt con los nombre de las maquinas en el formato
#nombredelhost1:5
#nombredelhost1:4
#la suma de nro de procesos distribuidos deberia ser n
mpiexec -machinefile hosts.txt -n 9 pi.exe
#Esta sirve para correr 5 casos de *.exe. en las maquinas listadas en hosts.txt
#se tuvo que añadir el entorno pues el cplex requiere ubicacion del archivo de entorno.
mpiexec -env CPLEXLICDIR E:\ -machinefile hosts.txt -n 5 calc2.exe