Show Posts
Pages: [1]
1  International / Proyectos / Re: Problemas con proyecto de estación meteorológica on: January 03, 2013, 06:25:26 am
CODIGO SHIELD LCD + BOTONES: http://pastebin.com/JP9cR6bw
(no cabe entero en un post)


CODIGO LCD + TEMPERATURA
Code:
#include <LiquidCrystal.h>

LiquidCrystal lcd( 8, 9, 4, 5, 6, 7);

float temp;
int tempPin = A1;

void setup() {
  lcd.begin(16, 2);
  lcd.print("Temperature:");
}

void loop() {
  temp = analogRead(tempPin);
  temp = temp * 0.48828125;
  lcd.setCursor(0, 1);
  lcd.print(temp);
  delay(1000);
}


Decir que también encontré un código que utiliza otra libreria, una llamada <LCD4Bit_mod.h> que en mi opinión es algo más compleja de usar, ya que solo permite imprimir chars por la LCD (O strings, ya que la libreria al parecer los convierte directamente), pero lo que yo necesito es mostrar un float


Tambien he pensado en utilizar este codigo y pasar (aun no se como) al final "grados" y "deciR" a char e intentar imprimirlos.. Pero sigo sin tener claro el error de la lectura erronea
Code:
//Control temperatura
int analogPin = A1; // Pin analogico 0 de Arduino
float temperature = 0.0;
int grados, decimas, gradR, deciR;
int lm35read, tmedia;
int val,cnt;


void setup()   {
  // Iniciamos comunicacion serie 
  Serial.begin(9600);
}


void loop()
{
    // inicializamos el valor de tmedia
    tmedia=0;
   
    // medimos la temperatura 10 veces y la almacenamos en tmedia
    for ( cnt=0; cnt<10; cnt++)
    {
      lm35read = analogRead(analogPin);
      tmedia=tmedia+lm35read;
    }
   
    // calculamos la media de las medidas
    tmedia=tmedia/cnt;
   
    // convertimos tmedia en un valor en grados, pero
    // dadas las caracteristicas del sensor la precision es de
    // 0.5 grados y los decimales son .4 o .9
    temperature = (5.0 * float(tmedia) * 100.0)/1024.0;
   
    // mapeamos el valor tmedia para que nos de
    // la temperatura en decimas de grado
    val = map(tmedia,0,1023,0,4990);
   
    // ahora los grados los obtenemos dividiendo por 10
    grados=val/10;
   
    // y las decimas de grado son el resto de la division
    // por 10
    decimas=val%10;
   
    // Redondeamos los decimales a 0 o a 5
    if (decimas< 3)
       {
         gradR=grados;
         deciR=0;
       }
    if ((decimas > 2)&(decimas<7))
       {
         gradR=grados;
         deciR=5;
       }
     else
       {
         gradR=grados+1;
         deciR=0;
       } 
   
    // Sacamos los datos por el puerto serie   
   /* Serial.print("Lectura en bruto ");
    Serial.print(lm35read);
    Serial.print("  temperatura sin redondear  ");
    Serial.print(temperature);
    Serial.print("C  ");
    Serial.print("temperatura redondeada ");*/
    Serial.print(grados);
    Serial.print(".");
    Serial.println(deciR);
   
    // Y por ultimo lo mandamos a la pantalla LCD

  /*  Serial.println("  Temperatura"); 
    Serial.print(" ");
   
    Serial.print(gradR);
    Serial.print(",");
    Serial.print(deciR);
    Serial.print(".C");
    Serial.print("       ");*/

    delay(2000);

 
}


Aquí os adjunto la documentación del shield que he podido encontrar:
- http://www.robotshop.com/content/PDF/dfrobot-arduino-shields-manual.pdf (Pagina 8 )
- Esquematico: http://www.robotshop.com/content/PDF/schematics-v1.0-dfr0009.pdf
- http://www.robotshop.com/content/PDF/wiki-dfr0009.pdf
- http://www.robotshop.com/content/PDF/lcd-datasheet-dfr0009.pdf (Datasheet del HITACHI HD44780U, que al parecer es el controlador que lleva la LCD)

Cualquier ayuda es bienvenida!
Y muchisimas gracias por adelantado smiley
2  International / Proyectos / Problemas con proyecto de estación meteorológica on: January 03, 2013, 06:23:36 am
Muy buenas a todos!

