Concurso de fotografía AM

Temática: «Una panorámica de tu acuario».
Ya esta abierto el plazo para presentar fotografías.

Más info
image01

¿Aún no conoces AMA?

Hazte socio de Acuariofilia Madrid Asociación.
CERRADO EL PLAZO DE INSCRIPCIÓN

Más info
image01

Atlas de peces de AM

¡Hemos alcanzado las 800 fichas! Visita nuestro atlas de peces actualizado.

Más info
image01

Cardúmenes y sociabilidad

Nueva actualización de la tabla con una extensa relación de peces, donde podrás conocer qué entorno necesita cada especie, su sociabilidad y si convive o no en cardumen. ¡Pasa a descubrirla!

Mas info
image01
Aula Arduino para principiantes.
Respuestas: 1783    Visitas: 470018
#1
Yo me ofrezco a guiar a cualquiera que quiera iniciarse en Arduino. Puedo resolver dudas recomendar lecturas, etc., siempre que se hagan las consultas de forma pública utilizando este foro.

Será imprescindible tener unas nociones mínimas de lenguaje C.

Me reservo principalmente la labor de desatascar a aquellos que se topen con problemas que les impidan avanzar, porque es evidente que cada cual ha de poner de su parte todo lo que pueda.

No pretendo acapar esta iniciativa. Cualquiera que pueda aportar algo puede sumarse a ella.

En ese sentido y con el único propósito de ir aprendiendo el manejo de Arduino recomiendo empezar con alguno de los kits de iniciación o bien comprarse lo necesario para conseguir algo equivalente.

Un buen kit de inicio para Arduino podría constar de los siguientes componentes:

1 x Arduino UNO Rev3
1 x cabe USB
1 x placa protoboard se recomienda con un mínimo de 800 puntos
4 x pulsadores para PCB
10 x LEDs de colores diferentes colores
15 x Cables de conexión macho macho
1 x Piezo Buzzer
1 x potenciometro de 5 k ohm
1 x termo resistencia NTC (entre 1K ohm a 5 k ohm)
1 x resistencia fotoelectrica LDR
15 x Resistencias 220 ohm
5 x Resistencias 560 ohm
5 x Resistencias 1K
5 x Resistencias 4.7K
10 x Resistencias 10K
5 x Resistencias 1M
4 x Resistencias 10M

Con ello se podrían hacer una gran cantidad de prácticas que permitirían ir comprendiendo las posibilidades de Arduino. Si lo que se quiere es pasar a trabajar en un proyecto concreto personal hay que pensar que el Arduino UNO podría no ser suficiente, ya que un controlador de acuario puede ser todo lo completo que uno se proponga y para un proyecto complejo podría ser necesario usar el Arduino MEGA 2560 que es el modelo superior de la gama Arduino de 8 bits.

Algunas recomendaciones sobre el hardware:

Hay una gran cantidad de componentes comerciales de hardware para Arduino y no todo lo que he probado me ha convencido. Normalmente probar un hardware que no es todo lo bueno que uno espera supone una gran desperdicio de tiempo en pruebas. Por otro lado también existen componentes hardware que considero especialmente interesantes para una gran cantidad de proyectos con Arduino. Entre estos yo señalaría los siguientes:

1 x Pantalla LCD I2C (modelo 16x2 o modelo grande de 20x4)
1 x RTC I2C (Reloj de tiempo real con pila botón)
1 x Sensor térmico digital de alta precisión tipo DS18x20
#2
Antonio Castro, yo soy un "patán" con los bricos.
El día "D" de cuantos € hablaremos!! Jejeje!!
Un saludo, maestro, estaré pendiente de tu post
#3
A lo mejor has visto algún set de arranque que ya viene con un surtido de componentes para empezar a trastear.

Tienes algún link recomendado?
#4
Gracias Antonio estupenda iniciativa.
#5
Yo la pagina que había estado mirando es

http://m.miniinthebox.com/

Pero no es muy especializada, así que habrá sitios mejores. Además, son clonicos de arduino.
#6
Aunque no tengo ningún plan soy consciente de que cualquier día me lanzo a montar algo con Arduino (o Raspberry).

