Você está na página 1de 6

20171122 ArduinoeCia:ComomedirarotaodeummotorcomosensordevelocidadeLM393

17fevereiro2016

Comomedirarotaodeummotorcomosensorde
velocidadeLM393
Mediravelocidadedeummotorpodesermuitotilemprojetosderobtica,evocpodefazerissoutilizandoo
sensordevelocidadeencoderLM393.Comelevocpodemedirarotaodemotores,calcularavelocidadede
robs,definirlimitesdedeslocamento,entreoutrasaplicaes.

Essemdulopodetambmserutilizadoparacontagemdepulsosoucomochavedefimdecurso.Eleutilizao
chip comparador LM393 (datasheet), e na sua extremidade tem um optointerruptor com um vo de 5 mm no
qualvocpodeutilizarumdiscoencoderoualgumoutrodispositivoparainterromperofeixedeluz.

MdulosensordevelocidadeLM393

Omdulopossui4pinos,sendodoisdealimentao(35VeGND),umasadadigital(DO) e uma analgica


(A0).

http://www.arduinoecia.com.br/2016/02/sensordevelocidadelm393arduino.html 1/11
20171122 ArduinoeCia:ComomedirarotaodeummotorcomosensordevelocidadeLM393

OoptointerruptorMOCH22Atemdeumladoumledinfravermelho,enooutroladoumfototransistor.Quandoo
feixedeluzinfravermelhainterrompido,asadadigitalD0enviaosinal1,casocontrrio,osadapermanece
emnvel0.

Vamos testar esse sensor utilizando dois programas: um para medir a velocidade de um motor, e outro como
umachavedefimdecurso.NessesdoisexemplosvamosusarapenasasadadigitalD0domdulo.

Medindoarotaodeummotor

Paramedirarotaodeummotor,ligueosensordevelocidadenoArduinocomopinoD0ligadoportadigital
2:

Paratestarocircuito,usamosumdiscoencoderligadoaomotor.Odiscopossuivrias"aberturas"porondeo
feixedeluzvaipassaregerarumpulsonasadadigital.

http://www.arduinoecia.com.br/2016/02/sensordevelocidadelm393arduino.html 2/11
20171122 ArduinoeCia:ComomedirarotaodeummotorcomosensordevelocidadeLM393

Odiscoqueestamosusandotem20aberturas,eessenmerodevesercolocadonoprograma(linha11),que
vaiusaressainformaoparacalculararotaodomotor.

1 //Programa:SensordevelocidadeArduinoLM393
2 //Autor:ArduinoeCia
3
4 //PinoligadoaopinoD0dosensor
5 intpino_D0=2;
6 intrpm;
7 volatilebytepulsos;
8 unsignedlongtimeold;
9
10 //Altereonumeroabaixodeacordocomoseudiscoencoder
11 unsignedintpulsos_por_volta=20;
12
13 voidcontador()
14 {
15 //Incrementacontador
16 pulsos++;
17 }
18
19 voidsetup()
20 {
21 Serial.begin(9600);
22 //Pinodosensorcomoentrada
23 pinMode(pino_D0,INPUT);
24 //Interrupcao0pinodigital2
25 //Acionaocontadoracadapulso
26 attachInterrupt(0,contador,FALLING);
27 pulsos=0;
28 rpm=0;
29 timeold=0;
30 }
31
32 voidloop()
33 {
34 //Atualizacontadoracadasegundo
35 if(millis()timeold>=1000)
36 {
37 //Desabilitainterrupcaoduranteocalculo
38 detachInterrupt(0);

http://www.arduinoecia.com.br/2016/02/sensordevelocidadelm393arduino.html 3/11
20171122 ArduinoeCia:ComomedirarotaodeummotorcomosensordevelocidadeLM393

39 rpm=(60*1000/pulsos_por_volta)/(millis()timeold)*pulsos;
40 timeold=millis();
41 pulsos=0;
42
43 //MostraovalordeRPMnoserialmonitor
44 Serial.print("RPM=");
45 Serial.println(rpm,DEC);
46 //Habilitainterrupcao
47 attachInterrupt(0,contador,FALLING);
48 }
49 }

CarregueoprogramanoArduinoeutilizeoserialmonitorparavisualizaravelocidadederotaodomotor.

Utilizandoomdulocomochavedefimdecurso

Vocpodeutilizaressemdulotambmcomochavedefimdecurso,paraindicarocorretoposicionamentode
ummotoroualgumaestrutura,comoporexemploumaporta,janela,umaguialinearououtraestruturamvel.