Hacía tiempo que no posteaba por aquí... Y como siempre, es para pedir ayuda  smiley-roll-sweat

Me hace ilusión conseguir que me funcione un pequeño proyecto que se me ha ocurrido, pero en las pruebas previas a montarlo no consigo obtener los resultados que necesito, así que una vez más me pongo en disposición de la comunidad para aprender de ella

Os pongo un poco en situación.
El proyecto consta de:

- Una placa con un sensor de temperatura LM35 y un modulo BT
- Una placa con un Shield LCD  16x2 + botones (el aque aparece en la pagina 8 de este pdf: http://www.robotshop.com/content/PDF/dfrobot-arduino-shields-manual.pdf ) y otro módulo BT

La idea es crearme una pequeña "interfaz" en el LCD que contenga dos (de momento) "pantallas", entre las que me iría moviendo con los botones de Izquierda y Derecha:
- Temperatura actual
- Temperatura máxima y mínima

El botón Select encendería o apagaría el LCD, y los botones de Arriba y Abajo cambiarían la intensidad de la iluminacion del LCD

Hasta ahí todo correcto, supongo.


Entonces aquí viene el "quid" de la cuestión.
Antes de ponerme a programarlo todo, he hecho pruebas de:
- Mostrar SOLO la temperatura actual conectando el sensor al Shield (el Shield, como se puede apreciar en la documentación, tiene algunos pines a disposicion del usuario, aunque no todos los que "utiliza", ya que en realidad usa muchos menos), y FUNCIONA
- Detectar las pulsaciones de los botones del Shield, y FUNCIONA

El problema me viene al intentar hacerlo todo junto, que mientras me detecte las pulsaciones, me muestre el valor recogido por el sensor (ni siquiera hablamos de BT todavía, sino de usarlo en conjunción con el LCD).
Como podréis observar en la documentación, la detección del botón pulsado se hace midiendo la tensión recogida en el pin A0, por tanto yo conecto el pin de datos del LM35 al A1, y su alimentación al pin que deja disponible el Shield, el de 3.3V (el que uso para mis pruebas y me funciona correctamente), y el GND a uno de los dos pines GND que deja disponilbes el Shield (he probado con ambos)

Mi teoría es que A1 (o cualquier otro, ya que he estado probando con todos los pines digitales, e incluso alimentandolo a 5V un momento, y hasta alimentacion desde pines digitales), es decir, el cable que va desde la "pata" de datos del LM35 hasta A1 recibe corriente del Shield, ya que el valor de temperatura que obtengo varía al pulsar cualquiera de los botones (y no debería, ya que ese pin queda a disposicion del usuario y el Shield no lo utiliza).... Mas abajo adjunto toda la documentacion que he podido encontrar, por si alguien es capaz de ver el fallo


Os dejo los códigos que utilizo para mostrar la temperatura por el Shield, y el de detectar los botones del Shield... Yo he probado integrando ambos y me da el error que comento, que obtengo valores de temperatura que no son los que necesito

Lo pongo en varios mensajes porque me pone que supero el maximo de caracteres
3  International / Documentación / Activar/Desactivar LEDs remotamente sin placa Ethernet (Processing + Arduino) on: October 23, 2012, 10:35:36 am
Hola de nuevo a todos!

No estoy del todo seguro de si este post debería ir aquí o en la sección de "Proyectos", pero como lo haré a modo de tutorial, supongo que este es un buen sitio.

Soy bastante novato en el mundo de Arduino, y poseo una Arduino Leonardo (incompatible con la mayoría de Shields actuales), y una de las cosas que mas ganas tenia de probar era la posibilidad de poder ejecutar acciones en la placa sin estar yo presente en el mismo lugar que la placa (es decir, a distancia).

Vi los Shields Ethernet/WiFi, pero aparte de ser una opción algo cara, no eran compatibles con mi Arduino Leonardo (se pueden adaptar con cables, pero eso es otra historia), así que me puse a buscar y encontré un método basado en Processing y Arduino, el cual he "mejorado"/"Adaptado" (si se le puede llamar así) para poder controlar varios LEDs desde una interfaz WEB sin tener ningun Shield de red.

PROS: Económico. Compatible con cualquier board. No requiere estar presente en el mismo sitio.
CONTRAS: Requiere registro (si se puede considerar contra). Interfaz arcaica

Empezamos

Material
  • Placa Arduino (Obvio) con los drivers instalados
  • Processing de 32bits (el de 64 a mi me da fallos, y tengo Windows 7 de 64b). Descarga aquí: http://processing.org/download/
  • LEDs diversos (para este tutorial, 3, uno Rojo, uno Verde y uno Amarillo)
  • Resistencias respectivas
  • Hosting Web con soporte PHP

Y con esto, algo de tiempo y ganas, ya podemos empezar a realizar el montaje.
Para el código que os adjuntaré, se debe conectar el LED Rojo al pin 13 (ergo no necesitará resistencia añadida), el Amarillo al 9, y el Verde al 5, con las resistencias necesarias.

CODIGO ARDUINO
Code:
const int ledR = 13; //PIN para el LED Rojo
const int ledV = 5; //PIN para el LED Verde
const int ledA = 9; //PIN para el LED Amarillo
int incomingByte;      // Variable para leer los datos del puerto Serial
 
void setup() {
  // Inicializamos comunicacion serial
  Serial.begin(9600);
  // Declaramos los PINs como salida
  pinMode(ledR, OUTPUT);
  pinMode(ledV, OUTPUT);
  pinMode(ledA, OUTPUT);  
}
 
void loop() {
  // Ver si hay datos en Serial
  if (Serial.available() > 0) {
    // Leemos los datos entrantes por el puerto Serial
    incomingByte = Serial.read();
    // Si se recibe 'H', encender el LED Rojo
    if (incomingByte == 'H') {
      digitalWrite(ledR, HIGH);
    }
    // Si se recibe 'L', apagar el LED Rojo
    if (incomingByte == 'L') {
      digitalWrite(ledR, LOW);
    }
    
    //Y así sucesivamente con los LED Verde y Amarillo
    
        if (incomingByte == 'V') {
      digitalWrite(ledV, HIGH);
    }
    
    
        if (incomingByte == 'F') {
      digitalWrite(ledV, LOW);
    }
    
    
        if (incomingByte == 'A') {
      digitalWrite(ledA, HIGH);
    }
    
    
        if (incomingByte == 'Q') {
      digitalWrite(ledA, LOW);
    }
    
    //Tambien podemos poner que si se recibe 'T' se enciendan todos
    
        if (incomingByte == 'T') {
      digitalWrite(ledR, HIGH);
      digitalWrite(ledA, HIGH);
      digitalWrite(ledV, HIGH);      
    }
    
    //Y con 'Y' se apaguen todos    
        if (incomingByte == 'Y') {
      digitalWrite(ledR, LOW);
      digitalWrite(ledA, LOW);
      digitalWrite(ledV, LOW);      
    }    
    
  }
}

Antes de pasar al Código en Processing, quiero destacar que necesitaremos un Hosting con soporte total de PHP.
Tras probar varios gratuitos que no me funcionaron, uno gratuito que si fue en Hostinger.es (no estoy pretendiendo hacer ningun tipo de publicidad de esta pagina, solo indico que a mi me funcionó como soporte PHP, ya que otras que probé, no). Solo hay que registrarse, y tras crear la cuenta y el dominio Web, en un par de horas ya me funcionaba el dominio (te avisan de que puede tardar hasta 12h en activarse el dominio, asi que no desespereis)

Del código fuente disponible para descarga al final del hilo, deberéis descomprimir el contenido del zip RemoteLedWeb en la carpeta public_html de vuestro Hosting.

Probé a hacerlo con un único archivo .txt y/o un único .php, pero no fui capaz, obtenía demasiados errores, así que lo separé en 3 archivos


Y ahora, vamos a por el Código de Processing

Code:
/*
 
A simple Processing script for enabling or disabling the LED on an Arduino using a web interface and serial communication.
Author: Sindre Lindstad
Created: 19th of January 2011
 
http://projects.sindrelindstad.com

Modified by Arduleo
 
*/
 
 import processing.serial.*;
 Serial port;
 
 void setup()  {
 
   /* This part must be altered to fit your local settings. The number in brackets after "Serial.list()" is where you declare what COM port your Arduino is connected to.
      If you get error messages, try a different number starting from 0 (e.g. 0, 1, 2, 3...) . */
      println(Serial.list());
    port = new Serial(this, Serial.list()[0], 9600);  // Open the port that the Arduino board is connected to, at 9600 baud
 
}
 void draw() {
 
  String onR[] = loadStrings ("http://TUDOMINIO.com/LEDRstate.txt"); // Cambialo por la ubicacion a tu archivo LEDRstate.txt
  String onV[] = loadStrings ("http://TUDOMINIO.com/LEDVstate.txt"); // Cambialo por la ubicacion a tu archivo LEDVstate.txt
  String onA[] = loadStrings ("http://TUDOMINIO.com/LEDAstate.txt"); // Cambialo por la ubicacion a tu archivo LEDAstate.txt
 
  
  //LED ROJO
  if (onR[0].equals("1")) {
    println(" - LED ROJO ENCENDIDO");
    port.write('H'); // Send "H" over serial to set LED to HIGH
 
  } else if (onR[0].equals("0")) {
    println(" - LED ROJO APAGADO");
    port.write('L');  // Send "L" over serial to set LED to LOW
 }
 
 delay(10);
 
 //LED VERDE
 
  //print(onoroffV[0]);  // Prints whatever is in the file ("1" or "0")
 
   if (onV[0].equals("1")) {
    println(" - LED VERDE ENCENDIDO");
    port.write('V'); // Send "H" over serial to set LED to HIGH
 
  } else if (onV[0].equals("0")) {
 
    println(" - LED VERDE APAGADO");
    port.write('F');  // Send "L" over serial to set LED to LOW
 }
 
 delay(10);
 
 
 //LED AMARILLO
 
  //print(onoroffA[0]);  // Prints whatever is in the file ("1" or "0")
 
   if (onA[0].equals("1")) {
    println(" - LED AMARILLO ENCENDIDO");
    port.write('A'); // Send "H" over serial to set LED to HIGH
 
  } else if (onA[0].equals("0")) {
 
    println(" - LED AMARILLO APAGADO");
    port.write('Q');  // Send "L" over serial to set LED to LOW
 }
 
 
 println("**************************");
 
 
onR[0] = "0";  //Si os da error, podeis quitar esta linea
onV[0] = "0";  //Si os da error, podeis quitar esta linea
onA[0] = "0";  //Si os da error, podeis quitar esta linea
 delay(1000);
 }

Y al ejecutar el codigo de Processing, si todo ha salido bien, al acceder a vuestro dominio, podreis ver la pagina arcaica en la que poder modificar el estado de los leds, y al pulsar sobre ellos, ver como va cambiando el estado de estos en la placa.

Así podréis modificar su estado estando en otro ordenador (el conectado a la placa deberá estar encendido)

Realmente yo lo único que he hecho es adaptar el uso para manejar 3 o más LEDs (siguiendo la misma estructura podréis fácilmente añadir/quitar LEDs), ya que el proyecto original no es mio.

Espero que este tutorial os sirva para aprender a utilizar cambios en PHP junto a Processing para controlar vuestros Arduinos (En cuanto me llegue un modulo LCD estoy planteandome aplicar este principio para poder enviar mensajes personalizados a la pantalla remotamente) y sobretodo, que os permita hacer pruebas basadas en RED sin tener Shields Ethernet/WiFi

CODIGO FUENTE COMPLETO:
http://arduleo90.16mb.com/DESCARGAS_PUBLICAS/LEDRemotoCompleto.zip
4  International / Software / Re: Problema con bucles entre Python y Arduino on: October 09, 2012, 10:27:20 am
Tras varios dias sin recibir respuesta (ojo, no lo digo quejándome! Al contrario, eso me ha impulsado a investigar todavía más árduamente), he descubierto el fallo...

El fallo residía en la llamada a Serial.flush(), el cual dejó de funcionar a partir de 1.0, y eso corrompía las siguientes lecturas de Serial recibidas por el programa en Python...

Dejo los códigos de nuevo, pero actualizados, por si alguien quiere repetir el proyecto!
(yo de momento lo usaré como base para el siguiente proyecto que quiero, un avisador remoto)


Codigo Arduino:
Code:
//Avisador GMail
//Original por Zunayed Ali
//Retocado por arduleo

int outPin = 13; //Ponemos el pin 13 como salida
int mail = LOW; //Creamos una variable int llamada "mail" con el valor inicial LOW, ya que no queremos falsos positivos
int val;


void setup()
{
  pinMode(outPin, OUTPUT); //Seleccionamos el pin13 (outPin) como salida
  Serial.begin(9600); //Iniciamos la comunicacion serial
}
 
void loop()
{
  if (Serial.available()) //En caso de que exista comunicacion Serial
  {
    val = Serial.read(); //La variable val tomará el valor de la lectura recibida por Serial
    Serial.println(val); //Imprimirá en consola (enviará al Arduino) el valor de val
    if (val == 'M') mail = HIGH; //Si el valor recibido (val) es 'M', la variable mail sera HIGH
    else if (val == 'N') mail = LOW; //Si el valor recibido (val) es 'N', la variable mail sera LOW
  }
 
  digitalWrite(outPin, mail); //Escribimos la informacion de mail (HIGH en caso de que haya, LOW en caso de que no) en el pin 13

  
}


Y aqui el codigo de Python (necesarias las librerias pySerial y feedparser)

Code:
#Codigo original creado por Zunayed Ali
#deyanuz.com
#Gmail notifier

 
#feedparser module download it from http://www.feedparser.org/
# pySerial module also needed
import serial, feedparser, time
 
#Seleccionamos nuestro puerto Serial (CAMBIAR VALOR DE SERIALPORT AL QUE CORRESPONDA)
SERIALPORT = 0
 
#Abrimos la comunicacion serial
ser = serial.Serial(SERIALPORT, 9600)
 
loop = 1
prevCheck = 0
 
while loop > 0:
#Seleccionamos el xml que tomaremos como base (REEMPLAZAR LAS MAYUSCULAS POR LOS DATOS CORRESPONDIENTES)
d = feedparser.parse('https://TUDIRECCIONDEGMAIL:TUPASSDEGMAIL@mail.google.com/mail/feed/atom')
 
#Obtenemos el titulo del xml (Nuestra bandeja de entrada de GMail)
print d.feed.title
 
newMail = len(d['entries']) #Creamos la variable newMail
 
#Asignamos un delay, para que compruebe cada X segundos la bandeja de entrada
time.sleep(10)
 
        #Si hay nuevos correos
if newMail > 0:
     #Enviamos por comunicacion serial el valor 'M' e imprimimos en la consola de Python "Tienes correo nuevo"
       ser.write('M')
       print "Tienes correo nuevo"
        #Si no hay correos nuevos
else:
                        #Mandamos el valor 'N' por comunicacion serial e imprimimos en la consola de Python "No tienes correo nuevo"
ser.write('N')
print "No tienes correo nuevo"


Adjunto un zip con ambos archivos y las librerias de python necesarias:
http://arduleo90.site50.net/ARCHIVOS%20PARA%20DESCARGA%20PUBLICA/GMail_notifier.zip

Espero que a alguien le pueda resultar útil!
5  International / Software / [SOLUCIONADO] Problema con bucles entre Python y Arduino on: October 06, 2012, 06:36:16 am
Hola a todos!

Estoy iniciandome en el mundo de Arduino todavía, así que estoy empezando por "recrear", modificar y adaptar a mi gusto proyectos ya hechos por otra gente y liberados, para intentar comprenderlos y aprender todo lo que pueda.

Hace poco encontré un par de proyectos que me llamaron la atención, así que decidí llevarlos a cabo. O intentarlo, al menos.

Hoy os voy a hablar de uno de ellos. GMAIL Notifier

Primero, se prepara la placa Arduino con el siguiente codigo:

Code:
int outPin = 13;
int mail = LOW;
int val;
 

void setup()
{
  pinMode(outPin, OUTPUT);
  Serial.begin(9600);
  Serial.flush();
}
 
void loop()
{
  if (Serial.available())
  {
    val = Serial.read();
    Serial.println(val);
    if (val == 'M') mail = HIGH;
    else if (val == 'N') mail = LOW;
  }
 
  digitalWrite(outPin, mail);
}

Y este es el codigo del programa en Python

Code:
import serial, feedparser, time
 
# store your serial port address
SERIALPORT = 0
 
#open serial port
ser = serial.Serial(SERIALPORT, 9600)
 
loop = 1
prevCheck = 0
 
while loop > 0:
#set variable to hold parsed xml data
d = feedparser.parse('https://nombredegmail:passdegmail@mail.google.com/mail/feed/atom')
 
#statement just to get title
print d.feed.title
 
newMail = len(d['entries'])
 
#delay x seconds
time.sleep(10)
 
if newMail > 0:
     #write to the serial port
       ser.write('M')
       print " Tienes correo por leer"
else: ser.write('N')

(Necesitais descargar feedparser y la libreria de comunicacion serial para python)

Bueno, hasta aqui bien, y cambiando los campos de "nombredegmail:passdegmail" por los que corresponden, consigo la comunicación y la conexion.


Os explico el codigo y lo que hace (y despues, lo que no hace)

Por un lado, tenemos la placa Arduino preparada para que, en caso de recibir por comunicacion serial el valor M, la variable "mail" pasa a ser HIGH (y en caso de recibir N, "mail" pasa a ser LOW), y posteriormente a esta comprobacion, se hace un digitalWrite al pin del LED con el valor la variable "mail" (es decir, si hay correo seria HIGH, por lo que se encendera el led; y si no hay correo, sera LOW, con lo que no se encenderá).

Por el otro lado, tenemos el codigo en Python, que lo que hace es, primero, cargar los modulos necesarios (estan correctamente instalados) y almacenar el puerto (en mi caso, 0).
Después, inicia el bucle y conecta con la el feed xml de mi cuenta de GMail, e imprime el titulo (Es "GMail Inbox for "direcciondegmail" "), y en caso de que haya correo sin leer, envia mediante el puerto serial el valor M, y muestra en la consola del script "Tienes correo sin leer" (y en caso de que no, no muestra nada y envia por el puerto serial el valor N). Y repite la comprobacion cada 10 segundos.

El codigo funciona correctamente, pero tiene un fallo que me gustaria que, si alguien sabe y puede (estoy convencido de que si), me ayudara a solucionar.

El problema es que parece que Arduino se "queda" solo con el primer valor que le llega. Me explico

Si tengo un correo sin leer y conecto el Arduino e inicio el script, el LED se enciende, hasta ahí correcto. Pero si lo leo, en la consola donde estoy ejecutando el script en Python, me muestra correctamente que no hay correo nuevo (es decir, al cabo de 10 segundos simplemente me vuelve a aparecer el titulo de "GMail Inbox for "direcciondegmail", sin aparecerme el "Tienes correo sin leer"), por tanto, debe estar enviando tambien el valor N por el puerto serial... Pero no se desactiva el LED.
Y a la inversa tampoco, es decir, si inicio el script en Python sin tener correo sin leer, me muestra correctamente el titulo cada 10 segundos, y al llegarme un correo, me muestra el mensaje "Tienes correo sin leer", pero el LED no se enciende...

Ademas, mientras se ejecuta el script, no puedo acceder al Monitor Serial de Arduino para ver que valor esta recibiendo, ya que ya esta en uso el puero por otro programa


Por eso pido ayuda, por si alguien sabe por que puede ser que el Arduino se "quede" solo con el primer valor, y no varíe...

Gracias por adelantado!
6  International / Hardware / Re: Problema de la placa o humano? on: October 04, 2012, 10:35:34 am
Yo creo que lo suyo es

GND----RESIST---P --------PIN 2
3.3v--------------P

Asi me ha funcionado perfectamente!
Muchisimas gracias, de verdad!

ó (usando pullup):

                       P --------PIN 2
GND--------------P


Ahora investigare y probare un poco mas del tema de las pullups, a ver si me aclaro y consigo hacerlo tambien smiley

Gracias, en serio, no te imaginas como se agradece esto siendo novato!
7  International / Hardware / Re: Problema de la placa o humano? on: October 04, 2012, 02:43:29 am
Hay un axioma en electronica digital que a menudo se olvida. El axioma reza asi:
Nunca, nunca, nunca dejes una entrada digital al aire.
Si lo haces,las lecturas son erraticas, porque el voltaje que tienes en la entrada puede ser cualquier cosa. Debes usar un pulsador que conecte la entrada a masa en una posicion y a 3.3v en la otra.

Vale, entonces segun comprendo, deberia quedarme

3.3v-------------P ------------PIN 2
GND-------------P

Asi nunca estaria el PIN 2 al aire!
Creo que lo he entendido, gracias!  smiley


Hombre, Profenas, eso tampoco es necesario ... Si eso fuese así, no tendría sentido usar resistencias de pull-up/pull-down ...

La verdad es que me da susto conectar directamente las lineas de alimentación a un micro, aunque sea a entradas. A la más mínima equivocación, zas, fries algo.

Por cierto, arduleo, puedes usar la resistencia de 330 ohm si quieres en ves de la de 10K ... al menos para probar. El mayor problema es que el circuito te va a consumir más :-)
Y para probar el diagrama que conecta a masa no necesitas ni resistencia (es tal y como dices).
SObre los pull-up, además de buscar algo en internet (bendito google), echale un vistazo a:
http://arduino.cc/en/Reference/DigitalWrite

Ahora buscaré más informacion, pero segun comprendo seria

3.3v--------------P --------PIN 2
GND----RESIST---P

Para que la descarga se hiciera aun mas rapida, verdad?
Por el consumo de momento no me importa, solo estoy probando a hacer y comprender los tutoriales basicos y el por que de su funcionamiento, para empezar bien por el principio!

En cuanto a resistencias, siempre vienen bien, son baratas, y te gastas más en gasolina si tienes que estar yendo a las tiendas de electrónica cada vez que necesites un nuevo valor.

Coge un poco de todo: 1K, 10K, 100K, 1M ... yo en casa tengo que tener unas 1000 resistencias de más de 60 valores distintos ... y sigo comprando a veces :-) (y tampoco soy rico, una resistencia puede llegar a valer 1,2 céntimos)

