You are on page 1of 9

Tutorial sobre programao de Sensores com Arduino

Interruptor (Bumper)
Um dos sensores mais simples o bumper, que pode ser implementado atravs do circuito da figura 1.

Fig. 1 Circuito do sensor bumper A resistncia pull-down faz com que a porta do microcontrolador fique com o valor lgico 0 quando o boto no estiver a ser premido e com o valor 1 quando o boto estiver a ser premido. A ausncia desta resistncia pode fazer com que a entrada digital oscile entre o valor 0 e o valor 1, por no ter um referencial de teno. Por vezes os microcontroladores tm resistncias internas de pull-up, ou pull-down, que podem ser activadas por software. Nesses casos o circuito torna-se ainda mais simples bastando, por exemplo, ligar o bumper entre os 5V e a porta digital e depois activar por software a resistncia interna pull-down do microcontrolador.

Montagem do sensor Monte o circuito da figura 2 para testar o sensor. Ligue o bumper porta digital 2.

Programao do sensor O bumper vai ser programado de modo a que quando activado, ligue o LED interno do pino 13 e quando desactivado, desligue esse mesmo LED.
const int bumperPin = 2; const int ledPin = 13; // pino do bumper // pino que controla o LED interno

int bumperState = 0;

// varivel para ler o estado do bumper

O mtodo setup() configura o modo de funcionamento das portas.

