Go Down

Topic: Duda función millis en domotización para el apagado de un display (SOLUCIONADO) (Read 17570 times) previous topic - next topic

Dabauza

Muy buenas,

Tengo la idea en mente de domotizarme la casa usando arduino y tengo una duda, de momento llevo que hecho el encendido/apagado de las luces de forma manual y de forma automática mediante dos pulsadores (uno para el ON/OFF del modo manual y otro para el ON/OFF del modo automático). Si la enciendo de forma manual las luces se enceraran al máximo, pero si la enciendo de forma automática dependerá de que el sensor de presencia detecte movimiento y ademas mediante una LDR se regulara la intensidad de la luz.

También he añadido un display LCD de 16x2 en el que muestro la hora, la humedad y la temperatura y si el sistema esta funcionando en modo manual o en modo automático.

Ahora bien, estoy intentando que el display solo permanezca encendido solo durante 30 segundos (con la función millis) después de pulsar cualquiera de los dos pulsadores, pero no hay manera, lo he probado de 10 millones de formas y nada, lo máximo que he conseguido es que se apague a los 30 segundos pero si vuelvo a pulsar el pulsador ya no hay manera de que vulva a iluminarse el display.

Ya no se que mas intentar, aqui dejo lo que llevo de la programación para que veáis como esta, seguramente hecha un desastre,  pero soy nuevo en esto y he ido aprendiendo de lo que he ido leyendo y a base de prueba y error.


Dabauza

#include "DHT.h" //cargamos la librería DHT
#define DHTPIN 12 //Seleccionamos el pin en el que se //conectará el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11 (hay //otros DHT)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#include <DS1302.h>
                         // RST=pin8
DS1302 rtc(8, 9, 10);    // DAT=pin9
                         // CLK=pin10
                       
Time x;

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display


DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor

byte termometro[8] = //icono de termometro
{
    B00100,
    B01010,
    B01010,
    B01110,
    B01110,
    B11111,
    B11111,
    B01110
};

byte humedad[8] = //icon de gota de agua
{
    B00100,
    B00100,
    B01010,
    B01010,
    B10001,
    B10001,
    B10001,
    B01110,
};

byte reloj[8] = //icon de reloj
{
    B00000,
    B01110,
    B10101,
    B10101,
    B10111,
    B10001,
    B01110,
    B00000,
};

int leds[]={2,3,4,5,6}; //LEDS controlados por pwm y entrada analoga
int i=0;
int foto=A15; //Variable de fotocelula
int medida=0;
int luzled=0;
int PIR=26;
int estadoPIR;

int estadoActual=0; //Guarda el estado actual del botón
int estadoUltimo=0; //Guarda el último estado del botón
int contador=0;     //Guarda las veces que se pulsa el botón
int pulsador=52;

int estadoActualManual=0; //Guarda el estado actual del botón
int estadoUltimoManual=0; //Guarda el último estado del botón
int contadorManual=0;     //Guarda las veces que se pulsa el botón
int pulsadorManual=50;



Dabauza

void setup()
{
  for(i=0;i<5;i++)
  {
    pinMode(leds,OUTPUT);
  }
  pinMode(foto,INPUT);
  pinMode(PIR,INPUT); 
  pinMode(pulsador, INPUT);  //Donde esta conectado el pulsador
  pinMode(pulsadorManual, INPUT);  //Donde esta conectado el pulsador
  Serial.begin(9600);
 
  dht.begin(); //Se inicia el sensor
  lcd.init();  //Se inicia el LCD   
 
  lcd.createChar(1,termometro);
  lcd.createChar(2,humedad);
  lcd.createChar(3,reloj); 
}

Dabauza

