quarta-feira, 18 de novembro de 2015

Tutorial 5: Arduino e Matlab - Trabalhando com I²C


    Nesse tutorial iremos abordar como trabalhar com I2C usando o arduino e o Matlab.

    UM POUCO DE HISTÓRIA:

    O barramento I2C foi projetado pela Philips no começo dos anos 80 para permitir comunicação fácil entre os componentes que residem na mesma placa de circuito. TWI significa duas interface de fio (Two Wire Interface) e para a maioria dos microcontroladores essebarramento é idêntico ao I²C . O nome TWI foi introduzido por Atmel e outras empresas para evitar conflitos com marca questões relacionadas com a I²C . 
Barramento I2C é composto por dois fios , SDA ( Linha de dados de série ) e SCL (Serial Linha Relógio). Você pode ver pinos I2C a bordo Arduino como segue:

  • Arduino Uno: Pinos A4 e A5 como SDA e SCL
  • Arduino Mega 2560: Pinos digitais 20 como SDA e pino digital 21 como SCL



O MÓDULO:

    

    O suporte do Matlab para o arduino usando o protocolo I2C é encontrado em:

Para testes foi usado o conversor PCF8591 AD/DA .

    E o datasheet do módulo é:
    

EXPERIEMNTO:

Ao usar o módulo PCF8591 AD/DA deverá ser feita a seguinte montagem.


  • PCF8591 AD/DA Converter SDA —> Arduino SDA (A4)
  • PCF8591 AD/DA Converter SCL —> Arduino CLK (A5)
  • PCF8591 AD/DA Converter VCC —> Arduino VCC +5V
  • PCF8591 AD/DA Converter GND —> Arduino GND

DEMO 1: Scanning I2C

    Depois de ter colocado o sensor no Arduino deve-se encontrar o endereço I2C usando a função scanI2CBus(). No arduino Uno, usa-se o 0 para I2C

   Escreve p seguinte script:

 board = arduino();  
 address = scanI2CBus(board,0); % uno = 0  
 disp(['i2c address: ', address]);  
 clear board;  

    Salve a função com o nome i2c_scan. m e execute.
 
    No command Window deverá ser mostrado o enredeço i2c do sensor .



   DEMO 2: Leitura de dados do sensor pelo barramento i2c

    O módulo PCF8591 AD/DA pode ser integrado com alguns sensores simples como por exemplo:
Termistores, células photo-voltáicas e potenciometros. 
    
    Como no caso o sensor está preso ao endereço 0x48 pode-se então fazer a leitura.
    
    Escreve o seguinte código:    

 function [] = i2c_sensor()  
 board = arduino();  
 finishup = onCleanup(@() exitprogram(board));  
 disp('press Ctr-C to exit');  
 PCF8591 = '0x48';  
 PCF8591_ADC_CH0 = '40'; % thermistor  
 PCF8591_ADC_CH1 = '41'; % photo-voltaic  
 PCF8591_ADC_CH3 = '43'; % potentiometer  
 i2c = i2cdev(board,PCF8591);  
 disp(['thermistor ', 'photo ', 'potentiometer']);  
 while 1  
 thermistor = read_adc(i2c,hex2dec(PCF8591_ADC_CH0));  
 pause(0.5);  
 photo = read_adc(i2c,hex2dec(PCF8591_ADC_CH1));  
 pause(0.5);  
 potentiometer = read_adc(i2c,hex2dec(PCF8591_ADC_CH3));  
 pause(0.5);  
 disp([thermistor, photo, potentiometer]);  
 end  
 end  
 function adc = read_adc(dev,config)  
 write(dev,config);  
 read(dev, 1);  
 out = read(dev, 1);  
 adc = out;  
 end  
 function exitprogram(b)  
 clear b;  
 disp('program has exit');  
 end  

Salve o programa com o nome da função i2c_sensor,m e execute.




   No próximo tutorial iremos aprender sobre SPI.






Nenhum comentário:

Postar um comentário