PDA

Ver la Versión Completa : Hardware libre



Cuidadoso
08/10/2016, 21:26
Me gustaría saber si han tenido alguna experiencia con hardware libre (arduino o genéricas).
Qué proyectos hicieron? Cómo salieron?

saludos

Ramcer
05/12/2016, 02:01
Yo estoy pensando en usar alguno, mis proyectos los diseño con compuertas logicas, pero tiene pinta de ser muy engorroso a la hora de soldar las compuertas xD. Hago up el tema (?

<?Emilio>
20/12/2016, 08:05
Mirá, con Arduino tuve experiencia una vez sola; y fue para automatizar algunas cosas de un armario de cultivo de un amigo. Funcionó todo OK; sigue funcionando de hecho.
Funciona a modo timer (encendido/apagado de luces), control de humedad, temperatura, y se puede controlar desde una interfaz simple en una Raspberry/PC.

También conozco a un chabón que hace adornos bizarros que se mueven y demás. Hay bocha de cosas para hacer; hay páginas dedicadas a experimentos de Arduino, Photon y blabla.

Cuidadoso
23/12/2016, 11:38
Mirá, con Arduino tuve experiencia una vez sola; y fue para automatizar algunas cosas de un armario de cultivo de un amigo. Funcionó todo OK; sigue funcionando de hecho.
Funciona a modo timer (encendido/apagado de luces), control de humedad, temperatura, y se puede controlar desde una interfaz simple en una Raspberry/PC.

También conozco a un chabón que hace adornos bizarros que se mueven y demás. Hay bocha de cosas para hacer; hay páginas dedicadas a experimentos de Arduino, Photon y blabla.

Tengo el sensor de humedad y la idea era hacer algo como lo que mencionas. Falta tiempo ...

Cuidadoso
06/03/2017, 00:57
Falta un rato para la versión robot jaja
Estuve trabajando un poco con el display lcd, resultados y código a disposición

https://www.youtube.com/watch?v=Stsp16IWndw&amp;feature=youtu.be




#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5


int read_LCD_buttons() // para leer los botones
{ adc_key_in = analogRead(0); // Leemos A0
// Verificar valores de btns
// Comparación con valores
if (adc_key_in > 1023) return btnNONE; // Sin pulsar btn
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 300) return btnDOWN;
if (adc_key_in < 450) return btnLEFT;
if (adc_key_in < 650) return btnSELECT;





return btnNONE; // En mi caso limpiará la pantalla " "
}
void setup()
{ lcd.begin(16, 2); // Inicializa el LCD
lcd.setCursor(0,0);
lcd.print("Cuidadoso Bander");
}


void loop() { //lcd.setCursor(9,1); // Cursor a col 9, fila 2
//lcd.print(millis()/1000); // Imprime segundos
lcd.setCursor(14, 1); // Cursor a col 14, fila 2
lcd.print(lcd_key); // Imprime el valor leido en la puerta A0 lo cambie lcd.print(lcd_key)
lcd.setCursor(0,1); // Cursor col 1, fila 2

lcd_key = read_LCD_buttons();
if( lcd_key == btnRIGHT)
lcd.print("ESTE ");
else if ( lcd_key == btnLEFT 14)
lcd.print("OESTE ");
else if ( lcd_key == btnUP)
lcd.print("NORTE ");
else if ( lcd_key == btnDOWN)
lcd.print("SUR ");
else if ( lcd_key == btnSELECT)
lcd.print("SELECT");
else if ( lcd_key == btnNONE)
lcd.print(" ");
}


Espero sus aportes!

Selket
06/03/2017, 15:13
Falta un rato para la versión robot jaja
Estuve trabajando un poco con el display lcd, resultados y código a disposición

https://www.youtube.com/watch?v=Stsp16IWndw&amp;feature=youtu.be




#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5


int read_LCD_buttons() // para leer los botones
{ adc_key_in = analogRead(0); // Leemos A0
// Verificar valores de btns
// Comparación con valores
if (adc_key_in > 1023) return btnNONE; // Sin pulsar btn
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 300) return btnDOWN;
if (adc_key_in < 450) return btnLEFT;
if (adc_key_in < 650) return btnSELECT;