void loop()
{
  estadoActual=digitalRead(pulsador);
  if (estadoActual != estadoUltimo)
    {
      if (estadoActual == HIGH)
        {
          contador = contador +1;
          Serial.print ("Esta es la pulsación nº ");
          Serial.println (contador);
        }
    }
  estadoUltimo=estadoActual; 
   
  if (contador % 2 == 0) //Pulsacion par modo Manual
    {
    estadoActualManual=digitalRead(pulsadorManual);
      if (estadoActualManual != estadoUltimoManual)
      {
        if (estadoActualManual == HIGH)
        {
          contadorManual = contadorManual +1;
          Serial.print ("Esta es la pulsación manual nº ");
          Serial.println (contadorManual);
        }
      }
    estadoUltimoManual=estadoActualManual;
     
      for(i=0;i<5;i++)
       {
        if (contadorManual % 2 == 0)
          {
            analogWrite(leds,0);
            lcd.noBacklight();
            lcd.clear();
          }
        else
         {
          analogWrite(leds,255);                 
         }
       }
    }

  else   
    { 
       estadoPIR=digitalRead(PIR);       
       Serial.println(estadoPIR);       
       if (estadoPIR == HIGH)
         {
           medida = analogRead(foto); //Toma la medida del puerto analogo
           Serial.println(medida);  //Imprime el valor de la medida
           luzled = 255 - (medida/4); 
           Serial.println(luzled); //Imprime el valor de la salida luzled
           for(i=0;i<5;i++)
             {
               if (luzled <= 5) // Si el calculo de luzled es menor o igual a 5...
                 {
                   analogWrite(leds,0); // ...luzled no se encendera
                 }
                else // Entonces es mayor de 5...
                 {
                   analogWrite(leds,luzled); // ...luzled se encendera de forma
                                                //    regulada
                 }
             }
        }

       else
         {
           for(i=0;i<5;i++)           
           analogWrite(leds,0);
         }
    }
   
  if (contador % 2 != 0){LCDaut();}   
  if (contadorManual % 2 != 0) {LCDman();}       
}


void LCDman()

  float h = dht.readHumidity(); //Se lee la humedad
  float t = dht.readTemperature(); //Se lee la temperatura
  x = rtc.getTime();

  Serial.println("Humedad: ");
  Serial.println(h);
  Serial.println("Temperatura: ");
  Serial.println(t);
/*
  lcd.setCursor(0, 0);
  lcd.write(3);
  lcd.setCursor(1, 0);  //Inicio de la posicion 1 de la primera linea
  lcd.print(rtc.getTimeStr());
*/ 
  lcd.setCursor(1, 0);
  lcd.write(3);
  lcd.setCursor(2, 0);
  lcd.print(x.hour);
  lcd.print(":");
  lcd.print(x.min);
 
  lcd.setCursor(9, 0);
  lcd.print("man");

  lcd.backlight();
  lcd.setCursor(0, 1); //Inicio de la posicion 0 de la segunda linea
  lcd.write(1);
  lcd.print(t);
  lcd.setCursor(6, 1);  //Inicio de la posicion 6 de la segunda linea
  lcd.print((char)223);
  lcd.print("C");
 
  lcd.setCursor(9, 1); //Inicio de la posicion 9 de la segunda linea
  lcd.write(2);
  lcd.print(h);
  lcd.setCursor(15, 1);  //Inicio de la posicion 15 de la segunda linea
  lcd.print("%");
}

void LCDaut()

  float h = dht.readHumidity(); //Se lee la humedad
  float t = dht.readTemperature(); //Se lee la temperatura
  x = rtc.getTime();

  Serial.println("Humedad: ");
  Serial.println(h);
  Serial.println("Temperatura: ");
  Serial.println(t);
/*
  lcd.setCursor(0, 0);
  lcd.write(3);
  lcd.setCursor(1, 0);  //Inicio de la posicion 1 de la primera linea
  lcd.print(rtc.getTimeStr());
*/ 
  lcd.setCursor(1, 0);
  lcd.write(3);
  lcd.setCursor(2, 0);
  lcd.print(x.hour);
  lcd.print(":");
  lcd.print(x.min);

  lcd.setCursor(13, 0);
  lcd.print("aut");

  lcd.backlight();
  lcd.setCursor(0, 1); //Inicio de la posicion 0 de la segunda linea
  lcd.write(1);
  lcd.print(t);
  lcd.setCursor(6, 1);  //Inicio de la posicion 6 de la segunda linea
  lcd.print((char)223);
  lcd.print("C");
 
  lcd.setCursor(9, 1); //Inicio de la posicion 9 de la segunda linea
  lcd.write(2);
  lcd.print(h);
  lcd.setCursor(15, 1);  //Inicio de la posicion 15 de la segunda linea
  lcd.print("%");
}

Dabauza

#4
Mar 17, 2014, 11:27 pm Last Edit: Mar 17, 2014, 11:33 pm by Dabauza Reason: 1
Cualquier sugerencia sera bien recibida en cuanto a la presentación del código, así como su estructura o lo que sea.

