Eines de l'usuari

Eines del lloc


tutorials:arduino:05_arduino_motors:10_encoder

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Següent revisió
Revisió prèvia
tutorials:arduino:05_arduino_motors:10_encoder [2019/01/03 14:10]
crevert creat
tutorials:arduino:05_arduino_motors:10_encoder [2019/01/21 19:41] (actual)
crevert
Línia 1: Línia 1:
 ====== encoder tacometre ====== ====== encoder tacometre ======
- 
  
 Programa encoder amb LED-LDR i un disc amb una perforació per volta. Programa encoder amb LED-LDR i un disc amb una perforació per volta.
  
-<​code>​ +|{{ :​tutorials:​arduino:​05_arduino_motors:​encoder_cam_lenta_output.mp4?​200 |}}|  {{ :​tutorials:​arduino:​05_arduino_motors:​encoder_serial_monitor_3.mp4 |}}| 
-//stat=0-> ​noIluminat ​ + 
-//stat=1-iluminat+Calibrar primer el LED-LDR, que A0>400 sigui ilumunat i A0<400 sigui no iluminat(iluminat=0). 
 + 
 +<code c calibraLED-LDR
 +void setup() { 
 +pinMode(A0,​INPUT);​ 
 +Serial.begin(9600);​ 
 +
 + 
 +void loop() { 
 +  Serial.println(analogRead(A0));​ 
 +  delay(250);​ 
 +
 +</code> 
 + 
 +I aquí el programa, pel port serie podem enviar el byte que regula la sortida PWM que regula la tensió del motor i podem veure les rpm i els volts, podem traure diversos punt i dibuixar la corba tensió-velocitat.
  
-int stat=0; +<code c encoder_tacometre.pde>​ 
 +int VoltsMotor=150;​ 
 +int iluminat=0; 
 int lecturaAnalogica=0;​ int lecturaAnalogica=0;​
 int temps=0; int temps=0;
 +float rpm;
 unsigned long primer_temps=0;​ unsigned long primer_temps=0;​
 unsigned long segon_temps=0;​ unsigned long segon_temps=0;​
 unsigned long interval=0; unsigned long interval=0;
 bool primera_vegada=true;​ bool primera_vegada=true;​
- 
 unsigned long noDelayMillis = 0; unsigned long noDelayMillis = 0;
-const long noDelayInterval = 1000;  +const long noDelayInterval = 1000; 
    
 void setup() { void setup() {
- ​pinMode(5,OUTPUT);+ ​pinMode(9,OUTPUT);
  ​pinMode(A0,​INPUT);​  ​pinMode(A0,​INPUT);​
  ​Serial.begin(9600);​  ​Serial.begin(9600);​
 } }
 +
 void loop() { void loop() {
-  ​analogWrite(5,180);  //190 = 29/30 ms a 80=60 ms  +  ​if (Serial.available()) { 
-  ​// 1/0,03 *60= 2000 rpm (1/0,06 * 60)= 1000 rpm+    VoltsMotor=Serial.parseInt(); 
 +  // INVIAR UN VALOR ENTRE 100 200 (byte) 
 +  ​analogWrite(9,VoltsMotor);  ​
   lecturaAnalogica=analogRead(A0);​   lecturaAnalogica=analogRead(A0);​
   // primera vegada que s'​engega   // primera vegada que s'​engega
-  if (stat==0 && lecturaAnalogica>​500 && primera_vegada){+  if (iluminat==0 && lecturaAnalogica>​400 && primera_vegada){
   primer_temps=millis();​   primer_temps=millis();​
-  ​stat=1;+  ​iluminat=1;
   primera_vegada=false;​   primera_vegada=false;​
 } }
  // segona vegada que s'​engega  // segona vegada que s'​engega
-if (stat==0 && lecturaAnalogica>​500 && !primera_vegada){+if (iluminat==0 && lecturaAnalogica>​400 && !primera_vegada){
   segon_temps=millis();​   segon_temps=millis();​
-  ​stat=1;+  ​iluminat=1;
   interval=segon_temps-primer_temps;​   interval=segon_temps-primer_temps;​
   primera_vegada=true;​   primera_vegada=true;​
   }   }
-  if (stat==1 && lecturaAnalogica<​500) { +  if (iluminat==1 && lecturaAnalogica<​400) { 
-   stat=0;+  ​iluminat=0;
   }   }
   // enviament cada segon sense delay   // enviament cada segon sense delay
Línia 48: Línia 66:
   if (currentMillis - noDelayMillis >= noDelayInterval) {   if (currentMillis - noDelayMillis >= noDelayInterval) {
     noDelayMillis = currentMillis;​     noDelayMillis = currentMillis;​
-   //​Serial.println(interval); +    rpm = 1.0/float(interval)*60*1000;​ 
-   ​Serial.println((1.0/float(interval))*60*1000);+    if(rpm>​100 && rpm<​5000){ 
 +   ​Serial.print("​rpm= ");Serial.println(rpm); 
 +   Serial.print("​V= ") ;Serial.println((float)VoltsMotor*5/255);
   }   }
 +}
 } }
 </​code>​ </​code>​
Línia 57: Línia 78:
  
 Altre tacòmetre, aquest amb un emissor receptor infrarojos, per a un torn(lathe). [[https://​www.hackster.io/​TonyScarp/​arduino-ir-lathe-tachometer-500733]] Altre tacòmetre, aquest amb un emissor receptor infrarojos, per a un torn(lathe). [[https://​www.hackster.io/​TonyScarp/​arduino-ir-lathe-tachometer-500733]]
 +
 +{{ :​tutorials:​arduino:​05_arduino_motors:​5_-_showing_the_sensor_ju4igqcw5x.jpg?​400 |}}
  
 <​code>​ <​code>​
tutorials/arduino/05_arduino_motors/10_encoder.1546521040.txt.gz · Darrera modificació: 2019/01/03 14:10 per crevert