Mi Arduino UNO en openSuse 11.2
jueves, 11 de agosto de 2011Uno de los principales encantos que tiene la placa Arduino es que resulta ser ese chisme capaz de convertir en tangible y físico algo tan abstracto e inmaterial como la programación informática. De repente un bucle for/next cobra vida y deja de ser una sucesión de cálculos en el limbo electrónico de la cpu para convertirse en un cacharro cargado de cables capaz de volcar el café del escritorio. Pero de volcarlo de verdad, no virtualmente.
Arduino es una proyecto nacido en Italia y desarrollado sobre el concepto de hardware y software libre. Es decir sus especificaciones técnicas y sus herramientas de desarrollo son abiertas y públicas (y gratuitas mayormente), lo que ha favorecido que crezca a su alrededor una comunidad enorme que constantemente incorpora mejoras y nuevas funcionalidades. Hoy por hoy las posibilidades de expansión son ilimitadas. Existen accesorios, ampliaciones y gadgets para conexión inalámbrica (radio, infrarrojos, bluetooth), cámaras de fotografía, dispositivos GPS, motores de todo tipo, sensores de luz, gas, agua, corriente ó presión atmosférica, mandos y joystick, etcétera, etcétera , pues hacer lo inimaginable, todo tipo de robots autómatas, teledirigidos, mandos a distancias, invernaderos informatizados, pinta-murales callejeros…
Desde que hace años conocí de su existencia le tenía ganas. Eso de traer al mundo real los desvaríos informáticos era/es muy tentador. El problema es que soy un redomado paleto electrónico, para mí una resistencia seguirá siendo la que montaron los franceses en la Bastilla y un transistor pues lo que usaba hace años para escuchar Radio3 en el coche. Por eso, si yo he sido capaz de montar un LCD y que muestre la temperatura de un sensor es que resulta fácil de narices (al menos en lo correspondiente a hardware).
Esta semana pasada decidí pagarme el capricho y encargué el Arduino Lab Kit que venden en Cooking Hacks-Libelium por poco menos de 120 euros. El envío ha sido rapidísimo (Zaragoza-Cartagena). Vaya, y no exagero, me llegó antes el paquete que el tracking del paquete para seguirle por internet.
Llevo apenas una semana trasteando con el cacharro, así es que todo esta por mejorar, pero como siempre, seguro que habrá alguno que se sirva de algo. Asi es que a continuación algunas especificaciones técnicas para configuración de Arduino ( en GNU/Linux, openSuse 11.2 )
Instalación de software Arduino en GNU/Linux
Inicialmente la instalación del software (Processing adaptado) se me atrancó un poco porqué usé la versión 0019 (que no reconoce la nueva placa Arduino UNO). Además la v.0022 de los repositorios de software.opensuse.org no detectaba la conexión de la placa (/dev/ttyACMxx, puerto USB) en cambio la versión alpha Arduino v.0022 del sitio la reconocía sin problemas.
Cada vez que se conecta el dispositivo se vá creando un device nuevo (/dev/ttyACM0, /dev/ttyACM1,/dev/ttyACM2, etc…) para facilitar el trabajo he creado una regla UDEV que enlaza automáticamente el nuevo dispositivo en /dev/Arduino.
Simplemente en /etc/udev/rules.d/99-mis-reglas.rules añade algo como (el número de idVendor lo obtienes haciendo dmesg después de conectar la placa)#arduino
SYSFS{idVendor}=="2341", SYMLINK+="Arduino"
A continuación los programas que lean/envíen datos a la placa puede usar este nuevo device, por ejemplo haciendo algo como: stty -F /dev/Arduino 9600 cs8 cread clocal
O con python haciendo simplemente
tail -f /dev/Arduino python
>>import serial
>>s=serial.Serial("/dev/Arduino", 9600)
>>s.write("hola machote")
Programa sensores2lcd
No tengo el esquema de la instalación que aparece en el vídeo, pero no tiene mucha dificultad, básicamente es la conexión que podéis ver aquí arduino.cc/en/Tutorial/LiquidCrystal solo que puesto que no tengo potenciómetro la tercera conexión del LCD va directa a masa (GND).
A continuación he conectado los sensores de luz (LDR) y de temperatura (MCP) y el led verde tal y como se indican en otros tantos tutoriales que tenéis por la web.
Para el sensor de luz no encontré especificaciones de uso asi es que lo conecté directamente: una pata a masa GND y otra al pin analógico 0 y observé que las lecturas se movían entre 1024 y 0, pues listo: un simple cálculo de porcentajes y listo.
Para el sensor de temperaturas hizo falta más pruebas ya que en la web hay multitud de cálculos diferentes para convertir los miliVoltios de la lectura en grados Celsius. Al final me quedé con analogRead(pinTemp) * 4.8) / 1024.0
En la línea original se multiplica por 5, los voltios que recibe, pero esto me daba temperaturas 3-4 grados superiores a la real. En 4,8 dá lecturas similares a otros termómetros que tengo por aquí.
El codigo completo sería este: #include <LiquidCrystal.h>
int pinLuz=0; // pin analógico del sensor de luz
int pinTemp=1; // pin analógico del sensor de temperatura
int pinLed=9; // pin analógico del led verde
int numChequeos=15; // cuantos chequeos para obtener la media
int brilloLed=0;
float dataLuz;
float dataTemp;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
lcd.clear();
lcd.print("Listo...");
pinMode(pinLed, OUTPUT); }
void loop() {
dataLuz=0;
dataTemp=0;
for(int n=0; n
dataTemp=dataTemp + ((analogRead(pinTemp) * 4.8) / 1024.0);
delay(50); }
float mediaLuz = 100 - (( (dataLuz/numChequeos) / 1024 ) * 100);
float mediaTemp = ((dataTemp/numChequeos) - 0.5)/0.01;
brilloLed = 255 - (2.55 * mediaLuz);
analogWrite(pinLed, brilloLed);
Serial.print(mediaTemp);
Serial.print(" : ");
Serial.println(mediaLuz);
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.setCursor(7,0);
lcd.print(mediaTemp);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print("Luz: ");
lcd.setCursor(7,1);
lcd.print(mediaLuz);
lcd.print(" % ");
delay(50);
}
Escuchar serial
Este programa simplemente atiende a los que se escriba en /dev/Arduino por otros programas y lo vuelca en el LCD haciendo los correspondientes saltos de línea y pausas.#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
String cadena = "";
int contador = 0;
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
delay(100);
lcd.print("Escuchando...");
}
void loop() {
lcd.setCursor(0,0);
if ( Serial.available() ) {
delay(100);
lcd.clear();
contador=0;
while (Serial.available() > 0) {
int buffer=(char)(Serial.read());
delay(10);
lcd.write(buffer);
contador++;
if ( contador == 16 ) lcd.setCursor(0,1);
if ( contador == 32 ) { lcd.setCursor(0,0); lcd.clear(); contador=0;}
}
}
}
Problemas
El mayor problema con que me he encontrado es que el Arduino Lab Kit llega con todos los componentes perfectamente embolsados y nulamente etiquetados. CERO documentación. Así es que hizo falta echar mano de la lupa para leer los dígitos impresos en componentes minúsculos para tratar de averiguar que es esto. No es que la documentación que mandan sea mala u obsoleta es que es inexistente, nada absolutamente ni en la factura que aparece un triste «Arduino Lab Kit» y para un paleto electrónico como yo… vaya, a día de hoy todavía tengo componentes que no sé ni lo que son, ya no te cuento sobre el «Como se conectan«….
elnoziya
#1/ 12 de August/2011 a 11:04:42
Otros comentarios de «elnoziya»
Felicidades! Yo tengo un poquito de experiencia en electrónica, quizás te podría ayudar a identificar los componentes que te faltan si me mandas fotos o algo así.
saludos!
Trebol-a
#2/ 12 de August/2011 a 14:19:08
Otros comentarios de «Trebol-a»
Gracias, te tomo la palabra,
a ver me sabeis decir que es esto:
Juan
#3/ 13 de August/2011 a 09:13:01
Otros comentarios de «Juan»
Se parece a esto:
Trebol-a
#4/ 13 de August/2011 a 10:33:32
Otros comentarios de «Trebol-a»
Sí, si no es lo mismo le falta bien poco. Un transistor, bien, creí que los transistores era lo otro, las cucarachas.
Gracias Juan.
TempWin
#5/ 13 de August/2011 a 13:44:31
Otros comentarios de «TempWin»
Sí, yo también diría que los de la imagen se trata de transistores (PNP y/o NPN).
Por cierto, una alegría ver Arduino en este blog. Llevo mucho tiempo con ganas de empezar con este cacharrito y me vendrán de perlas tus anotaciones para otro neófito en la materia ;-)
Trebol-a
#6/ 14 de August/2011 a 13:58:46
Otros comentarios de «Trebol-a»
Hola TempWin,
sí, seguro que ves por aquí más de un apunte por aquí sobre el tema Arduino y sobre como vincularlo con las cámaras de vigilancia con Motion, fotografia y demas.... por falta de elucubraciones no será.... :)
elnoziya
#7/ 16 de August/2011 a 11:03:30
Otros comentarios de «elnoziya»
Ups, he caido aquí de casualidad, no estaba suscrito. tiene pinta de transistor bipolar, los FET y demás suelen ser más pequeños. El agujerito es para atornillarlo a algo que disipe, ya que según las intensidades se suelen calentar bastante. No es muy habitual que se use esto en eun diseño digital, pero nunca se sabe. Se podría usar para hacer un regulador, o dar más intensidad a una salida lógica.
Me parece un poco cutre que venga sin identificación alguna, ni siquiera en la carcasa, en fin, le tenían que poner alguna dificultad! jeje.
elnoziya
#8/ 16 de August/2011 a 11:05:21
Otros comentarios de «elnoziya»
También hay cucarachas que son transistores, sin embargo este formato es el antiguo y es para temas de "más potencia".
Conectorización típica: http://www.kpsec.freeuk.com/images/tranlead.gif
ffuentes
#9/ 24 de August/2011 a 05:35:59
Otros comentarios de «ffuentes»
Me he antojado de comprar la placa UNO, pero como tú, yo con suerte sé qué diablos es una resistencia. Saludos.
Trebol-a
#10/ 24 de August/2011 a 10:50:58
Otros comentarios de «Trebol-a»
Nada que no puedes solucionar con una buena lupa. Eso sí, que sea potente, porque el tipo que ideo el código de identificación de lineas rojas, marrones, naranjas, rosas y lilas sobre una resistencia de 2 mm, debía tener una vista que riete tu de los linces...
21 de November, 2024 @ 14:27