Un saludo y muchas gracias

Dabauza

Estoy investigando a ver como funciona esto:

http://playground.arduino.cc/Code/Timer#.UyhQRPl5NyW

Parece ser que esto resolvería el problema que tengo del LCD y ademas podría usarlo para que la placa no este leyendo constantemente la lectura de los sensores y el RTC ya que si lo pongo en modo automático se ralentiza mucho el funcionamiento de la placa.

Voy a continuar con las pruebas a ver si consigo algo en claro

Saludos

juanpintom

#6
Mar 18, 2014, 10:43 pm Last Edit: Mar 18, 2014, 10:50 pm by juanpintom Reason: 1

Muy buenas,

Tengo la idea en mente de domotizarme la casa usando arduino y tengo una duda, de momento llevo que hecho el encendido/apagado de las luces de forma manual y de forma automática mediante dos pulsadores (uno para el ON/OFF del modo manual y otro para el ON/OFF del modo automático). Si la enciendo de forma manual las luces se enceraran al máximo, pero si la enciendo de forma automática dependerá de que el sensor de presencia detecte movimiento y ademas mediante una LDR se regulara la intensidad de la luz.

También he añadido un display LCD de 16x2 en el que muestro la hora, la humedad y la temperatura y si el sistema esta funcionando en modo manual o en modo automático.

Ahora bien, estoy intentando que el display solo permanezca encendido solo durante 30 segundos (con la función millis) después de pulsar cualquiera de los dos pulsadores, pero no hay manera, lo he probado de 10 millones de formas y nada, lo máximo que he conseguido es que se apague a los 30 segundos pero si vuelvo a pulsar el pulsador ya no hay manera de que vulva a iluminarse el display.

Ya no se que mas intentar, aqui dejo lo que llevo de la programación para que veáis como esta, seguramente hecha un desastre,  pero soy nuevo en esto y he ido aprendiendo de lo que he ido leyendo y a base de prueba y error.




No se como realizarlo utilizando el RTC (aun no he montado el modulo y lo tengo desde hace meses xD), en todo caso tu problema  es sencillo de solventar :)

Code: [Select]
//define una variable y un PIN que encienda el LCD
unsigned long tiempo = millis();
#define pinLCD   3


En el Setup()

Code: [Select]
pinMode(pinLCD,OUTPUT);
digitalWrite(pinLCD,HIGH);

 
y en el loop haces lo siguiente:

Code: [Select]
if ( digitalRead(pulsador) || digitalRead(pulsadorManual) )
{
  tiempo = millis ();
  if (!digitalRead(pinLCD)) digitalWrite(pinLCD,HIGH);
}else if (millis()-tiempo > 30000)
  digitalWrite(pinLCD,LOW);


Revisalo que no lo he pasado por el compilador y puede faltar algun ; xD
:)
Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Dabauza

#7
Mar 18, 2014, 11:33 pm Last Edit: Mar 19, 2014, 12:05 am by Dabauza Reason: 1

No se como realizarlo utilizando el RTC (aun no he montado el modulo y lo tengo desde hace meses xD), en todo caso tu problema  es sencillo de solventar :)

Code: [Select]
//define una variable y un PIN que encienda el LCD
unsigned long tiempo = millis();
#define pinLCD   3


En el Setup()

Code: [Select]
pinMode(pinLCD,OUTPUT);
digitalWrite(pinLCD,HIGH);

   
y en el loop haces lo siguiente:

Code: [Select]
if ( digitalRead(pulsador) || digitalRead(pulsadorManual) )
{
   tiempo = millis ();
   if (!digitalRead(pinLCD)) digitalWrite(pinLCD,HIGH);
}else if (millis()-tiempo > 30000)
   digitalWrite(pinLCD,LOW);


Revisalo que no lo he pasado por el compilador y puede faltar algun ; xD
:)


Muchas gracias  juanpintom, voy a probarlo a ver el resultado.

Edito:
Un par de preguntas que igual son un poco tontas...

¿Que diferencia hay entre...?:
#define pinLCD 3     e
int pinLCD = 3

y... Si al inicio del sketch ya he definido:
unsigned long tiempo = millis();
¿Es necesario luego en el loop poner esto?
tiempo = millis();

¿O se podria hacer asi?
unsigned long tiempo (al inicio)
tiempo = millis(); (en el loop)

Muchas gracias

Saludos

