Arduino - osciloscopio multicanal (osciloscopio del pobre) (1 / 1 paso)

Paso 1: El código

Que no sea el software, no hay nada nuevo en la configuración de este. Para su comodidad estoy repitiendo los pasos listados en 'RuiSantos instructable.

1)
Descargar procesamiento. Es un entorno de programación que se ve y se siente idéntico al entorno de programación de Arduino. También viene en el mismo precio, lo que significa que es gratis. Haga clic aquí para descargar. Configurar como configurar el software de Arduino. Funciona como el IDE de Arduino.
Proceso puede utilizarse para mostrar imágenes, líneas u objetos e interactuar con ellos. Esta es mi primera experiencia con el programa.

2)
Dependiendo de cuántos canales quieres tener, subir a uno de los "bosquejos de Arduino" se muestra a continuación en su Arduino. El código de envío y recepción de los datos se basó en el código de este capítulo del gran libro que explica cómo enviar varios campos de texto de un Arduino al ordenador y procesado con el proceso.

3)
Luego tomar el respectivo "bosquejo de proceso" de abajo y copiar en proceso

4)
Cambiar el "Path" en la última línea del código en un camino de su elección.

5)
Ejecutar en el proceso.

6)
Asegúrese de que sus señales no excedan 5V antes de conectar a:
CANAL1 = > analógico pin0
CANAL2 = > pin1 analógico
Canal 3 = > analógica pin2

Notas:

  • Los bocetos del proceso de utilizan el puerto serie 0 como viene de serie. Deberá ajustar este valor si utiliza un puerto serie diferente.
  • Había documentado cada paso en el programa con un montón de comentarios. Así, el código debe ser "explicaciones".
  • He encontrado experimentalmente que en algunas configuraciones de que los datos no pueden ser mostrados en tiempo real debido a varias razones interconectadas:
    • El retraso que se establece en el programa de Arduino no es bastante grande. = > También se envía muchos datos. = > Se acumula el tiempo de procesamiento. = > Los datos se visualizan con retraso. Para retrasos cambié manualmente la fuente de alimentación que estaba conectada a entradas analógicas de mi Arduino y observando la respuesta de la tensión de procesamiento. Lo hice por un largo período de tiempo. Si la respuesta seguía siendo inmediata me quedé satisfecho.
    • Si zoom con "+" se muestran menos datos. Esto tiene un efecto directo sobre las posibilidades de retrasos, ya que se necesita menos tiempo de procesamiento.
    • La ventana es demasiado ancha. = > También muchos valores de x necesitan ser cambiado de puesto. = > Demasiado mucho tiempo necesario para los cálculos. = > he elegido un tamaño de ventana mucho más pequeño que mi pantalla a este efecto.

Disfrutar de los canales múltiples de su osciloscopio de pobres hombre y quisiera saber si le sucede a cualquier mejora.

Código de canal 2 de Arduino:
/ * Bosquejo de CommaDelimitedOutput * /
#define ANALOG_IN_Ch1 0
#define ANALOG_IN_Ch2 1

void setup()
{
Serial.Begin(9600);
}

void loop()
{
int val1 = analogRead(ANALOG_IN_Ch1); / * Lee los valores de Pin0 analógico = CANAL1 * /
int val2 = analogRead (ANALOG_IN_Ch2); / * Lee valores de análogo Pin1 = CANAL2 * /

Serial.Print('H'); / * Cabecera única para identificar el inicio del mensaje * /
Serial.Print(",");
Serial.Print(val1,DEC);
Serial.Print(",");
Serial.Print(val2,DEC);
Serial.Print(",");  / * Nota que se envía una coma después del último campo * /
Serial.println();  / * Enviar un cr/lf * /
Delay(50); Esto puede ser más rápido que 50ms
}

Código de canal 3 de Arduino:
/ * Bosquejo de CommaDelimitedOutput * /
#define ANALOG_IN_Ch1 0
#define ANALOG_IN_Ch2 1
#define ANALOG_IN_Ch3 2

void setup()
{
Serial.Begin(9600);
}

