LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: poliveira1978 em 05 de Julho de 2012, 00:16
-
Boa noite.
Venho mais uma vez pedir ajuda.
Tenho o seguinte sketch de exemplo no arduino (2009)
void setup()
{
Serial.begin(9600);
}
void loop()
{
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.println(voltage);
}
quando executo este script Python
import time
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)
ser.setDTR(False)
arduino=ser.read()
while 1:
time.sleep(5)
ser.flush()
print "LDR:",ord(arduino)
o valor é constante, independentemente da quantidade de luz que incide no LDR, se fechar o idle e abrir o serial monitor do arduino o valor varia consoante a luz incidente.
O circuito é o mais básico para ler um LDR:
1 perna da resistência no ground, 1perna do ldr no vcc e a leitura é feita entre o ldr e a resistência através do pino analog 0.
Agradeço qualquer dica.
-
Nunca usei python mas diria que ali dentro do while deverias fazer um read, do que conheço da palavra flush, esta apenas te esvazia a memória, mas sem fazeres o read não sei se garantes que o valor vá parar à memória.
-
Alterei o script python para
import time
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)
ser.setDTR(False)
while 1:
time.sleep(1.5)
print "%.2f" % (ord(ser.read())*5.0/1023.0)
e o sketch do arduino para
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print(analogRead(0));
}
Quando executo o script python no Idle (em ubuntu 12.04 64 bits) vejo valores semelhantes aos que obtenho no serial monitor do arduino, quando ligo o arduino na USB do Raspberry PI (Model B) e executo o script o único valor que aparece é 0. Alguém tem ideia do que poderá estar a acontecer? No raspberry até já tentei correr o script como root.
-
Falta de drivers?
Faz lsusb, depois liga o arduino e volta a fazer o mesmo, e depois de ligares o arduino corre tambem o dmesg para ver se ele está a ser correctamente detectado, talvez seja falta de corrente para alimentar o Arduino..
-
amanhã vou tentar com php... aqui no portátil já fiz uns forms simples em php e a coisa funciona... seguem em anexo os scripts que fiz mais uma classe para aceder a portas série em PHP
O sketch no arduino é o seguinte:
int pinLed = 13;
int pinldr=0;
void setup()
{
pinMode(pinLed, OUTPUT);
pinMode(pinldr,INPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{
if(Serial.read()=='1')
{
digitalWrite(pinLed,HIGH);
Serial.print(analogRead(pinldr));
}
else
{
digitalWrite(pinLed,LOW);
Serial.print(analogRead(pinldr));
}
}
}