Mi C está tremendamente oxidado pero no sería la primera vez que tengo que sacarlo del fondo de cajón.

Seguiré atentamente este hilo.
#7
Creo que voy a pasar muco tiempo por aqui en cuanto llegue mi arduino Mega Smile
Gracias Antonio, por la iniciativa -good.gif
#8
Hola Antonio,
Magnífica iniciativa. De lenguaje C, ni papa, pero ganas de aprender y trastear muchas, asi que seguiré tus lecciones como un aprendíz más.
Saludos
#9
Estupenda iniciativa Antonio.
#10
(02-03-2014, 05:01 PM)carlosterre escribió: A lo mejor has visto algún set de arranque que ya viene con un surtido de componentes para empezar a trastear.

Tienes algún link recomendado?

No he visto ninguno que tenga todo lo que sugiero y además es muy probable que cada uno de vosotros tenga ciertas preferencis. Yo buscaría en Google usando las palabras clave adecuadas. Sugiero: kit básico de desarrollo arduino con protoboard

Mirar en la descripcion que componentes incluye y compararla con la lista que yo confeccioné. La decision es vuestra. La mayoría de estas cosas se pueden encontrar en tiendas de electrónica aunque suele salir mas caro, pero por ejemplo si os faltan algunos componentes baratos podeis comprar un kit con lo básico y luego comprar las resistencias , los LEDs y cositas así en una tienda de electrónica. Alguno puede estar interesado en comprar componentes para hacer un dimeo. El TIP141 tiene un encapsulado con patillas que no se pueden insertar en una protoboard lo cual implica tener que soldar que es un tema del que también podríamos tratar si a alguien le interesa. No soy un maestro de la soldadura pero me defiendo.

(02-03-2014, 05:50 PM)carlosterre escribió: Yo la pagina que había estado mirando es

http://m.miniinthebox.com/

Pero no es muy especializada, así que habrá sitios mejores. Además, son clonicos de arduino.

He comprado varias cosas allí y funcionan muy bien. Tiene una opción de envío gratuito que supone esperar mucho tiempo pero que funciona bien para pedidos que no tengas prisa alguna. Al ser un emportador extranjero que mueve muchísima mercancía lo tienen muy fichado en Aduanas. Como hagas un pedido que supere los 50 euros te van a cobrar unos gastos de gestión de aduanas y te subirá el precio mucho.

Salvo cosas especiales y baratas, recomiendo buscar tiendas nacionales por el tema de las aduanas.

Lo mejor es comparar ofertas:

http://www.dfrobot.com/index.php
http://www.electan.com/
http://www.conectrol.com
http://dx.com/es/s/arduino (DX Dealextreme)
http://www.hobbytronics.co.uk/
http://www.minilnthebox.com
http://www.diotronic.com
http://www.tindie.com
http://www.cetronic.es
http://www.bricogeek.com/
http://www.superRobotica.com
http://www.robotecno.com

http://www.seeeduino (MALA EXPERIENCIA NO RECOMENDABLE)

(02-03-2014, 07:40 PM)RoFran escribió: Aunque no tengo ningún plan soy consciente de que cualquier día me lanzo a montar algo con Arduino (o Raspberry).

Mi C está tremendamente oxidado pero no sería la primera vez que tengo que sacarlo del fondo de cajón.

Seguiré atentamente este hilo.

En ese caso podrás aprovechar el código reutilizable que se publique, porque algo de eso supongo que se compartirá y si algúna rutina te da problemas puedes plantearla aquí para ver si te puedo ayudar.

(02-03-2014, 08:55 PM)Namiga escribió: Creo que voy a pasar muco tiempo por aqui en cuanto llegue mi arduino Mega Smile
Gracias Antonio, por la iniciativa -good.gif

Estaré encantado de ayudarte. Smile

(02-03-2014, 05:42 PM)Pezquita escribió: Gracias Antonio estupenda iniciativa.