void loop()
{
int val1 = analogRead(ANALOG_IN_Ch1); / * Lee los valores de Pin0 analógico = CANAL1 * /
int val2 = analogRead (ANALOG_IN_Ch2); / * Lee valores de análogo Pin1 = CANAL2 * /
int val3 = analogRead (ANALOG_IN_Ch3); / * Lee los valores de analógica Pin2 = canal 3 * /

Serial.Print('H'); / * Cabecera única para identificar el inicio del mensaje * /
Serial.Print(",");
Serial.Print(val1,DEC);
Serial.Print(",");
Serial.Print(val2,DEC);
Serial.Print(",");
Serial.Print(val3,DEC);
Serial.Print(",");  / * Nota que se envía una coma después del último campo * /
Serial.println();  / * Enviar un cr/lf * /
Delay(50);
}

Código de procesamiento de 2 canales:
/*
* Osciloscopio
* Da una representación visual de tres pines analógicos en tiempo real.
*
* Este Software expande la cantidad de canales de una versión anterior.
* La versión anterior fue un proyecto que forma parte de Accrochages
* Ver http://accrochages.drone.ws
*
* El autor de este software adaptado no tiene relación a Accrochages.
* Agradece por la gran plantilla y la inspiración para escribir este software.
*
* La siguiente declaración fue parte del software original.
* Esto es para su información.
*
* (c) 2008 Sofian Audry (info
*
* Este programa es software libre: usted puede redistribuirlo y/o modificar
* que en los términos de la GNU General Public License publicada por
* la Free Software Foundation, ya sea la versión 3 de la licencia, o
* (a su opción) cualquier versión posterior.
*
* Este programa se distribuye con la esperanza de que sea útil,
* pero sin ninguna garantía; ni siquiera la garantía implícita de
* COMERCIABILIDAD o aptitud para un propósito PARTICULAR. Ver la
* GNU General Public License para más detalles.
*
* Usted debe han recibido una copia de la Licencia Pública General de GNU
* con este programa. Si no, consulte < http://www.gnu.org/licenses/>.
*/
Import processing.serial.*;

Serie myPort; / * Crear objeto de serie clase * /
char el encabezado = 'H'; / * carácter para identificar el comienzo de un mensaje * /
corta LF = 10; / * Salto de línea ASCII * /
portIndex corto = 0; / * determina el USB puerto usado * /
[] int val = {-1, -1}; / * Variable utilizada para la función de Wembley, 2 posiciones para los 2 canales * /
int [] valuesCh1; / * Las siguientes tres variables tendrá los datos de la ventana de memoria para que pueda ser empujados y muestra * /
int [] valuesCh2;
zoom del flotador; / * Definir "zoom" como variable de coma flotante * /

void setup()
{
Size(1014, 690); / * Se abre una ventana de tamaño específico, el tamaño máximo de pantalla de mi laptop, pueden aparecer problemas de retraso * /
tamaño (600, 400); / * pantalla más pequeña = > menos para calcular = > sin problemas de retardo * /
myPort = serie nueva (este, Serial.list() [portIndex], 9600); / * Abrir el puerto que la Junta está conectada y utiliza la misma velocidad (9600 bps) * /
valuesCh1 = new int [ancho]; / * Define el array con tantos elementos como x píxeles en la ventana, utilizado para trazar datos de CANAL1 * /
valuesCh2 = new int [ancho]; / *... de CANAL2 * /
Zoom = 1.0f; / * Comienzo con 1 factor de zoom de x * /
Smooth(); / * Dibujar imágenes con bordes lisos * /
}

/ * Esta función convierte un valor de datos del canal en píxeles se muestra de
* parte superior del gráfico (que es la posición 0)
* Esta función devuelve un valor entero * /
int getY(int val)
{
devolver (int) (altura - val/1023.0f * (altura - 1));
}