En lo de la gasolina tienes razon...

Pues ya me armare con unas cuantas resistencias, mas que nada para tenerlas!

Muchas gracias por la ayuda, de verdad!
Cuando tenga un momento lo pruebo, y ya os comentare diciendo que tal me ha ido smiley
8  International / Hardware / Re: Problema de la placa o humano? on: October 03, 2012, 03:52:21 pm
Ese comportamiento es el normal y esperado.
Al conectar con el interruptor el pin a 3,3V, este coge esa tensión. Cuando lo cortas, la capacidad parásita del pin de entrada mantiene esa tensión mientras se va descargando poco a poco.

Desconocía por completo esa propiedad. Gracias por decírmelo, estaba asustado ya!
(Note-to-self: vaya novato....)

Pon una resistencia de 10K entre el pin y masa y verás como la descarga se hace mucho más rápida.

Tendré que esperar a mañana o pasado a poder ir a la tienda de electronica, ya que por desgracia todavia estoy empezando y solo tengo 6 resistencias de 330...
Tendre que hacerme con unas cuantas variadas!

Cuales me recomendais asi "estandar"?

Luego, quita la resistencia, conecta el otro pin del switch  a GND, no a 3,3, y activa la resistencia de pull-up interna del pin. El comportamiento es el inverso, pero te ahorras una resistencia :-)