juanpintom


Edito:
Un par de preguntas que igual son un poco tontas...

¿Que diferencia hay entre...?:
#define pinLCD 3     e
int pinLCD = 3

Lo hago por costumbre, cualquier valor que no sea una variable lo defino como constante, para que en ningun caso pueda ser alterado en tiempo de ejecucion.
Tecnicamente no puedo ser muy claro porque lo explicaria mal. Pero si no me equivoco tambien ocupa menos memoria al ser declarado como constante y no variable.


y... Si al inicio del sketch ya he definido:
unsigned long tiempo = millis();
¿Es necesario luego en el loop poner esto?
tiempo = millis();

¿O se podria hacer asi?
unsigned long tiempo (al inicio)
tiempo = millis(); (en el loop)

Muchas gracias

Saludos


Si, se podria hacer perfectamente con la segunda opcion que propones, solo que siempre que utilizo variables de tiempo las inicializo con el valor al inicio. Pero de nuevo, son costumbres. Lo que es seguro es que en el loop tiene que estar. Cada vez que se pulse un boton la variable tiempo guardara el momento en que este se pulso, para luego hacer el calculo posterior.

Salu2
Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Dabauza

#9
Mar 19, 2014, 12:44 am Last Edit: Mar 19, 2014, 01:38 am by Dabauza Reason: 1

Lo hago por costumbre, cualquier valor que no sea una variable lo defino como constante, para que en ningun caso pueda ser alterado en tiempo de ejecucion.
Tecnicamente no puedo ser muy claro porque lo explicaria mal. Pero si no me equivoco tambien ocupa menos memoria al ser declarado como constante y no variable.


Lo veo bastante lógico y coherente, de ahora en adelante lo haré así también  :)

Por cierto, yo ya no se que hago mal, he probado el código que me has puesto y nada de nada hace lo mismo que sin añadir el código tuyo. Ya no se que puñetas hago mal. Esto empieza a ser un poco desesperante  =(

Edito:
Creo que había conectado Vcc del LCD donde no tocaba, voy a probar de nuevo a ver lo que pasa.

Re-Edito:
Si que funciona lo que pasa es que el LCD al quitarle la alimentacion se ralla y cuando vuelvo a apagar y encender los LEDS en el LCD faltan caracteres o salen cosas raras.

Estoy probando asi:
  if (contador % 2 != 0){
   tiempo = millis ();
   LCDaut();
  }
else if (millis()-tiempo > 30000){
   lcd.noBacklight();
   lcd.clear();
}
 
  if (contadorManual % 2 != 0){
   tiempo = millis ();
   LCDman();
  }
else if (millis()-tiempo > 30000){
   lcd.noBacklight();
   lcd.clear();
}

Pero estoy como al principio, enciende pero no apaga transcurridos los 30 seg :(

Re-re-edito: :)
BIIIIIIIIIIIIIIIIIIIIIIEEEEEEEEEEEEEEEEEEEENNNNNNNNNNNNNN!!!!!!!!!!!!!!!!!!!!!!!

Ya funciona!!!!!!!! :D :D :D :D

No veas menuda alegría, después de días y días intentándolo por fin a funcionado. Muchisimas gracias
juanpintom y a todos los que colgais tan maravillosa y valiosa informacion en este foro :D :D :D la solucion era esta:

  if ((contador % 2 != 0)&&(digitalRead(pulsador))){
   tiempo = millis ();
   LCDaut();
  }
else if (millis()-tiempo > 30000){
   lcd.noBacklight();
   lcd.clear();
}
 
  if ((contadorManual % 2 != 0)&&(digitalRead(pulsadorManual))){
   tiempo = millis ();
   LCDman();
  }
else if (millis()-tiempo > 30000){
   lcd.noBacklight();
   lcd.clear();
}

Había una cosa por las que yo sabia que no funcionaba pero que no sabia como hacerlo. Una de ellas era que no conseguía hacer que el conteo del temporizador dependiera del momento en que yo pulsaba el pulsador, la solución era tan sencilla como poner if(... ... ... &&(digitalRead(pulsador))){       (!!!Esas puertas logicas!!! :D)

Y la otra era que yo usaba el else, y usando el else if puedo poner una segunda condición en vez de ponerlo todo en la primera.

Ademas, no me preguntes el por que pero se a solucionado solo el problema de que el mega 2650 funcionara lento. :)  Aunque de todas formas voy a intentar que no este leyendo todo el rato el DHT11 y el RTC

Un saludo

juanpintom



Lo hago por costumbre, cualquier valor que no sea una variable lo defino como constante, para que en ningun caso pueda ser alterado en tiempo de ejecucion.
Tecnicamente no puedo ser muy claro porque lo explicaria mal. Pero si no me equivoco tambien ocupa menos memoria al ser declarado como constante y no variable.


Lo veo bastante lógico y coherente, de ahora en adelante lo haré así también  :)