/ * Función que lee los datos de la serie de la cadena que fueron enviados por arduino
* Saca una matriz con los tres valores de arduino
* Se llama función en la función de dibujar * /
int [] getData()
{
int [] ChValues = {-1, -1}; / * Definir matriz para esta función * /
Cadena de mensaje = myPort.readStringUntil(LF); / * Lee en la secuencia de datos serial enviada por arduino * /
Si (mensaje! = null) / * hacer esto sólo cuando se recibe un mensaje válido completo * /
{
String [] datos = message.split(","); / * Divide el mensaje separados por comas en sus segmentos * /
if(Data[0].charAt(0) == encabezado) / * verificación de carácter del jefe en el primer campo, siempre verdadero para mensaje completo * /
{
para (int i = 1; i < data.length-1; i ++) / * omitir el encabezado y termine de cr y lf = > mirada solamente en los tres puntos * /
{
ChValues [i-1] = Integer.parseInt(data[i]); / * Escribir datos de un canal en conjunto, cambió de puesto de datos en matriz 1 debido a la cabecera * /
}
}
}
volver ChValues; / * Devuelve array ChValues que contiene datos de canal * /
}

/ * Esta función empuja todos los puntos de datos de la posición de una ventana más a la izquierda, luego agrega el punto de datos que acabo de leer * /
void pushValue (int [] valor)
{
para (int i = 0; i < ancho 1; i ++)
{
valuesCh1 [i] = valuesCh1 [i + 1]; / * Mover el punto de datos sobre por posición * /
valuesCh2 [i] = valuesCh2 [i + 1];
}

valuesCh1 [anchura-1] = valor [0]; / * Añadir punto de datos * /
valuesCh2 [anchura-1] = valor [1];
}

/ * Esta función extrae los datos en la ventana * /
void drawLines()
{
int displayWidth = (int) (ancho / zoom); / * Calcula el ancho de la ventana, teniendo en cuenta el cambio de x si se establece un zoom * /
int k = valuesCh1.length - displayWidth; / * Esto calcula la posición a la que se muestran los puntos de datos * /
int x0 = 0; / * valor de x en muy izquierda de la ventana (= 0) es asignado a x0 y utiliza todos los canales * /
ya0 int = getY(valuesCh1[k]); / * valor y del último punto indicado se asigna a ya0 de CANAL1 * /
yb0 int = getY(valuesCh2[k]); / * valor y del último punto indicado se asigna a yb0 por CANAL2 * /
para (int i = 1; i < displayWidth-1; i ++) / * bucle que va desde la letra k a la parte derecha de ventana * /
{
k ++; / * Incrementar k para el siguiente punto de datos * /
int x1 = (int) (i * (ancho-1) / (displayWidth-1)); / * Calcular siguiente x valor * /
ya1 int = getY(valuesCh1[k]); / * Obtener valor y próxima de CANAL1 * /
yb1 int = getY(valuesCh2[k]); / * Obtener valor y del siguiente por CANAL2 * /
strokeWeight(2);  / * Dibujar más líneas * /
Stroke (255, 0, 0); / * Dibujar una línea roja para CANAL1 * /
línea (x0, ya0, x1, ya1); / * Trazar un segmento de línea para CANAL1 * /
tiempos (0, 255, 0); / * Dibujar una línea verde de CANAL2 * /
línea (x0, yb0, x1, yb1); / * Trazar un segmento de línea por CANAL2 * /
x0 = x1; / * Cambio x valor para calcular segmentos de línea siguiente * /
ya0 = ya1; / * Cambiar y valor para CANAL1 calcular segmentos de línea siguiente * /
yb0 = yb1; / * Cambiar y valor para CANAL2 calcular segmentos de línea siguiente * /
}
}

/ * Esta función dibuja líneas de la cuadrícula en la ventana
* Me espaciadas las líneas por lo que representan pasos de 10% y 20% en 2 colores diferentes
Para la señales de 5V max, que es 0,5 y 1.0V pasos * /
void drawGrid()
{
accidente cerebrovascular (150, 150, 0);
línea (0, 5/altura, anchura, altura/5);
línea (altura 0, * 2/5, ancho, alto * 2/5);
línea (altura 0, * 3/5, ancho, alto * 3/5);
línea (altura 0, * 4/5, ancho, alto * 4/5);
accidente cerebrovascular (150, 150, 150);
línea (0, 10/altura, anchura, altura/10);
línea (altura 0, * 3/10, ancho, alto * 3/10);
línea (altura 0, * 5/10, ancho, alto * 5/10);
línea (altura 0, * 7/10, ancho, alto * 7/10);
línea (altura 0, * 9/10, ancho, alto * 9/10);
}

