Contatos

e-mail: daniloxc@msn.com

Skype: Daniloxc1

Pages

sexta-feira, 6 de setembro de 2013

Python + Simulino (Simulador do Arduino) no ISIS Proteus



Olá, hoje nós iremos fazer uma comunicação entre o IDLE do Python 2.7.
Para comunicarmos com a porta serial através do Python, é preciso baixar a biblioteca serial.py, segue o link:
https://pypi.python.org/pypi/pyserial
Descompacte na pasta do python, localize a pasta através do prompt de comando e digite:
python setup.py install

Para testar se foi instalado corretamente basta abrirmos a o python no prompt do DOS, digitando python e depois import serial. (Veja abaixo)
Se não apresentar nenhuma mensagem de erro, a instalação foi feita corretamente.

Segue abaixo o circuito feito no proteus:
O Simulino do Arduino Uno você encontrará em: http://blogembarcado.blogspot.com.br
Temos que fazer algumas configurações no componente COMPIM, utilizar largura de banda:9600 e a porta COM1 (estou usando a COM 1 aqui para o Simulino e COM 2 para o objeto Serial do Python)
Para fazer esta ligação entre Python e Simulino, precisamos de um software que gere portas COM virtuais.
Utilizaremos o Virtual Serial Port Emulator (link: http://www.baixaki.com.br/download/free-virtual-serial-ports-emulator.htm)

Após instalá-lo, geramos as portas virtuais:

Escolha 'pair' para fazer com que tudo que aconteça numa porta ocorra na outra, aqui estou a utilizar COM1 e COM2.
Vídeo:


Código feito para o Arduino:
 int led_biby = 13;  
 int led_blue = 12;  
 int led_yellow = 11;  
 int led_red = 10;  
 char var;  
 void setup(){  
  pinMode(led_biby, OUTPUT);  
  pinMode(led_blue, OUTPUT);  
  pinMode(led_yellow, OUTPUT);  
  pinMode(led_red, OUTPUT);  
  Serial.begin(9600);  
 }  
 void loop(){  
  digitalWrite(led_biby, LOW);  
  digitalWrite(led_blue, LOW);  
  digitalWrite(led_yellow, LOW);  
  digitalWrite(led_red, LOW);  
  if(Serial.available()>0){  
   var = Serial.read();  
   switch (var){  
   case 'a':  
    digitalWrite(led_biby, HIGH);  
    Serial.print("Led Biby is on");  
    delay(300);  
    break;  
   case 'b':  
    digitalWrite(led_blue, HIGH);  
    Serial.print("Led Blue is on");  
    delay(300);  
    break;  
   case 'y':  
    digitalWrite(led_yellow, HIGH);  
    Serial.print("Led Yellow is on");  
    delay(300);  
    break;  
   case 'r':  
    digitalWrite(led_red, HIGH);  
    Serial.print("Led Red is on");  
    delay(300);  
    break;  
   default:  
    break;  
   }  
  }  
 }  
Código feito no Python:
 #importa a biblioteca serial encontrada no endereço: https://pypi.python.org/pypi/pyserial  
 import serial  
 #cria-se um objeto com o nome arduino que se comunicará com o proteus  
 arduino_uno = serial.Serial()  
 #define qual porta COM arduino será conectado (Estou utilizando windows)  
 arduino_uno.port = 1  
 #define qual o timeout para comunicação entre o idle do python e o simulino  
 arduino_uno.timeout = 2  
 #começa a comunicação  
 arduino_uno.open()  
 ligar_led='e'  
 #loop para comunicação  
 while(ligar_led!='s'):  
   ligar_led = raw_input('Informe qual led queres ligar (a, b, y ou r) para sair informe s: ')  
   arduino_uno.write(ligar_led)  
   print(arduino_uno.readall()+'\n\n')  
 #fecha comunicaçao  
 arduino_uno.close()  

2 comentários:

  1. Parabensss Danilão!! Ficou muito bom o post! Sucesso meu Brother.

    ResponderExcluir