return btnNONE; // En mi caso limpiará la pantalla " "
}
void setup()
{ lcd.begin(16, 2); // Inicializa el LCD
lcd.setCursor(0,0);
lcd.print("Cuidadoso Bander");
}


void loop() { //lcd.setCursor(9,1); // Cursor a col 9, fila 2
//lcd.print(millis()/1000); // Imprime segundos
lcd.setCursor(14, 1); // Cursor a col 14, fila 2
lcd.print(lcd_key); // Imprime el valor leido en la puerta A0 lo cambie lcd.print(lcd_key)
lcd.setCursor(0,1); // Cursor col 1, fila 2

lcd_key = read_LCD_buttons();
if( lcd_key == btnRIGHT)
lcd.print("ESTE ");
else if ( lcd_key == btnLEFT 14)
lcd.print("OESTE ");
else if ( lcd_key == btnUP)
lcd.print("NORTE ");
else if ( lcd_key == btnDOWN)
lcd.print("SUR ");
else if ( lcd_key == btnSELECT)
lcd.print("SELECT");
else if ( lcd_key == btnNONE)
lcd.print(" ");
}


Espero sus aportes!

Esto lo hice en 5to con un Q2 de Freescale:

http://i.imgur.com/xTwcsaj.png

^Circuito del lcd con el 555.



Este fue el codigo:



PROGRAMA: Por un display LCD se visualiza un texto enviado por el PORTB
; este mensaje se cambia por medio de un pulsador.
;
; Estructura de Control: "Bucle que se repite infinitamente"
; Programadores: Federico Juan Martin
; Blanco Matias
; Año y div: 5to ET 3ra
; ET N°1 OTTO KRAUSE
;************************************************* ***************************


;************************************************* ***************************
; Incluir archivo con asociación entre etiqueta / nombre y las direcciones
; de los registros asociados al microcontrolador
;----------------------------------------------------------------------------
$Include 'C:\pemicro\ics08qtqyz\qtqy_registers.inc' ;se indica la ruta o PATH
;donde esta el archivo
;
;ubicar el archivo .inc
;en la carpeta del .asm
;-----------------------------------------------------------------------------
; Definición de orígenes de las memorias a utilizar
;-----------------------------------------------------------------------------
RAMStart EQU $0080
FLASHROMStart EQU $F800
VECTORStart EQU $FFFE
;---------------------------------------------------------------------------
; Especificación del inicio de la RAM
;---------------------------------------------------------------------------
ORG RAMStart
;-----------------------------------------------------------------------------
; Reservar espacios de memoria ram y asignar etiquetas o números
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; Especificación del inicio del programa, que se almacena en la ROM ;a partir de la dirección indicada
;-----------------------------------------------------------------------------
ORG FLASHROMStart ;
;-----------------------------------------------------------------------------
; Subrutina que genera un retardo (Enable)
;-----------------------------------------------------------------------------
retardo: lda #$FF
sta $0080
lazo2: lda #$40
sta $0081
lazo1: dec $0081
bne lazo1
dec $0080
bne lazo2
rts
;-----------------------------------------------------------------------------
; Configuración de registros, como el de OSC, EL CONFIG1 - COP -
;-----------------------------------------------------------------------------


Init: mov #$01,config1 ;
;-----------------------------------------------------------------------------
; Configuración de registros de los puertos y los módulos
;-----------------------------------------------------------------------------
mov #$FF,DDRB ;Todo portb es salida
mov #$30,DDRA ;Pines de Rs y E son salida