/ * Esta función permite hacer zoom en el eje x de los datos
* Se ejecuta en segundo plano y avisos cuando se presiona la tecla derecha
* Zoom con presionar "+"
* Alejar con presionar "-" * /
keyReleased() vacío
{
interruptor (llave)
{
caso '+':
zoom * = 2.0f;
println(zoom);
Si ((int) (ancho / zoom) < = 1)
zoom / = 2.0f;
rotura;
caso '-':
zoom / = 2.0f;
Si (zoom < 1.0f)
zoom * = 2.0f;
rotura;
}
}

/ * Esta es la función principal que llama a las otras funciones
* Esta función se ejecuta continuamente * /
void draw()
{
Background(1); / * Establece el fondo de la ventana * /
drawGrid(); / * Dibuja la cuadrícula en la ventana * /
Val = getData(); / * Lee los datos de los tres canales como enviado por el arduino en una matriz * /
Si (val [0]! = -1) / * si en el primer canal de datos, luego llevar a cabo la función * /
{
pushValue(val); / * Empuja a datos una posición hacia abajo y añade un nuevo punto de datos * /
}
drawLines(); / * Agregar el siguiente conjunto de datos a la ventana * /
Si (mousePressed) / * ejecutar acción al Pulsa el botón del ratón * /
{
Save("/YourPathHere/OsciData1.png");  / * guardar captura de pantalla de la ventana de datos, pero ten cuidado con imagen se sobrescribirán con segundo click del ratón * /
}
}

Código de procesamiento de 3 canales:

/*
* Osciloscopio
* Da una representación visual de tres pines analógicos en tiempo real.
*
* Este Software expande la cantidad de canales de una versión anterior.
* La versión anterior fue un proyecto que forma parte de Accrochages
* Ver http://accrochages.drone.ws
*
* El autor de este software adaptado no tiene relación a Accrochages.
* Agradece por la gran plantilla y la inspiración para escribir este software.
*
* La siguiente declaración fue parte del software original.
* Esto es para su información.
*
* (c) 2008 Sofian Audry (info
*
* Este programa es software libre: usted puede redistribuirlo y/o modificar
* que en los términos de la GNU General Public License publicada por
* la Free Software Foundation, ya sea la versión 3 de la licencia, o
* (a su opción) cualquier versión posterior.
*
* Este programa se distribuye con la esperanza de que sea útil,
* pero sin ninguna garantía; ni siquiera la garantía implícita de
* COMERCIABILIDAD o aptitud para un propósito PARTICULAR. Ver la
* GNU General Public License para más detalles.
*
* Usted debe han recibido una copia de la Licencia Pública General de GNU
* con este programa. Si no, consulte < http://www.gnu.org/licenses/>.
*/
Import processing.serial.*;

Serie myPort; / * Crear objeto de serie clase * /
char el encabezado = 'H'; / * carácter para identificar el comienzo de un mensaje * /
corta LF = 10; / * Salto de línea ASCII * /
portIndex corto = 0; / * determina el USB puerto usado * /
[] int val = {-1, -1, -1}; / * Variable utilizada para la función de Wembley, 3 posiciones para 3channels * /
int [] valuesCh1; / * Las siguientes tres variables tendrá los datos de la ventana de memoria para que pueda ser empujados y muestra * /
int [] valuesCh2;
int [] valuesCh3;
zoom del flotador; / * Definir "zoom" como variable de coma flotante * /

void setup()
{
Size(1014, 690); / * Se abre una ventana de tamaño específico, tamaño máximo de pantalla de mi laptop, retrasar problemas la mitad a través de la ventana * /
tamaño (600, 400); / * pantalla más pequeña = > menos para calcular = > sin problemas de retardo * /
myPort = serie nueva (este, Serial.list() [portIndex], 9600); / * Abrir el puerto que la Junta está conectada y utiliza la misma velocidad (9600 bps) * /
valuesCh1 = new int [ancho]; / * Define el array con tantos elementos como x píxeles en la ventana, utilizado para trazar datos de CANAL1 * /
valuesCh2 = new int [ancho]; / *... de CANAL2 * /
valuesCh3 = new int [ancho]; / *... de canal 3 * /
Zoom = 1.0f; / * Comienzo con 1 factor de zoom de x * /
Smooth(); / * Dibujar imágenes con bordes lisos * /
}