Por cierto, yo ya no se que hago mal, he probado el código que me has puesto y nada de nada hace lo mismo que sin añadir el código tuyo. Ya no se que puñetas hago mal. Esto empieza a ser un poco desesperante  =(

Edito:
Creo que había conectado Vcc del LCD donde no tocaba, voy a probar de nuevo a ver lo que pasa.

Re-Edito:
Si que funciona lo que pasa es que el LCD al quitarle la alimentacion se ralla y cuando vuelvo a apagar y encender los LEDS en el LCD faltan caracteres o salen cosas raras.

Estoy probando asi:
  if (contador % 2 != 0){
   tiempo = millis ();
   LCDaut();
  }
else if (millis()-tiempo > 30000){
   lcd.noBacklight();
   lcd.clear();
}
 
  if (contadorManual % 2 != 0){
   tiempo = millis ();
   LCDman();
  }
else if (millis()-tiempo > 30000){
   lcd.noBacklight();
   lcd.clear();
}

Pero estoy como al principio, enciende pero no apaga transcurridos los 30 seg :(

Un saludo


Puede ser que este pasando constantemente por tiempo=millis();  ?
Añade un Serial.println("Boton pulsado");  en los if
y otro Serial.println("Apagar pantalla");  en los else if
y prueba si sale constantemente "Boton Pulsado" en el monitor serie

Salu2
Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Dabauza

#11
Mar 19, 2014, 01:53 am Last Edit: Mar 19, 2014, 02:13 am by Dabauza Reason: 1

Puede ser que este pasando constantemente por tiempo=millis();  ?
Añade un Serial.println("Boton pulsado");  en los if
y otro Serial.println("Apagar pantalla");  en los else if
y prueba si sale constantemente "Boton Pulsado" en el monitor serie

Salu2


Exactamente, ese era el problema. Al añadir la puerta AND junto con el estado del pulsador ya no reinicia todo el rato el temporizador

Muuuchiiiiiiisiiiiimaaaas gracias.   :)

Ahora a intentar que las lecturas las tome de forma pausada de los sensores y a esperar que lleguen pronto el resto de materiales para continuar con los experimentos.

También me gustaría hacer la función dimmer con un pulsador para poder regular los leds de forma manual también.

Y a ver si se me ocurre alguna otra cosa que ir añadiendo. Acepto sugerencias XD

Joe! No veas menuda alegría llevo encima XD. Que gusto da ver como las cosas van saliendo y mas aun cuando son cosas que haces por ti mismo y que te llevan tiempo y esfuerzo.

Por cierto seguiré atento al post de Proyecto Souliss para ir allanando el terreno mientras llegan los materiales e ir enterándome las nuevas que vayan surgiendo.

Juanpintom estoy a tu disposición para cualquier cosa que necesites ;)

Muchas gracias de nuevo por tu tiempo y ayuda.

Saludos

juanpintom

#12
Mar 19, 2014, 02:21 am Last Edit: Mar 19, 2014, 02:29 am by juanpintom Reason: 1
Para la lectura cada 5 segs :
if(millis()%5000==0)
lecturas....

Para el dimmer  te paso un codigo de una lampara dimmer capacitiva que tengo montada, es doble porque es la iluminacion que tengo montada en los lados de la cama. Lo que hace es cuando detecta una pulsacion sube el brillo, y si la luz esta encendida siempre lo baja, se podria depurar para que funcionara de otros modos, pero para mi este era el mas comodo. (Pulso hasta que ilumine suficiente y luego puedo bajar directamente o poco a poco.

No hay de que, estamos para ayudar! Seguramente tu sepas muchas cosas que yo no sepa y puede que necesite :)

Para el proyecto Souliss precisamente interesaria tener gente con todo tipo de conocimientos, porque cualquiera puede aportar cosas interesantes.

Salu2
Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Dabauza

