Posts

Rotary Encoder กับ PIC18F2431 โดยใช้ QEI Module

Image
การใช้งาน Quadrature Encoder ในบทความก่อนหน้านี้นั้นได้ใช้วิธีการประมวลผลจากการตรวจจับ Interrupt ของขอบสัญญาณ ซึ่งเป็นวิธีการที่ไม่ดีนัก ดังนั้น Microcontroller บางตัวจึงได้ใส่ module  ที่ทำหน้าที่ประมวลผลสัญญาณของ Quadrature Encoder มาให้เลย Quadrature Encoder Interface (QEI) ของ PIC18F2431 นั้นมีแผนภาพดังนี้ ความสามารถของ QEI Module ตรวจจับทิศทางของการหมุุนโดยการ interrupt (ICDRIF) 16-bit up/down position counter (POSCNT) สามารถตรวจนับได้ทั้งแบบ x2 และ x4 สามารถวัดความเร็วได้ สามารถตรวจจับตำแหน่งได้ด้วย Interrupt (IC2QEIF) การใช้งาน (ดูอ้างอิงตาม Datasheet ในส่วนของรีจิสเตอร์ QEICON) การตรวจจับเมื่อหมุนครบรอบโดยใช้สัญญาณจาก index (สัญญาณ Z) ให้ตรวจจับ interrupt  โดยให้ทำการเซ็ต QEICON:QEIM เป็น 001 (โหมด x2) และ 101 (โหมด x4) การตรวจจับโดยนับถึงตำแหน่งที่ต้องการ (POSCNT = MAXCNT) เช่น ถ้าต้องการให้นับถึงตำแหน่งที่ 4000 ให้ทำการเซ็ต MAXCNTH = 0x0f และ MAXCNTL = 0x9f (3999 = 0x0f9f) โดย flag bit ของการ interrupt ข้างบนนี้คือตัวเดียวกัน (IC2QEIF) เมื่อถูกเซ็ตแล้ว ต้อง...

สร้าง Traindata สำหรับ OCR ด้วย Tesseract

Image
       ในกระบวนการ Optical Character Recognition (OCR) นั้นจำเป็นจะต้องมีข้อมูลลักษณะ (Feature) ของตัวอักขระนั้นๆก่อน เพื่อนำมาประมวลผลเทียบเคียงกับข้อมูลที่ได้จากภาพ ข้อมูล Feature นี้นั้นได้มาจากการฝึกฝน (Train) ซึ่งค่อนข้างมีซับซ้อนในการพัฒนา ดังนั้นในบทความนี้จะใช้ Tool ที่ช่วยลดความยุ่งยากไปได้เยอะ โดยมีชื่อว่า Tesseract OCR Tesseract OCR      Tesseract OCR เป็น Engine ที่ใช้สำหรับการรู้จำอักขระทางภาพ พัฒนาขึ้นโดยบริษัท HP ระหว่างปี 1984-1985 โดยเริ่มต้นมาจากโปรเจควิจัยระดับปริญญาเอกในห้องปฏิบัติการณ์ HP โดยมีความตั้งใจเพื่อนำไปใช้กับงานเครื่องสแกนเนอร์เป็นหลัก ซึ่งในปี 2005 HP ก็ได้ปล่อยให้เป็น Open Source โดยมี google เป็นผู้สนับสนุน ซึ่งนักพัฒนาสามารถนำชุดคำสั่งนี้มาใช้งานได้ Tesseract นั้นถือว่าเป็นหนึ่งใน OCR Open Source ที่มีความแม่นยำสูง สามารถเข้าไปดาวน์โหลดได้ที่ https://code.google.com/p/tesseract-ocr/ Training Step Step : 1      สร้างไฟล์ box ซึ่งเป็นไฟล์ที่ใช้ระบุตำแหน่งของอักขระต่างๆ ที่อยู่ในรูปภา...

แจก Savitzky-Golay Digital Filter .NET Library

Image
การปรับเส้นโค้งให้เรียบโดยใช้ Savitzky-Golay Filter          หนึ่งในเทคนิคสำคัญในการประมวลผลสัญญาณเชิงดิจิตอลคือ การกรองสัญญาณ (Filtering) ซึ่งเป็นกระบวนการในการแยกสัญญาณหลักออกจากสัญญาณที่ไม่ต้องการ (noise) โดยใช้วิธีการทางคณิตศาสตร์ ซึ่งตัวกรองแบบดิจิตอลนั้นมีอยู่ด้วยกันหลายตัว แต่ในบทความนี้เราจะมาทำความรู้จักกับตัวกรองที่ชื่อว่า Savitzky-Golay          ในปี 1964 Abraham Sabitzky และ Marcel J.E. Golay ได้ตีพิมพ์งานวิจัย " Smoothing and differentiation of Data by Simplified Least Squares Procedures. " ลงในวารสาร Analytical Chemistry ซึ่งได้ถูกนำไปอ้างอิงเป็นอย่างมาก ด้วยข้อดีที่ไม่ทำให้ Amplitude ของสัญญาณลดลงรวมถึงไม่มีการ lag ของสัญญาณ            ด้วยเหตุนี้ จึงได้ถูกนำไปประยุกต์ใช้เป็นอย่างมาก ไม่ว่าจะเป็นทางด้าน Science, Medical, Engineering เช่น นำไปกรองสัญญาณข้อมูลที่ได้จาก Absorbtion Spectroscopy หรือการนำไปกรองสัญญาณเครื่องตรวจวัดและบันทึกคลื่นไฟฟ้าของหัว...

การเชื่อมต่อและการเขียนโปรแกรมใช้งาน Rotary Encoder แบบ X4 Counting