/ * Esta función convierte un valor de datos del canal en píxeles se muestra de
* parte superior del gráfico (que es la posición 0)
* Esta función devuelve un valor entero * /
int getY(int val)
{
devolver (int) (altura - val/1023.0f * (altura - 1));
}

/ * Función que lee los datos de la serie de la cadena que fueron enviados por arduino
* Saca una matriz con los tres valores de arduino
* Se llama función en la función de dibujar * /
int [] getData()
{
int [] ChValues = {-1, -1, -1}; / * Definir matriz para esta función * /
Cadena de mensaje = myPort.readStringUntil(LF); / * Lee en la secuencia de datos serial enviada por arduino * /
Si (mensaje! = null) / * hacer esto sólo cuando se recibe un mensaje válido completo * /
{
String [] datos = message.split(","); / * Divide el mensaje separados por comas en sus segmentos * /
if(Data[0].charAt(0) == encabezado) / * verificación de carácter del jefe en el primer campo, siempre verdadero para mensaje completo * /
{
para (int i = 1; i < data.length-1; i ++) / * omitir el encabezado y termine de cr y lf = > mirada solamente en los tres puntos * /
{
ChValues [i-1] = Integer.parseInt(data[i]); / * Escribir datos de un canal en conjunto, cambió de puesto de datos en matriz 1 debido a la cabecera * /
}
}
}
volver ChValues; / * Devuelve array ChValues que contiene datos de canal * /
}

/ * Esta función empuja todos los puntos de datos de la posición de una ventana más a la izquierda, luego agrega el punto de datos que acabo de leer * /
void pushValue (int [] valor)
{
para (int i = 0; i < ancho 1; i ++)
{
valuesCh1 [i] = valuesCh1 [i + 1]; / * Mover el punto de datos sobre por posición * /
valuesCh2 [i] = valuesCh2 [i + 1];
valuesCh3 [i] = valuesCh3 [i + 1];
}

valuesCh1 [anchura-1] = valor [0]; / * Añadir punto de datos * /
valuesCh2 [anchura-1] = valor [1];
valuesCh3 [anchura-1] = valor [2];
}

/ * Esta función extrae los datos en la ventana * /
void drawLines()
{
int displayWidth = (int) (ancho / zoom); / * Calcula el ancho de la ventana, teniendo en cuenta el cambio de x si se establece un zoom * /
int k = valuesCh1.length - displayWidth; / * Esto calcula la posición a la que se muestran los puntos de datos * /
int x0 = 0; / * valor de x en muy izquierda de la ventana (= 0) es asignado a x0 y utiliza todos los canales * /
ya0 int = getY(valuesCh1[k]); / * valor y del último punto indicado se asigna a ya0 de CANAL1 * /
yb0 int = getY(valuesCh2[k]); / * valor y del último punto indicado se asigna a yb0 por CANAL2 * /
yc0 int = getY(valuesCh3[k]); / * valor y del último punto indicado se asigna a yc0 para canal 3 * /
para (int i = 1; i < displayWidth-1; i ++) / * bucle que va desde la letra k a la parte derecha de ventana * /
{
k ++; / * Incrementar k para el siguiente punto de datos * /
int x1 = (int) (i * (ancho-1) / (displayWidth-1)); / * Calcular siguiente x valor * /
ya1 int = getY(valuesCh1[k]); / * Obtener valor y próxima de CANAL1 * /
yb1 int = getY(valuesCh2[k]); / * Obtener valor y del siguiente por CANAL2 * /
yc1 int = getY(valuesCh3[k]); / * Obtener el siguiente valor y para canal 3 * /
strokeWeight(2);  / * Dibujar más líneas * /
Stroke (255, 0, 0); / * Dibujar una línea roja para CANAL1 * /
línea (x0, ya0, x1, ya1); / * Trazar un segmento de línea para CANAL1 * /
tiempos (0, 255, 0); / * Dibujar una línea verde de CANAL2 * /
línea (x0, yb0, x1, yb1); / * Trazar un segmento de línea por CANAL2 * /
tiempos (0, 0, 255); / * Dibujar una línea azul para canal 3 * /
línea (x0, yc0, x1, yc1); / * Trazar un segmento de línea para canal 3 * /
x0 = x1; / * Cambio x valor para calcular segmentos de línea siguiente * /
ya0 = ya1; / * Cambiar y valor para CANAL1 calcular segmentos de línea siguiente * /
yb0 = yb1; / * Cambiar y valor para CANAL2 calcular segmentos de línea siguiente * /
yc0 = yc1; / * Cambiar el valor de y para el canal 3 para el cálculo de segmentos de línea siguiente * /
}
}