Ahi me he perdido...

Es decir, tendria que quedarme

GND-----------------P
                          P----------------PIN 2

Asi?

Lo de activar la resistencia pullUp tampoco se bien bien como hacerlo...

Gracias por la ayuda, de verdad, se agradece MUCHISIMO cuando se esta empezando!
9  International / Hardware / Problema de la placa o humano? on: October 03, 2012, 11:20:09 am
Hola de nuevo a todos!

Como buen novato, he estado probando los ejemplos de codigo en mi placa Arduino (Arduino Leonardo), y al llegar al de "Digital Read Serial", me encuentro con mi primer "problema"...

Os explico la situacion:

- Codigo de ejemplo

Code:
/*
  DigitalReadSerial
 Reads a digital input on pin 2, prints the result to the serial monitor
 
 This example code is in the public domain.
 */

// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the pushbutton's pin an input:
  pinMode(pushButton, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  int buttonState = digitalRead(pushButton);
  // print out the state of the button:
  Serial.println(buttonState);
  delay(1);        // delay in between reads for stability
}


Es decir, el de serie en los ejemplos

- Pulsador con 4 patas

Y la conexion que hago es la siguiente:

3.3V ----------------- P
                             P --------------------- PIN Digital 2

Siendo P el pulsador

Por tanto, en principio al cargar el codigo en la placa y abrir el monitor Serial, deberia ver 0 permanentemente, y así es.
Y al pulsar el pulsador, la corriente pasaria hasta llegar al PIN Digital 2, y entonces aparecerían 1. Y también así es.