Image
     Rotary Encoder เป็นอุปกรณ์ที่สามารถบอกตำแหน่งหรือความเร็วในการเคลื่อนที่เชิงมุม ส่วนมากภายในจะใช้เซนเซอร์แบบแสงซึ่งจะให้สัญญาณออกมาในรูปแบบ Pulse ที่สามารถนำมาประมวลผลได้ โดย Rotary Encoder สามารถแบ่งออกได้เป็น Absolute Encoder และ Incremental Encoder โดยในบทความนี้จะกล่าวถึงเฉพาะ Incremental Encoder เท่านั้น Incremental Rotary Encoder          Incremental Encoder นั้นจะมีสัญญาณเอาต์พุตเป็น Pulse ต่อเนื่องเรื่อยๆ ถึงแม้ว่าจะหมุนครบรอบไปแล้วก็ตาม แต่ว่าไม่สามารถที่จะบอกทิศทางการหมุนได้ ดังนั้นแล้ว Incremental Encoder ส่วนมากจึงมีสัญญาณเอาต์พุตอีกช่องที่มีเฟสแตกต่างกัน ทำให้สามารถบอกทิศทางการหมุนได้ เรียกว่า Quadrature Encoder รูปที่ 1. Quadrature Encoder block diagram      รูปที่ 1 เป็นบล๊อคไดอะแกรมของ Quadrature Encoder ซึ่งประกอบไปด้วยจานล้อหมุนที่มีวงรอบด้านนอกเป็นช่องๆสลับกับส่วนทึบหมุนไปมา ซึ่งจะทำให้ฝั่ง Detector Section ที่มี Photo Diodes ที่ถูกแบ่งออกเป็น 2 ส่วนคือ A กับ B เกิดสัญญาณที่มีเ...

MCS-51 Based Tachometer (เครื่องวัดความเร็วรอบ)

Image
Siwakorn Sukprasertchai , siwakorn@nablatronics.com      เป็นโปรเจคที่ผมทำขึ้นเล่นๆ เมื่อสมัยเรียน ปี 4 ซึ่งได้ถูกนำไปใช้งานจริงเพื่อวัดความเร็วรอบของเครื่อง Spin Coater (เครื่องปลูกฟิล์มโดยใช้เทคนิคแรงหนีศูนย์กลาง) โดยการทำงานทั้งหมดจะใช้ Microcontroller ยอดฮิต 8051 เป็นตัวควบคุม รูปที่ 1. ชุดสาธิตการทำงานของ Tachometer ที่่มี MCS-51 เป็นไมโครคอนโทรลเลอร์และใช้ Reflective Optical เป็น Sensor (นวพร เหล่าวัฒนธรรม , สุริยงค์ คำพิยะ) รูปที่ 2. เซนเซอร์อินฟราเรดแบบ Reflective Optical - ความเป็นมา Tachometer คือเครื่องมือที่ใช้ในการวัดความเร็วในการหมุนของ shaft หรือ disk ของเครื่องจักร โดยทั่วไปจะมีหน่วยของการวัดเป็น RPM (Revolution Per Minute) ซึ่งบทความนี้จะนำเสนอวิธีการสร้าง Tachometer โดยใช้เซนเซอร์แบบ Optical และใช้ไมโครคอนโทรลเลอร์ตระกูล 8051 เป็นตัวควบคุม - หลักการทำงานของ Sensor การทำงานของเซนเซอร์จะใช้เซนเซอร์แสง(Photo Interrupter) ซึ่งมี 2 รูปแบบคือ แบบส่องผ่าน(Transmissive) และแบบสะท้อน(Reflective) ทั้ง 2 แบบมีหลักการง่ายๆคือ มีตัวส่งและมีต...

การเขียนโปรแกรมภาษา C เบื้องต้น ตอนที่ 3 : ตัวดำเนินการ (Operators)

หายไปนานเลย กว่าจะมาเขียนบทนี้ได้ = = ที่ผ่านมาเราได้เรียนรู้ตัวแปรและชนิดของตัวแปร เราสามารถที่จะจัดการหรือดำเนินการกับตัวแปรหรือตัวเลขได้ โดยใช้สิ่งที่เรียกว่า “ตัวดำเนินการ (Operator)”  ซึ่งในภาษา C นั้นมีตัวดำเนินการต่างๆดังนี้ ตัวดำเนินการคณิตศาสตร์ (Arithmetic operators) + Addition - Subtraction * Multiplication / Division % Modulo ++ Auto increment -- Auto decrement ตัวดำเนินการ +, –, *, / ก็คือ บวก ลบ คูณ หาร เหมือนในคณิตศาสตร์ตามปกติทั่วไป ที่พิเศษนิดนึงคือ % ตัวดำเนินการนี้เรียกว่า modulo โดยจะดำเนินการเอาเศษที่เหลือของการหารเช่น

การเขียนโปรแกรมภาษา C เบื้องต้น ตอนที่ 2 : ตัวแปรและชนิดของข้อมูล

Image
ตัวแปรคือชื่อเรียกที่เป็นตัวแทนของพื้นที่เก็บข้อมูลในหน่วยความจำ ยกตัวอย่างสมมติว่า บวกเลข 20 กับ 56 ในใจ คุณจะต้องเก็บค่า 20 หรือ 56 ในใจก่อน จากนั้นคุณถึงจะนำค่าทั้ง 2 มาบวกกันได้ เห็นไหมครับสิ่งที่เราเก็บ 20 และ 56 ในใจนั้นก็คือเราเก็บไว้ในหัวสมอง ในคอมพิวเตอร์ก็เช่นเดียวกัน กระบวนการทั้งหมดถ้าเขียนเป็นภาษา C เป็นดังนี้ a = 20; b = 56; result = a + b;