/ * Esta función dibuja líneas de la cuadrícula en la ventana
* Me espaciadas las líneas por lo que representan pasos de 10% y 20% en 2 colores diferentes
Para la señales de 5V max, que es 0,5 y 1.0V pasos * /
void drawGrid()
{
accidente cerebrovascular (150, 150, 0);
línea (0, 5/altura, anchura, altura/5);
línea (altura 0, * 2/5, ancho, alto * 2/5);
línea (altura 0, * 3/5, ancho, alto * 3/5);
línea (altura 0, * 4/5, ancho, alto * 4/5);
accidente cerebrovascular (150, 150, 150);
línea (0, 10/altura, anchura, altura/10);
línea (altura 0, * 3/10, ancho, alto * 3/10);
línea (altura 0, * 5/10, ancho, alto * 5/10);
línea (altura 0, * 7/10, ancho, alto * 7/10);
línea (altura 0, * 9/10, ancho, alto * 9/10);
}

/ * Esta función permite hacer zoom en el eje x de los datos
* Se ejecuta en segundo plano y avisos cuando se presiona la tecla derecha
* Zoom con presionar "+"
* Alejar con presionar "-" * /
keyReleased() vacío
{
interruptor (llave)
{
caso '+':
zoom * = 2.0f;
println(zoom);
Si ((int) (ancho / zoom) < = 1)
zoom / = 2.0f;
rotura;
caso '-':
zoom / = 2.0f;
Si (zoom < 1.0f)
zoom * = 2.0f;
rotura;
}
}

/ * Esta es la función principal que llama a las otras funciones
* Esta función se ejecuta continuamente * /
void draw()
{
Background(1); / * Establece el fondo de la ventana * /
drawGrid(); / * Dibuja la cuadrícula en la ventana * /
Val = getData(); / * Lee los datos de los tres canales como enviado por el arduino en una matriz * /
Si (val [0]! = -1) / * si en el primer canal de datos, luego llevar a cabo la función * /
{
pushValue(val); / * Empuja a datos una posición hacia abajo y añade un nuevo punto de datos * /
}
drawLines(); / * Agregar el siguiente conjunto de datos a la ventana * /
Si (mousePressed) / * ejecutar acción al Pulsa el botón del ratón * /
{
Save("/YourPathHere/OsciData1.png");  / * guardar captura de pantalla de la ventana de datos, pero ten cuidado con imagen se sobrescribirán con segundo click del ratón * /
}
}

Artículos Relacionados

Arduino - osciloscopio (osciloscopio del pobre)

Arduino - osciloscopio (osciloscopio del pobre)

Hola chicos,hace unos días encontré este código en github y es lo mejor que encontrado hasta ahora, así que he decidido difundir este proyecto tanto como pueda, para quien quiere que un osciloscopio barato alrededor de esto es la mejor manera!  Vamos
Mente controlada luz usando Arduino || Sensor de EEG del pobre

Mente controlada luz usando Arduino || Sensor de EEG del pobre