;-----------------------------------------------------------------------------
; Programa Principal
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; Inicialización del display
;-----------------------------------------------------------------------------
main: jsr retardo
lda #$10 ;Enable nivel alto,Rs bajo
sta PORTA ;Envía al puerto A el dato
lda #$38 ;Primer dato para la inicialización
sta PORTB ;Envía el dato anterior al puerto B
clr PORTA ;Pone en 0 al porta para bajar el enable
jsr retardo ;Va a la subrutina de retardo
lda #$10
sta PORTA
lda #$06 ;Segundo dato para la inicialización
sta PORTB
clr PORTA
jsr retardo
lda #$10
sta PORTA
lda #$0C
sta PORTB
clr PORTA ;Tercer dato para la inicialización
jsr retardo


;-----------------------------------------------------------------------------
; Mensaje 1
;-----------------------------------------------------------------------------
mensaje1: lda #$10 ;borrar
sta PORTA
lda #$01
sta PORTB
clr PORTA
jsr retardo
lda #$30 ;E y Rs en nivel alto para cargar datos
sta PORTA
lda #'G' ;Desde aquí se comienza a enviar los datos
sta PORTB ;para visualizar el mensaje 1
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'a'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'r'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'c'
sta PORTB




lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'i'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'a'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$10 ;Enable nivel alto,Rs nivel bajo
sta PORTA
lda #$C0 ;Código para bajar a la 2da línea
sta PORTB
clr PORTA
jsr retardo
lda #$30 ;E y Rs en nivel alto
sta PORTA
lda #'M' ;Se envían los datos para el
sta PORTB ;texto que será visualizado
lda #$20 ;en la 2da línea del display
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'e'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'r'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'l'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'o'
sta PORTB
lda #$20
sta PORTA
jsr retardo
bucle1: brset 3,PORTA,mensaje2 ;bucle que se repite a menos
jmp bucle1 ;que se accione el pulsador,
;de ser así pasa al 2do
;mensaje


;-----------------------------------------------------------------------------
; Mensaje 2
;-----------------------------------------------------------------------------
mensaje2: jsr retardo
lda #$10 ;borrar
sta PORTA
lda #$01
sta PORTB
clr PORTA
jsr retardo
lda #$30 ;E y Rs en nivel alto se
sta PORTA ;cargan los datos
lda #' ' ;Desde aquí se comienza a
sta PORTB ;enviar los datos del texto
lda #$20 ;que va ser visualizado en
sta PORTA ;el display
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'O'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'t'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'t'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'o'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'K'
sta PORTB
lda #$20
sta PORTA
jsr retardo


lda #$30
sta PORTA
lda #'r'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'a'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'u'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'s'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'e'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$10 ;E en nivel alto, Rs bajo para bajar a la
sta PORTA ;2da línea
lda #$C0 ;Código para bajar a la 2da línea
sta PORTB
clr PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo


lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'5'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'E'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'T'
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #' '
sta PORTB
lda #$20
sta PORTA
jsr retardo
lda #$30
sta PORTA
lda #'3'
sta PORTB
lda #$20
sta PORTA
jsr retardo
bucle: brclr 3,PORTA,asd ;Condición de salto
jmp mensaje1 ;al mensaje 1 o sino
asd: jsr retardo ;continua en el bucle
jmp bucle ;infinitamente hasta que
;se pulse el botón
;-----------------------------------------------------------------------------
; Indicación del origen de los vectores de int.
;-----------------------------------------------------------------------------
; ORG VECTORStart
;-----------------------------------------------------------------------------
; Asignación de saltos para cada vector
;-----------------------------------------------------------------------------; dw init
;-----------------------------------------------------------------------------





Despues si puedo en casa tengo la placa, pero es muy simple :P

Nightw
06/03/2017, 18:12
Hola Cuida,

Yo jugue durante un tiempo con todo lo relacionado a la domótica (automatización del hogar), e hice un par de proyectos personales. Te listo las cosas que hice y las cosas que aprendí en el camino:

Domótica:

Sensor de apertura de puerta
Usé un laser, una célula fotovoltaica y un shield ethernet para controlar si alguien abre la puerta de mi departamento. La celda capturaba la luz que provenía del laser de forma constante. Si alguien abría la puerta esta se interponía entre el laser y la celda, y ahí podías detectar el decaimiento de esta señal y saber que algo había pasado por delante. Conecté el ardu a mi PC usando un shield ethernet cableado (tengo la compu cerca de la puerta). Le mandaba una señal a un servicio que tenía montado en la PC, y este mandaba un mail usando Mailgun (un servicio de mails transaccionales).