Espero que entre los indecisos alguno termine animándose.
#11
(02-03-2014, 09:04 PM)Juanma escribió: Hola Antonio,
Magnífica iniciativa. De lenguaje C, ni papa, pero ganas de aprender y trastear muchas, asi que seguiré tus lecciones como un aprendíz más.
Saludos

Mi hijo aprendió programación en el colegio usando lenguaje C. El resultado es que odia la programación. Undecided

El lenguaje C se diseñó pensando en independizar el programa de la máquina en la que corre pero con la mente muy enfocada en temas de bajo nivel. Incluso conviene tener en cuenta como se está generando el código para poder detectar cierto tipo de errores. No es intuitivo pero en un sistema como Arduino donde hay que economizar la memoria y optimizar la velocidad de los procesos resulta el lenguaje ideal. Las máquinas prefieren C. -pardon.gif

Primero habría que aprender el Ansi C, y con eso estaríamos a medio camino. El lenguaje de Arduino es C y C++. En realidad la profundidad de conocimientos C++ que se van a necesitar depende de los objetivos que uno tenga. Si uno desea generar código modular reutilizable necesita comprender la programación orientada a objetos de C++ con bastante detalle. Si por el contrario lo que quiere es utilizar los módulos que otros han desarrollado apenas de se necesitará conocer C++ porque los módulos suelen venir documentados con pequeños ejemplos que los hacen muy sencillos e intuitivos de usar.

Yo trabajo generando módulos de código orientado a objeto. Esto supone un trabajo extra que se ve muy recompensado a la hora de su reutilización y a la hora de organizar la lógica de un programa de un cierto tamaño.

La programación orientada a objetos es fundamental en la ingeniería del software. La complejidad de un proyecto grande sería inabarcable si no se trabaja de esa forma. Afortunadamente en Arduino ya hay una gran cantidad de trabajo hecho. Existen librerías (o bibliotecas) de módulos para gestionar toda clase de protocolos de comunicación entre Arduino y otros componentes hardware.

También hay mucho hardware que viene acompañado de drivers con fuentes abiertas que es lo que caracteriza el ambiente de desarrollo de Arduino. Las fuentes oficiales son GPL o también licencia Creative Commons Reconocimiento-Compartir bajo la misma licencia.
#12
Precisamente mi siguiente pregunta era esa: ¿C o C++?

Por lo que comentas... ¿sería también bueno que refrescara conocimientos de ensamblador y microprogramación?
#13
(03-03-2014, 01:33 PM)RoFran escribió: Precisamente mi siguiente pregunta era esa: ¿C o C++?

Por lo que comentas... ¿sería también bueno que refrescara conocimientos de ensamblador y microprogramación?

No, no necesitas saber ensamblador, ni de micro programación pero si sobre la generación de código por parte del compilador y sobre la gestión de memoria en tiempo de ejecución son cosas que ayudan bastante.

Te pongo un ejemplo:
Imagina que las trazas de un programa te lleva a la conclusión de algo tan desconcertante como que el programa entra en una función y que al salir de la misma el programa se queda colgado o hace cosas extrañísimas. Si sabes que el compilador guarda la dirección de retorno de las funciones en la pila, buscarás un error que pueda haber hecho algo indebido en ella. Por ejemplo escribiendo más caracteres de las debidas en una variable local de la función o en alguno de los parámetros recibidos.

Nada de esto supone saber ensamblador. Es más sencillo supone tener conocimiento concretos de ciertos aspectos de como funciona un compilador

Los compiladores no generan código máquina directamente, (específico de caca procesador), generan código P que es un código intermedio. Siendo este específico de cada procesador. Lo que resulta muy útil es tener una idea aproximada de como funciona todo eso.

Para detectar un error escurridizo en C hay que saber lo que se busca y poner así la traza adecuada.
#14
Hola a todos, buenos dias.
estoy tratando de Dimear mi pequeña pantalla de LED para el gambario que tengo de 38L y tengo montada la instalacion electronica y la pantalla.
el programa o libreria (como se denomine) esta escrito, tengo que decir que no fui yo quien realizo la construccion de dicho programa, estoy aprendiendo a entenderla y he estado durante semanas horas y horas de lectura sobre el mundo arduino y la estructura de programacion. pero ahora mismo ya estoy en una encrucijada porque lo que pretendo hacer al final con esta pantalla supera con creces mis conocimientos en programacion y solo gracias a la ayuda que me podais prestar podre conseguir mi meta:

caracteristicas de mi pantalla:

6 LED a 3w/led = 18w 6500ºK luz blanca
5 LED a 1w/led = 5w luz de luna
2 LED a 3w/led = 6w luz roja
fuente a 24v 2.5A
Relojes de carril DIN analogicos para enviar la señal a Arduino.

-----------------------
Mi proyecto a dia de hoy esta asi:

Cuando recibe arduino señal 1 del reloj 1, a las 13:00,
empiezan a dimear las luces blancas, con un tiempo de 20.000ms y un maximo de 180 pwm, lo que tardara aproximadamente en llegar al maximo consumo 1h 15min. (mas o menos)
el reloj 1, sigue mandandole 1 hasta las 22:00. Fotoperiodo al 100% de 8horas.
no cuento el tiempo de amanecer y atardecer porque realmente no creo que las plantas realicen mas fotosintesis que en unos grados altos de luminosidad.
Seguimos........
el reloj 1 a las 22:00 envia un 0 a arduino y comienza el apagado de las luces de dia, desde 180pwm hasta 0, en 20.000ms (1hora 15min)

HASTA AQUI,,,,,,,el dimeo principal.

(porque si pongo 20.000ms que en realidad son 20 segundos es un dimeo de mas de 1 hora)

segun me explicaron una vez: 3.600.000ms (1hora) / 180 pwm = 20.000ms = 20 seg por dimeo.

pero no entiendo porque poniendo 20.000ms se convierte en 1 hora real para Arduino. y todo esto no es mas que el principio ya que quiero secuenciar tres luces o tres tonalidades diferentes y para ello quiero que tengan una linea progresiva de encendidos y apagados (rojo-blanco-azul).

La segunda linea de programacion:

Cuando el reloj 2 le manda señal a las 21:45 a arduino comienza el dimeo de las luces azules. y en 5000ms llega a su maximo de 230pwm de dimeo.
a las 00:00 el reloj 2 envia un 0 a arduino y empiezan a apagarse las luces azules en el mismo tiempo antes señalado 5000ms.

-----------------------------------------------

AHORA, LO QUE YO REALMENTE QUIERO HACER. jajajajaj

Mis amaneceres o atardeceres quiero que duren 1hora de 13:00 a 14:00 (amanecer) y de 22:00 a 23:00 (anochecer)

con la señal del reloj 1.
que se encienda los led rojos, llegando a un pwm (no se cuanto aun) y permanezcan durante 20min a ese maximo. luego se apaguen en un dimeo rapido.
cuando transcurra durante el encendido de los led rojos un tiempo o cuando los led rojos esten en 100pwm por ejemplo (no se si esto seria posible)......que los led blancos empiecen tambien a dimear.
Como los led rojos llegaran a su maximo pwm y se apagaran a los 20min.......ya me olvido de ellos.
Los Led blancos tambien estaran subiendo hasta su maximo pwm transcurridos 40min.
asi que entre los 20min del rojo y los 40min del blanco (amanecer completo de 60min-1h)

seguiremos con el fotoperiodo de 8horas a 180pwm constantes en luz blanca. NO ROJOS.

y ahora llegaria el atardecer...........puffff

tenemos los led blancos a 180pwm, y reciben un 0 del reloj 1. comenzarian a dimear para generar el atardecer. pasados 40 min tendrian que apagarse. pero no sin antes tener los led rojos tambien encendidos para dejar una luz roja durante 20min.

y por ultimo se encenderia los led azules antes de que se apaguen los.

Todo ello tiene como dije antes que mantener una secuencialidad para que parezca lo mas natural posible.

Siempre me cabe la duda de si merece la pena de encender las luces rojas y blancas a la vez y que cada una lleve un tiempo diferentes y asi la señal dimeo seria igual y como las dos llevan tiempos y pwm diferentes las luces van a ir moviendose independientemente y complico mucho menos la programacion.