El problema viene cuando suelto el pulsador, momento en el cual debería empezar a ver 0, pero eso no sucede, sino que sigo viendo 1 hasta que pasan unos 5 o 6 segundos variando entre 0 y 1, y finalmente se estabiliza en 0. Eso sucede todas las veces que lo he probado (puedo hacer un video demostrativo si queréis).

No se si será problema de la placa, o mio en el montaje (que no creo.... Adjunto foto por si acaso)

http://subefotos.com/ver/?4dd7ef7c3d7d49851d077a2cedd7568co.jpg#codigos
http://subefotos.com/ver/?829a45fc304b2abe7fce744882c4deaco.jpg#codigos

Alguna idea o sugerencia?

Gracias!
10  International / Hardware / Re: Me presento y primera duda sobre compatibilidad on: October 01, 2012, 10:49:20 am
Primero de todo, muchisimas gracias a ambos por contestar!
Creo que lo he entendido bien

Ahora, como "primer proyecto", me he propuesto lo siguiente:

HW:
- Sensor de temperatura (Estoy entre ESTE o ESTE)
- Pantalla LCD (estoy pensando en esta: http://www.bricogeek.com/shop/178-pantalla-lcd-20x4-caracteres-negro-verde.html)
- Pulsador

FUNCIONAMIENTO:
- Ambas cosas iran conectadas al Arduino (he estado pensando en Xbee, pero eso requiere comprar otro Arduino, y entre los dos Xbee, el Arduino y todo, sale caro...), y el Arduino a un PC
- Se hará un datalogger que vaya registrando las temperaturas
- La pantalla LCD mostrará la hora actual y la temperatura, y al accionar el pulsador, se accederá a la temperatura máxima y mínima

Lo veis factible como primer proyecto?
O quizá demasiado ambicioso?

Ah, y me quedo mas tranquilo viendo que los shields pueden hacerse compatibles

Muchisimas gracias!
11  International / Hardware / Me presento y primera duda sobre compatibilidad on: September 30, 2012, 10:03:32 am
Hola a todos!

Soy arduleo, y como supongo que podréis deducir por mi nick, tengo una Arduino Leonardo recien adquirida.

La tecnología es uno de mis grandes hobbys desde siempre (aunque mi ocupación y mi futuro profesional (si es que eso existe) no tengan nada que ver), he probado y aprendido a programar en varios lenguajes de programacion (Java, Javascript, C, C++, LUA e inicios de Python) y hacía tiempo que le siguía la pista al proyecto Arduino.
La semana pasada tuve que ir a una tienda de electrónica de mi ciudad (más bien pequeña), y me fijé en que tenian una pegatina con el logo de Arduino... Así que les pregunté por cuanto me saldria un Kit basico de iniciacion, y os detallo lo que compré:

  • Arduino Leonardo
  • Protoboard
  • 6 LEDs
  • 6 resistencias correspondientes
  • 1m de cable (mitad rojo y mitad negro)

El dependiente me dijo que teniendo algo de idea, con eso podia empezar a "cacharrear", y eso hice.
Tras una semana, he probado a hacerme verdaderas secuencias lumínicas, con fades, blinks... Vamos, trasteando y haciendo el tonto; exprimiendo lo que 6 leds y 6 resistencias pueden dar de si.

Y evidentemente, me encantó.

Hasta ahora no había más que programado solo Software, pero ver la "representación real" en el mundo real, me hizo comprender lo grande que es...

Por supuesto, quiero seguir adelante, y mi "proyecto" en mente por ahora, pasa por algun sensor y una pantalla LCD.
Ahi viene mi primera duda en este mundo

He estado consultando en este foro, leyendo... Y la Arduino Leonardo tiene varios PINs cambiados respecto a la Arduino UNO, con lo que los "shields" (que segun entiendo, son montajes preparados para acoplarse directamente a la Arduino, sin necesidad de soldar) no valen, y por lo tanto deberia comprarme un kit y montarmelo yo mismo soldando, si no comprendo mal...

No soy ni mucho menos un gran entendido de electronica, se los conceptos mas basicos (resistencias, ley de Ohm, montajes en serie...), y por eso acudo a vosotros para intentar responder a las siguientes preguntas:

1.- Que pantalla LCD me recomendais para la Arduino Leonardo? (a poder ser, sin que haya que soldar, ya que no dispongo de soldador)
2.- Lo mismo con un puerto Ethernet, para poderlo conectar a la red

Muchisimas gracias por acoger entre vosotros a un nuevo novato que empieza con muchas ganas e ilusión, y está fascinado después de ver lo que la comunidad del OS puede hacer, y justo empieza a descubrir este mundo del OH

Saludos!
Pages: [1]