Target con sensor de choque
Soy legítimo usuario de armas de fuego, tiro con pistola hace ya un tiempo y como algunos saben, hay disciplinas como la que practico que son baste caras por la cantidad de munición que uno gasta. Para parcticar movimientos, velocidad y reflejo, me tire a armar un blanco con un sensor para detectar cuando algo el pegaba. La práctica la hacía con una réplica de pistola que dispara balines de plástico (como las de Airsoft). Usé un Arduino Uno (con chip ATMEGA-328), y un sensor de vibración.
En este proyecto me encontré con que el sensor de vibración y la calidad de la estructura que armé no eran del todo compatibles y cada tanto me generaba un falso positivo porque si había viento en la zona, generaba un pequeño movimiento que me activaba el sensor. Para solucionar esto tuve que hacer mucho ajuste fino sobre las mediciones del sensor y cambiar los materiales de la estructura.

Aclaración: la mayoría de los sensores los compré en la calle Paraná, en Capital Federal. Los arduinos, protoboards, switches y demás me los traje de china hace bastante (comprados en su momento en dealextreme (http://www.dealextreme.com/)


Proyectos que tengo a futuro:

Caja para pistola con sensor biométrico
La idea de esto es armar una caja para guardar una o dos pistolas, y donde la apertura sea únicamente mediante algún sensor biométrico (lector de huella), numpad y/o tarjetas RFID. Algo similar a esto (https://www.thegunbox.com/) (y ojalá pudiera lograr algo tan lindo!). En el minuto 0:59 de este video (https://www.youtube.com/watch?v=oa6XCdChu24) se puede ver cómo funciona esa caja que te pase.

Mejora al Target con sensor de choque
La idea es poder tener varios targets como los que puse antes, que funcionen en paralelo para poder capturar tiempos de respuesta (velocidad entre disparo y disparo a cada blanco), y así poder armar métricas que después puedo usar para ir mejorando.


Cuando ande en casa veo si adjunto algunas imagenes que saque mientras armaba todo. Creo que aun las tengo en algún backup.

Cuidadoso
07/03/2017, 18:55
Esto lo hice en 5to con un Q2 de Freescale:

"
; ET N°1 OTTO KRAUSE
;**********

Entonces no tuviste de profe a Oscar Bruno (?) XD

Gracias por el aporte cuando pueda lo miroteo detenidamente.


Aclaración: la mayoría de los sensores los compré en la calle Paraná, en Capital Federal. Los arduinos, protoboards, switches y demás me los traje de china hace bastante (comprados en su momento en dealextreme (http://www.dealextreme.com/)


Yo lo compré a china, pague en ese momento unos 15 dólares. No compré un kit armado sino que compre todo por separado en una misma compra. De esa manera seleccioné lo que creía iba a necesitar mas en función de mis intereses.
Con respecto a tus proyectos me encantaría lo del target con sensor, aunque no es un proyecto viable para llevarlo a mi rol docente XD

Gracias por los aportes, seguimos esperando mas intercambio!

Nightw
07/03/2017, 19:05
Te dejo como aporte una de las páginas que más me ayudaron al momento de arrancar. Es un sitio que recopila proyectos de todo tipo con sus respectivos paso a paso.
Podes sacar ideas muy copadas.

http://www.instructables.com/

Cuidadoso
07/03/2017, 22:00
Te dejo como aporte una de las páginas que más me ayudaron al momento de arrancar. Es un sitio que recopila proyectos de todo tipo con sus respectivos paso a paso.
Podes sacar ideas muy copadas.

http://www.instructables.com/

Gracias, pero mala idea... me colgué viendo el proyecto "Wooden Viking Bearded Axe"
JAJAJA

Nightw
08/03/2017, 00:55
Jajajaja el video es increible, la música super atrapante. Esa página es paco