Nesse caso, o sensor de velocidade funciona como se fosse uma chave liga/desliga, fazendo com que o
programaexecuteumarotinaespecficacasoofeixedeluzdooptointerruptorsejabloqueado.

Testamosessaconfiguraoacrescentandonocircuitoanteriorummotordepasso28BYJ48:

OprogramausaabibliotecaCustomstepper (download), que j usei anteriormente no post Controlando motor


depasso28BYJ48utilizandoCustomStepper.

feitaumamonitoraosimplesdaportadigital2,ecadavezquerecebidoovalor1,avarivelsentidotemo
seuvalorinvertido.

1 //Programa:SensordevelocidadeLM393Chavedefimdecurso
2 //Autor:ArduinoeCia
3
4 #include<CustomStepper.h>
5
http://www.arduinoecia.com.br/2016/02/sensordevelocidadelm393arduino.html 4/11
20171122 ArduinoeCia:ComomedirarotaodeummotorcomosensordevelocidadeLM393

6 //PinoligadoaopinoD0dosensor
7 intpino_D0=2;
8
9 //Defineosparametrosdeligacaodomotordepasso
10 CustomStepperstepper(8,9,10,11,(byte[])
11 {
12 8,B1000,B1100,B0100,
13 B0110,B0010,B0011,B0001,B1001
14 },4075.7728395,12,CW);
15
16 intsentido=0;
17
18 voidsetup()
19 {
20 Serial.begin(9600);
21 //Pinodosensorcomoentrada
22 pinMode(pino_D0,INPUT);
23 //Defineavelocidadedomotor
24 stepper.setRPM(12);
25 //Defineonumerodepassosporrotacao
26 stepper.setSPR(4075.7728395);
27 }
28
29 voidloop()
30 {
31 intvalor=digitalRead(pino_D0);
32 if(valor!=0)
33 {
34 while(digitalRead(pino_D0)!=0)
35 {
36 delay(100);
37 }
38 //Inverteosentidoderotacao
39 sentido=!sentido;
40 }
41 delay(1);
42 if(sentido==0)
43 {
44 //Giramotornosentidohorario
45 stepper.setDirection(CW);
46 stepper.rotate();
47 }
48 if(sentido==1)
49 {
50 //Giramotornosentidoantihorario
51 stepper.setDirection(CCW);
52 stepper.rotate();
53 }
54 stepper.run();
55 }

Usando o programa acima, cada vez que o feixe de luz do sensor interrompido, o sentido de rotao do
motoralterado.

Voctambmpodegostar

http://www.arduinoecia.com.br/2016/02/sensordevelocidadelm393arduino.html 5/11
20171122 ArduinoeCia:ComomedirarotaodeummotorcomosensordevelocidadeLM393

Controledevagas Controledeluz MotorShield LCD16x2com Sensordesom


deestacionamento utilizandoLDR Arduinoemotor mduloI2CeRTC Arduino
comosensorHC DC12volts DS1307
SR04
Recomendadopor

PostadoporArduinoeCias22:38

Marcadores:28BYJ48,lm393,motordepasso,sensores

32comentrios:
dancopy 23defevereirode201613:46
EutenhooSensordeVelocidade(noomdulocompleto)1)oqueteriadesermudadonocircuitoparaeu
poderliglonoArduino?
2)ErapossvelfazerumcircuitocomesseSensoreumLCDparamostrarosdados?Obrigado

Responder

Respostas

ArduinoeCia 8demarode201620:47

Boanoite,

Nofiznenhumtesteaindaapenascomosensor,masolhandoomdulo,sopoucoscomponentes
quevocvaiprecisar.

Quanto ao LCD, atualmente eu recomendo um mdulo I2C para display LCD, assim voc
economizavriasportasdoArduino.

Abrao!

Responder

AlvanirRicardoDums 25deabrilde201621:44

OlestoufazendoodiagramadomeuprojetonoFritzing.Estouutilizandoestesensor,pormnoconseguiele
noFritzing,poderiameajudar?
Responder

Respostas

ArduinoeCia 26deabrilde201608:04

OiAlvanir,

Eu tambm no consegui achar esse componente no Fritzing, ento pedi para desenharem
separadamente...

Abrao!

silio 4demaiode201713:32
mepudespasareldiagramadelsensor

http://www.arduinoecia.com.br/2016/02/sensordevelocidadelm393arduino.html 6/11