arduino day 2017 - python + arduino
Post on 11-Apr-2017
792 Views
Preview:
TRANSCRIPT
Python e Arduino
Python e Arduino: Analisando dados em tempo real.
Dr. Eduardo S. Pereira.@duducosmos/ pereira.somoza@gmail.com
https://github.com/duducosmos
01/04/2017
Dr. E. S. Pereira 1
Python e Arduino
Sumario
1 Introducao
2 Medida de Temperatura com LM35
3 Comunicacao Serial - python-serial
4 Gerador de Graficos em tempo Real
5 Suavizacao de Dados Coletados
6 Resultados
Dr. E. S. Pereira 2
Python e Arduino
Introducao
Introducao
Dr. E. S. Pereira 3
Python e Arduino
Introducao
A linguagem Python
A linguagem Python
Python e uma linguagem interpretada desenvolvida por GuidoVan Rossum em 1991;
E multiparadigma, porem tudo em python e objeto;
E livre, aberta e com baterias incluıdas;
Versoes 2.7.X e 3.X; (Existem projetos que nao foram migrados -E que provavelmente nao serao em python 2.X);
Dr. E. S. Pereira 4
Python e Arduino
Introducao
A linguagem Python
A linguagem Python
Python e uma linguagem interpretada desenvolvida por GuidoVan Rossum em 1991;
E multiparadigma, porem tudo em python e objeto;
E livre, aberta e com baterias incluıdas;
Versoes 2.7.X e 3.X; (Existem projetos que nao foram migrados -E que provavelmente nao serao em python 2.X);
Dr. E. S. Pereira 5
Python e Arduino
Introducao
A linguagem Python
A linguagem Python
Python e uma linguagem interpretada desenvolvida por GuidoVan Rossum em 1991;
E multiparadigma, porem tudo em python e objeto;
E livre, aberta e com baterias incluıdas;
Versoes 2.7.X e 3.X; (Existem projetos que nao foram migrados -E que provavelmente nao serao em python 2.X);
Dr. E. S. Pereira 6
Python e Arduino
Introducao
A linguagem Python
A linguagem Python
Python e uma linguagem interpretada desenvolvida por GuidoVan Rossum em 1991;
E multiparadigma, porem tudo em python e objeto;
E livre, aberta e com baterias incluıdas;
Versoes 2.7.X e 3.X; (Existem projetos que nao foram migrados -E que provavelmente nao serao em python 2.X);
Dr. E. S. Pereira 7
Python e Arduino
Medida de Temperatura com LM35
Medida de Temperatura com LM35
Dr. E. S. Pereira 8
Python e Arduino
Medida de Temperatura com LM35
O experimento
Evolucao da temperatura com o tempo
LM35 - Sensor que apresenta saıda de tensao linear proporcionala temperatura em que o mesmo se encontra, tendo em sua saıdaum sinal de 10mV para cada Grau Celsius de temperatura;
Opera na faixa de [−50o,1500]C.
Dr. E. S. Pereira 9
Python e Arduino
Medida de Temperatura com LM35
O experimento
Evolucao da temperatura com o tempo
A saıda do LM35 sera conectada a porta analogica A0; O valordo sinal de A0 ira variar entre 0 a 1023, com 0 correspondendo a0 Volts e 1023 correspondendo a 5 Volts.
Como para cada variacao de 1oC o sensor registra umamudanca de 10mV, entao:
VA0 = (Vlido ∗ (5/1023)); (1)
T =VA0/0.01; (2)
com VA0 a voltagem da saıda do sensor, Vlido e o valor lido naporta analogica A0 e T e a temperatura em graus Celsius;
Dr. E. S. Pereira 10
Python e Arduino
Medida de Temperatura com LM35
O experimento
Evolucao da temperatura com o tempo
A saıda do LM35 sera conectada a porta analogica A0; O valordo sinal de A0 ira variar entre 0 a 1023, com 0 correspondendo a0 Volts e 1023 correspondendo a 5 Volts.
Como para cada variacao de 1oC o sensor registra umamudanca de 10mV, entao:
VA0 = (Vlido ∗ (5/1023)); (1)
T =VA0/0.01; (2)
com VA0 a voltagem da saıda do sensor, Vlido e o valor lido naporta analogica A0 e T e a temperatura em graus Celsius;
Dr. E. S. Pereira 11
Python e Arduino
Medida de Temperatura com LM35
O experimento
Conexao com Arduino
Dr. E. S. Pereira 12
Python e Arduino
Medida de Temperatura com LM35
O codigo
LM35 v0.1
#include "Arduino.h"const int LM35 = A0;float temperatura;unsigned long t0 = millis();unsigned long t1 = t0;
void setup(){Serial.begin (9600);
}void loop(){
temperatura = (float(analogRead(LM35)) * 5 / 1023) / 0.01;if(millis() - t1 >= 1000) {
t1 = millis();unsigned long t2 = (t1 - t0) / 1000;Serial.print(t2, DEC);Serial.print(’,’);Serial.println(temperatura ,DEC);
}}
Dr. E. S. Pereira 13
Python e Arduino
Comunicacao Serial - python-serial
Comunicacao Serial - python-serial
Dr. E. S. Pereira 14
Python e Arduino
Comunicacao Serial - python-serial
Comunicacao Serial
Comunicacao Serial
Para a comunicacao serial e preciso instalar a biblioteca pyserial
Para usuarios de sistemas tipo debian: sudo apt-get installpython-serial
Dr. E. S. Pereira 15
Python e Arduino
Comunicacao Serial - python-serial
Comunicacao Serial
Comunicacao Serial
Para a comunicacao serial e preciso instalar a biblioteca pyserial
Para usuarios de sistemas tipo debian: sudo apt-get installpython-serial
Dr. E. S. Pereira 16
Python e Arduino
Comunicacao Serial - python-serial
O codigo
pyserial
# / u s r / b i n / env py t ho n#−∗− co d i ng : UTF−8 −∗−’ ’ ’S i s t e m a de comunicacao v i a p o r t a s e r i a l com a r d u i n o .’ ’ ’_author = "E. S. Pereira"_date = "31/03/2017"_version= "0.0.1"
import serial
ser = serial.Serial("/dev/ttyUSB0", 9600)ser.write(’5’)print ser.read()
Dr. E. S. Pereira 17
Python e Arduino
Gerador de Graficos em tempo Real
Gerador de Graficos em tempo Real
Dr. E. S. Pereira 18
Python e Arduino
Gerador de Graficos em tempo Real
O codigo
Gerador de Graficos Parte -1
# / u s r / b i n / env py t ho n#−∗− co d i ng : UTF−8 −∗−’ ’ ’S i s t e m a de comunicacao v i a p o r t a s e r i a l com a r d u i n o .’ ’ ’_author = "E. S. Pereira"_date = "31/03/2017"_version= "0.0.1"
import serialimport matplotlib.pyplot as pltplt.ion()
ser = serial.Serial("/dev/ttyUSB0", 9600)ser.read()
Dr. E. S. Pereira 19
Python e Arduino
Gerador de Graficos em tempo Real
O codigo
Gerador de Graficos Parte -2
def serOut(ser):tmp = ser.read()a = tmpwhile(tmp != ’\n’):
tmp = ser.read()a += tmp
b = a.split(’\r’)[0]b = b.split(’,’)return b[0], b[1]
Dr. E. S. Pereira 20
Python e Arduino
Gerador de Graficos em tempo Real
O codigo
Gerador de Graficos Parte -3
class DynamicUpdate():# Suppose we know t h e x rangemin_x = 0max_x = 20
def on_launch(self):# S e t up p l o tself.figure , self.ax = plt.subplots(# s u b p l o t k w= d i c t ( p r o j e c t i o n =’ p o l a r ’ ))self.lines , = self.ax.plot([], [], ’o’)# A u t o s c a l e on unknown a x i s and known l i m s on t h e o t h e rself.ax.set_autoscaley_on(True)# s e l f . ax . s e t x l i m ( s e l f . min x , s e l f . max x )# s e l f . ax . s e t y l i m ( s e l f . min x , s e l f . max x )# Other s t u f fself.ax.grid()
Dr. E. S. Pereira 21
Python e Arduino
Gerador de Graficos em tempo Real
O codigo
Gerador de Graficos Parte -4
def on_running(self , xdata , ydata):# Update da ta ( w i t h t h e new a n d t h e o l d p o i n t s )self.lines.set_xdata(xdata)self.lines.set_ydata(ydata)# Need bo th o f t h e s e i n o r d e r t o r e s c a l eself.ax.relim()self.ax.autoscale_view()# We need t o draw ∗and∗ f l u s hself.figure.canvas.draw()self.figure.canvas.flush_events()
Dr. E. S. Pereira 22
Python e Arduino
Gerador de Graficos em tempo Real
O codigo
Gerador de Graficos Parte -5
def __call__(self):import numpy as npimport timeself.on_launch()xdata = []ydata = []i = 0for x in np.arange(0, 100000, 1):
x0, y0 = serOut(ser)
if(len(x0) <= 6):if(y0 != ’’ and x0 != ’’):
print(x0, y0)xdata.append(float(x0))ydata.append(float(y0))self.on_running(xdata , ydata)
return xdata , ydata
Dr. E. S. Pereira 23
Python e Arduino
Gerador de Graficos em tempo Real
O codigo
Gerador de Graficos Parte - 6
if(__name__ == "__main__):d = DynamicUpdate()d()
Dr. E. S. Pereira 24
Python e Arduino
Gerador de Graficos em tempo Real
Codigo Disponıvel GitHub
Codigo Disponıvel GitHub
https://github.com/duducosmos/arduinoday2017
Dr. E. S. Pereira 25
Python e Arduino
Suavizacao de Dados Coletados
Suavizacao de Dados Coletados
Dr. E. S. Pereira 26
Python e Arduino
Suavizacao de Dados Coletados
Suavizacao de Dados de sensores
Suavizacao de Dados de sensores
Ao inves de coletar o dado direto, iremos passar o valor mediodos ultimos N dados coletados;
Lembrando que o valor medio representa o valor esperado, ou ovalor mais provavel de ser o correto;
Dr. E. S. Pereira 27
Python e Arduino
Suavizacao de Dados Coletados
Suavizacao de Dados de sensores
Suavizacao de Dados de sensores
Ao inves de coletar o dado direto, iremos passar o valor mediodos ultimos N dados coletados;
Lembrando que o valor medio representa o valor esperado, ou ovalor mais provavel de ser o correto;
Dr. E. S. Pereira 28
Python e Arduino
Suavizacao de Dados Coletados
O codigo
LM35 v0.1 - Parte 1
#include "Arduino.h"const int LM35 = A0;float temperatura;unsigned long t0 = millis();unsigned long t1 = t0;
/ / Smooth Temp Dataconst int readsSize = 30;unsigned int readIndex = 0;unsigned int reads[readsSize];unsigned int totalReads;unsigned int averageReads;
Dr. E. S. Pereira 29
Python e Arduino
Suavizacao de Dados Coletados
O codigo
LM35 v0.1 - Parte 2
void smoothTemp(){totalReads = totalReads - reads[readIndex];
reads[readIndex] = analogRead(LM35);
totalReads = totalReads + reads[readIndex];readIndex += 1;if(readIndex >= readsSize) {
readIndex = 0;}
averageReads = totalReads / readsSize;
}
Dr. E. S. Pereira 30
Python e Arduino
Suavizacao de Dados Coletados
O codigo
LM35 v0.1 - Parte 3
void setup(){Serial.begin (9600);for(int i = 0; i < readsSize; i++ ) {reads[i] = 0;}
}
Dr. E. S. Pereira 31
Python e Arduino
Suavizacao de Dados Coletados
O codigo
LM35 v0.1 - Parte 3
void loop(){/ / t e m p e r a t u r a = ( f l o a t ( analogRead ( LM35 ) ) ∗ 5 / 1023) / 0 . 0 1 ;
smoothTemp();
temperatura = (float(averageReads) * 5 / 1023) / 0.01;
if(millis() - t1 >= 1000) {t1 = millis();unsigned long t2 = (t1 - t0) / 1000;Serial.print(t2, DEC);Serial.print(’,’);Serial.println(temperatura ,DEC);
}}
Dr. E. S. Pereira 32
Python e Arduino
Resultados
Resultados
Dr. E. S. Pereira 33
Python e Arduino
Resultados
Leitura de Dados Nao Suavizados
Comunicacao Serial
Dr. E. S. Pereira 34
Python e Arduino
Resultados
Leitura de Dados Suavizados
Comunicacao Serial
Dr. E. S. Pereira 35
Python e Arduino
Resultados
FIM
FIM
MUITO OBRIGADO.
Dr. E. S. Pereira 36
top related