Ahi os dejo mi pequeño gran pastel. QUE ESTOY SEGURO,,,,,,,,,,se puede hacer mas facil que todo esto, pero soy mas electricista que electronico y carezco de conomientos en programacion. los estudie en su dia y los tengo oxidados no......lo siente. jajaaj

imagenes de mi circuiteria. aun sin terminar de montar la caja al 100%
[Imagen: tlco.jpg]
[Imagen: audk.jpg]
[Imagen: g7vd.jpg]



y aqui mi libreria
//Pantalla Gambario


// Se Definen Las Entradas
const int Imput_Diurna = 2; //Entrada 2 Reloj, Marcha luz diurna
const int Imput_Nocturna = 3; //entrada 3 Reloj, Marcha luz nocturna
boolean Marcha_Dia;
boolean Marcha_Noche;

// Se definen las Salidas
const int PWM_Diurna = 10; // salida PWM 10, Diurna
const int PWM_Nocturna = 9; //salida PWM 9, Nocturna

//Se definen las marcas registro PWM
int Reg_PWM_Dia;
int Reg_PWM_Noche;
int Max_PWM_Dia;
int Max_PWM_Noche;

void setup() {
// Se Definen Entradas o Salidas
pinMode(Imput_Diurna, INPUT);
pinMode(Imput_Nocturna, INPUT);

pinMode(PWM_Diurna, OUTPUT);
pinMode(PWM_Nocturna, OUTPUT);

//Define el registro pwm a 0
Reg_PWM_Dia = 0;
Reg_PWM_Noche = 0;

//Define Maxima Salida PWM 0 - 255
Max_PWM_Dia = 180;
Max_PWM_Noche = 230;
}

void loop(){
// Lee Estado Entradas
Marcha_Dia = digitalRead(Imput_Diurna);
Marcha_Noche = digitalRead(Imput_Nocturna);


//Luz Dia Amanecer
if ((Marcha_Dia == HIGH) && (Reg_PWM_Dia < Max_PWM_Dia)) { // Si entrada esta a 1, y el registro es menor a Maximo pwm
Reg_PWM_Dia++; //Incremento del registro
analogWrite(PWM_Diurna, Reg_PWM_Dia); // Escribe el registro PWM en Salida Diurna
delay (20000); //Temporizador espera ms
}

//Luz Dia Anochecer
if ((Marcha_Dia == LOW) && (Reg_PWM_Dia > 0)) { // Si entrada esta a 0, y el registro es mayor de 0 pwm
Reg_PWM_Dia--; //Decremento del registro
analogWrite(PWM_Diurna, Reg_PWM_Dia); // Escribe el registro PWM en Salida Diurna
delay (20000); //Temporizador espera ms
}
//Luz Noche Amanecer
if ((Marcha_Noche == HIGH) && (Reg_PWM_Noche < Max_PWM_Noche)) { // Si entrada esta a 1, y el registro es menor a Maximo pwm
Reg_PWM_Noche++; //Incremento del registro
analogWrite(PWM_Nocturna, Reg_PWM_Noche); // Escribe el registro PWM en Salida Nocturna
delay (5000); //Temporizador espera ms
}

//Luz Noche Anochecer
if ((Marcha_Noche == LOW) && (Reg_PWM_Noche > 0)) { // Si entrada esta a 0, y el registro es mayor de 0 pwm
Reg_PWM_Noche--; //Decremento del registro
analogWrite(PWM_Nocturna, Reg_PWM_Noche); // Escribe el registro PWM en Salida Diurna
delay (5000); //Temporizador espera ms
}


}
#15
Esta mañana he visto que el NetBeans tiene un módulo para arduino Wink

Como idea, cuando tengas tu sistema en marcha, te diría que pruebes a implementar una función que establezca la intensidad no de manera líneal como ahora (registro incrementado o decrementado cada x segundos) sino modelando los cambios durante el dia ;-)

Usuarios navegando en este tema: 1 invitado(s)


Salto de foro: