สร้างเว็บEngine by iGetWeb.com
Cart รายการสินค้า (0)

arduino อ่าน encoder

arduino อ่าน encoder

arduino อ่าน encoder


ใช้เป็น sensor ตรวจนับรอบวัดความเร็ว encoder หรือใช้ตรวจนับชิ้นงานวัตถุ หรือหยดน้ำก็ได้ครับ

ความกว้างของปาก sensor ประมาณ 10 mm ใช้ไฟเลี้ยง 5V ภายในเบอร์ดมี Opamp LM393 ขยายสัญญานไว้แล้วครับ

ต่อใช้งานง่าย เหมาะสำหรับ AVR  ARM STM32 PIC MCS-51 

output valid signal is low.

Encoder sensor





ตัวอย่างนี้นะครับจสามารถอ่าน encorder ได้สองตัวพร้อมๆกันโดยต่อขา 2 และ ขา4 ใครต้องการอ่านแค่ตัวเดียวก็ลบ code  

( "void doEncoder_Expanded(){ " )  ไปจนถึงปีกกาล่างนะครับ ออกนะครับ encorder อย่าลืมจ่ายไฟเลี้ยงด้วยนะครับ



code  การอ่านค่าจาก encorder 




#define encoder0PinA  2
#define encoder0PinB  4

volatile unsigned int encoder0Pos = 0;

void setup() { 


  pinMode(encoder0PinA, INPUT); 
  digitalWrite(encoder0PinA, HIGH);       // turn on pullup resistor
  pinMode(encoder0PinB, INPUT); 
  digitalWrite(encoder0PinB, HIGH);       // turn on pullup resistor

  attachInterrupt(0, doEncoder, CHANGE);  // encoder pin on interrupt 0 - pin 2
  Serial.begin (9600);
  Serial.println("start");                // a personal quirk

} 

void loop(){
//


} void doEncoder() { if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) { encoder0Pos++; } else { encoder0Pos--; } Serial.println (encoder0Pos, DEC); } void doEncoder_Expanded(){
if (digitalRead(encoder0PinA) == HIGH) { // found a low-to-high on channel A if (digitalRead(encoder0PinB) == LOW) { // check channel B to see which way // encoder is turning encoder0Pos = encoder0Pos - 1; // CCW } else { encoder0Pos = encoder0Pos + 1; // CW } } else // found a high-to-low on channel A { if (digitalRead(encoder0PinB) == LOW) { // check channel B to see which way // encoder is turning encoder0Pos = encoder0Pos + 1; // CW } else { encoder0Pos = encoder0Pos - 1; // CCW } } Serial.println (encoder0Pos, DEC); // debug - remember to comment out
}


ดู output ทาง serial monitor จะเห็นการเปลี่ยนแปลงของตัวเลขที่มีการนับขึ้นลง

view