No sería genial hacer cosas o desactivar con tu mente... !!!Como la órbita Puzlebox Mobile Edition (http://www.amazon.com/Puzzlebox-Puzlebox-Orbit-Mob... ) o el cool Star Wars ciencia - entrenador de fuerza ( http://www.amazon.com/Star-Wars-Science-F
Impresora 3D del pobre

Impresora 3D del pobre

Mi objetivo era construir una impresora 3D barata y de bajo costo para menos de 100 dólares/euros¿Cuáles son las funciones de impresora 3D del pobre?-Deposición fundida modelado ABS/PLA-Calor cama-uso de firmware de código abierto, versión modificada
Trípode del pobre

Trípode del pobre

trípode del pobrees muy muy barato y portable por lo que no hay necesidad de buscar lugar donde ponerloutiliza cosas hechas de casa para hacer una tijera y tubo que desde la caja de papel de aluminiose puede utilizar para hacer videos juegos juegos y
Pobre del torno (torno del pobre)

Pobre del torno (torno del pobre)

Hace varios meses vengo amenazando con hacerme un peque o torno casero.Pues bien, ha llegado el momento de mostrarlo, porque si bien no est totalmente terminado (es posible que no lo est nunca, porque siempre se puede agregar algo m s), ya est operat
Las palomitas del pobre

Las palomitas del pobre

palomitas de maíz están delicioso. Sin embargo, compra bolsas de microondas consigue palomitas caro (sin mencionar que son terribles para usted) y comprar un aire-popper llevará para siempre a hacer un retorno de la inversión. ¿Cómo hacer palomitas d
Arduino - osciloscopio mejorado del pobre

Arduino - osciloscopio mejorado del pobre

este Instructable continúa el trabajo presentado aquí.  Proporciona una manera rápida y fácil para convertir tu Arduino en un osciloscopio, aunque encontré que estaba falta de usabilidad.  Renovado el software esta mañana para permitir mucho mejor fu
Osciloscopio del Mullard estudiante

Osciloscopio del Mullard estudiante

este instructable describe la construcción de un oscillosope extremadamente simple 12v.El siguiente diagrama es un esquema del osciloscopio de la pupila de Mullard.  Se trata de un osciloscopio de una válvula (+ CRT) que es casi tan simple como puede
Nokia 5110 Arduino osciloscopio

Nokia 5110 Arduino osciloscopio

Un nuevo video sobre mi nuevo osciloscopio. Cualquier duda deja Comentarios.---Descargas---https://github.com/Adafruit/Adafruit-PCD8544-Nokia...https://github.com/Adafruit/Adafruit-GFX-LibraryEl sketch de Arduino está ligado a este instructable.-----
Inalámbrico de Arduino osciloscopio

Inalámbrico de Arduino osciloscopio

En esta guía voy a explicar cómo utilizar un módulo Bluetooth HC-05, teléfono Windows 8.1 y placa Arduino Uno para construir un osciloscopio inalámbrico. La aplicación de teléfono tiene las funciones fundamentales de un osciloscopio, aunque el ancho
Control de Motor de BLDC con Arduino, salvado el motor del HD y sensores Hall

Control de Motor de BLDC con Arduino, salvado el motor del HD y sensores Hall

hay un gran interés estos días entre los aficionados a los hobbys en el control de motores brushless de la C.C. (BLDC), que han mejorado el rendimiento y mejor eficiencia energética enmotores tradicionales, pero son más difíciles de usar. Muchos prod
Cómo hacer: Gumbo del pobre

Cómo hacer: Gumbo del pobre

Como una mujer nativa de Louisianian, aprendiendo a cocinar un buen gumbo es un rito de paso obligatorio, al igual que aprender a caminar y amarrar sus zapatos. Gumbo (pronunciado Gum - bo) es un plato nativo de Louisiana comenzó primera que aparece
Consola de juegos portátil RetroPie del pobre

Consola de juegos portátil RetroPie del pobre

Me encanta los juegos de video. Me gustaría poder llevarlos dondequiera que vaya a jugar. Pero tengo un problema. No tengo demasiado dinero para gastar en juegos de video. Que tomé una de las cosas que me encantan (video juegos), hecho portable y lo
Filtro del pobre teléfono celular

Filtro del pobre teléfono celular

IR fotografía es diversión. Sin embargo, conseguir un adecuado filtro IR (técnicamente un filtro ligero visible pero lo que sea) para tu cámara puede ser un dolor, especialmente si usted tiene sólo un punto y disparar, o en mi caso, un teléfono celul