void setup() { // o pino do LED configurado para output pinMode(ledPin, OUTPUT); // o pino do bumber configurado para imput pinMode(bumperPin, INPUT); }

No mtodo loop() controlamos o estado do LED em funo do estado do bumper.

void loop(){ // leitura do estado do bumper: bumperState = digitalRead(bumperPin); // verificar se o bumper foi activado // se sim, o estado do bumper HIGH: if (bumperState == HIGH) { // ligar o LED: digitalWrite(ledPin, HIGH); } else { // desligar o LED: digitalWrite(ledPin, LOW); } }

Clula fotoelctrica
A figura 2 mostra o circuito do sensor clula fotoelctrica, o qual muito semelhante ao sensor do bumper. O bumper agora substitudo pela clula fotoelctrica cuja resistncia varia com a luminosidade. A teno no pino do microcontrolador variar de 0 a 5V proporcionalmente luminosidade que atinge a clula.

Montagem do sensor Monte o circuito da figura 2.

Fig. 2 Circuito do sensor clula fotoelctrica.

O sensor ligado porta analgica 0.


const int photocellPin = 0; int photocellVal; // pino da clula fotoelctrica // valor analgico lido

No mtodo setup() configuramos a ligao.

void setup(void) { // ligao srie para visualizao do valor lido via Serial Monitor Serial.begin(9600); }

No mtodo loop(), cada valor lido enviado via porta srie para ser visualizado no Serial Monitor.

void loop(void) { photocellVal = analogRead(photocellPin); Serial.print("Photocell Val: "); Serial.println(photocellVal); delay(100); }

Sensor de Distancia Sharp GP2D12


O sensor Sharp GP2D12 tem uma sada analgica que varia entre 0 e 5V, de forma inversamente proporcional distncia a que se encontra o obstculo. Montagem do sensor Monte o sensor como indicado na figura 3.

Fig. 3 Montagem do sensor GP2D12 Programao do Sensor Uma vez que o sensor tem uma sida analgica, a sua programao exactamente igual do sensor clula fotoelctrica. Alteramos apenas o nome da constante do pino do sensor e da varivel do valor para melhor representarem o sensor de distncia.

const int irPin = 0; // pino da sada do sensor int irVal; // valor analgico lido void setup(void) { // ligao srie para visualizao do valor lido via Serial Monitor Serial.begin(9600); } void loop(void) { irVal = analogRead(irPin); Serial.print("GP2D12 Val: "); Serial.println(irVal); delay(100); }

Sensor de Distncia SRF05


Este exemplo usa o sensor SRF05 no modo em que os sinais de Trigger e Echo partilham o mesmo pino do sensor. Este modo configurado ligando o pino de configurao terra (figura 4). Consultar a ficha tcnica do sensor no site do fabricante para mais informao: http://www.robot-electronics.co.uk/htm/srf05tech.htm

Fig. 4 Pinos do sensor SRF05 A figura 5 apresenta o diagrama temporal do sensor e mostra o seu princpio de funcionamento. Inicialmente o microcontrolador envia um pulso de Trigger de no mnimo 10us, o que faz com que o sensor emita uma onda sonora ultra snica. Logo a seguir o sensor coloca o sinal Echo no nvel 1 mantendo-o assim at que receba o echo da onda sonora, ou at acontecer um timeout (aos 30mS).

Fig. 5 Diagrama temporal do sensor SRF05. Montagem do sensor

Monte o sensor como indicado no diagrama da figura 6. No se engane nas ligaes pois pode danificar o sensor.

Fig. 6 Montagem do sensor SRF05

Programao do sensor O pino dos sinais Trigger e Echo ligado porta 2 do Arduino.

int duration; int distance; const int srfPin = 2;

// durao do pulso em uS // distancia medida // pino dos sinais Trigger e Echo

Configurao da ligao srie.


void setup(){ Serial.begin(9600); }

A sequncia de instrues segue a indicao do diagrama temporal da figura 5 analisado anteriormente.


void loop(){ // inicialmente o pino do sensor configurado para OUTPUT (Trigger) pinMode(srfPin, OUTPUT); // fazer com que o pino fique a LOW antes de enviar // o sinal de trigger digitalWrite(srfPin, LOW); delayMicroseconds(2); // enviar um pulso de 10 uS (Trigger) digitalWrite(srfPin, HIGH); delayMicroseconds(10);

// colocar novamente o pino em LOW e // mudar a sua funo para INPUT (Echo) digitalWrite(srfPin, LOW); pinMode(srfPin, INPUT); // ler o tempo durante o qual o pino remanesce a HIGH (em uS) duration = pulseIn(srfPin, HIGH); // dividir o valor pela constante 58 para o converter para cm distance = duration/58; // enviar o valor para o Serial Monitor Serial.println(distance); // esperar 50mS at prxima leitura delay(50); }

Sensor Bssola Electrnica CMPS03


O sensor CPMS03 ilustrado na figura 7 pode ser usado com uma interface PWM (pino 4), ou com uma interface I2C (pinos 2 e 3). Neste exemplo usaremos a interface I2C que permite ler a orientao como um inteiro de 2 bytes (0 a 359).

Fig. 7 Sensor CMPS03 possvel ligar um interruptor entre o pino 6 e a terra para calibrar o sensor. Consultar a ficha tcnica do sensor no site do fabricante para mais informao: http://www.robot-electronics.co.uk/htm/cmps3tech.htm

Montagem do sensor Monte o sensor como indicado no diagrama da figura 8. No se engane nas ligaes pois pode danificar o sensor. A fim de se poderem usar as portas analgicas 4 e 5 como pinos dos sinais DAS e SCL, necessrio ligar estas portas a 5V com duas resistncias pull-up.

Fig. 8 Montagem do sensor CMPS03 O Arduino usa endereos I2C de 7 bits, mas o sensor CMPS03 usa endereos de 8 bits. Por defeito o endereo do sensor 0xC0, mas o Arduino usar 0x60. O endereo usado pelo Arduino o mesmo do sensor, apenas sofre um deslocamento de um bit para a direita. O valor binrio de 0xC0 11000000 e o valor binrio de 0x60 01100000. O Arduino desloca este valor um bit para a direita e adiciona o bit de Read/Write do bus IC automaticamente.

Programao do sensor Fazemos o #include da biblioteca Wire.h para usarmos o bus I2C nos pinos 4 e 5.
#include <Wire.h> #define address 0x60 // definir o endereo do sensor Ligamos o bus I2C e a ligao srie com o PC. void setup(){ Wire.begin(); // ligao do bus I2C Serial.begin(9600); }

Os dispositivos ligados ao bus I2C so vistos como um conjunto de registos de onde ler e para onde escrever. No caso do sensor CMPS03, o valor do azimute est o registo 2.

void loop(){ byte highByte; //bytes para leitura do valor de azimute byte lowByte; // iniciar a comunicao com o CMPS03 Wire.beginTransmission(address);

Wire.send(2); // enviar o resgisto a ler Wire.endTransmission(); Wire.requestFrom(address, 2); // requerer o valor do registo 2 while(Wire.available() < 2); // enquanto hover bytes requeridos highByte = Wire.receive(); // ler byte como um inteiro lowByte = Wire.receive(); int bearing = ((highByte<<8)+lowByte)/10; Serial.println(bearing); delay(100); }

You might also like