#13
Mar 19, 2014, 03:02 am Last Edit: Mar 19, 2014, 03:45 am by Dabauza Reason: 1

Para la lectura cada 5 segs :
if(millis()%5000==0)
lecturas....


Gracias, Voy a intentar adaptarlo a mi código a ver si tengo suerte y no da mucha guerra :)


Para el dimmer  te paso un codigo de una lampara dimmer capacitiva que tengo montada, es doble porque es la iluminacion que tengo montada en los lados de la cama. Lo que hace es cuando detecta una pulsacion sube el brillo, y si la luz esta encendida siempre lo baja, se podria depurar para que funcionara de otros modos, pero para mi este era el mas comodo. (Pulso hasta que ilumine suficiente y luego puedo bajar directamente o poco a poco.


Vaya, tenemos formas muy parecidas (por no decir iguales) de pensar, eso era lo que quería hacer que al pulsar incrementara y al volver a pulsar decrementara. Le voy a pegar un ojo por que (no se si tu dimmer funcionara asi) a mi me gustaría también que si le doy el primer pulso corto se encendiera al máximo, y si estando encendida le doy un pulso corto se apague.


No hay de que, estamos para ayudar! Seguramente tu sepas muchas cosas que yo no sepa y puede que necesite :)

Para el proyecto Souliss precisamente interesaria tener gente con todo tipo de conocimientos, porque cualquiera puede aportar cosas interesantes.


Yo soy electricista de profesión y formación  ;) aunque ahora mismo estoy parado por lo que estoy aprovechando para formarme mas.  :)

Así que de conocimientos de electricidad voy bastante bien, de electrónica analógica y digital me defiendo algo y de programación estoy aprendiendo ahora.

Personalmente he llegado hasta aquí cuando he estudiado los automatas programables (PLC) y sistemas domoticos (como el X10, KNX...), que cuando vi lo que valía cada cosa me quede  :smiley-eek-blue: y me puse a investigar vías mas económicas con lo cual me tope de casualidad con Arduino, que ademas es polivalente y vale tanto como para usarlo como PLC como para domotica, robotica o lo que a uno se le ocurra e infinitamente mas económico.

Un saludo

juanpintom

Yo no segui desarrollando el sketch que te he pasado porque ya me meti en Souliss, que ya tiene desarrolladas todas esas ideas, la de pulso corto, la de pulso largo, y estoy pendiente de dedicarle algo de tiempo a desarrollar el doble y triple click (que no tiene mucha complejidad)

El caso es que no queria pulsos cortos en ese proyecto, para evitar estar durmiendo, tocar sin querer el boton capacitivo y encender la luz a 255 xD. Nos despertariamos asi:  :smiley-eek: xD

Para otros usos si que tengo programadas las lamparas capacitivas en un nodo Souliss que enciende a 170 o apaga con el pulso corto, y regula con el pulso largo, te lo paso tambien si quieres :)

Ves! yo hace años que acabe el CFGM de Electronica y cada vez que me pongo a recordar algo, me cuesta mas que si lo estuviera aprendiendo de nuevas! Con decirte que acabe por revisar el funcionamiento de un puente de diodos... xD por vergüenza xD

Asi que con las dudas de electronica, que suelen ser las mas sencillas en los circuitos mas chorras, y a su vez las mas faciles de solventar..., ya tengo alguien a quien consultar! :) (Mi profesor de electronica basica se reiria de mi el c...bron xDD )

Yo tambien hice programacion PLC ( locura introducir los programas en un teclado hexadecimal, queda a años luz de lo que ahora se puede hacer con un Arduino de 2€ ) Pero considero que es una gran base, igual que aprender C o incluso Pseudocodigo para tener la mente dispuesta a programar.

Luego me dedique (y me dedico) a la reparacion de equipos, pero acabe estudiando tambien CFGS de Programacion, en este ambito (arduino) creo que cuanto mas polivalente y multidisciplinal seas muchas mas posibilidades e ideas tienes.

Mi proximo reto (ya iniciado y con fecha fin) es montarme una Impresora 3d, que se hace con un MEGA2560 y pocos mas conocimientos, si realmente quiero llevar a cabo mis ideas creo que ese es el camino a seguir, no es un coste muy alto, en contra de lo que la gente cree (unos 150-200€) lo que me gaste en su dia en una grabadora de cd 2x vamos... xD

Salu2

Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Go Up