วันจันทร์ที่ 26 ธันวาคม พ.ศ. 2559

Counter / Speed Sensor ร่วมกับ 7 Segment Display

การใช้งาน Counter / Speed Sensor ร่วมกับ 7 Segment Display




บทความนี้เป็นภาคต่อของบทความ สร้างนาฬิกาดิจิตอลด้วยบอร์ด Arduino ที่เป็นการนำ 7 Segment Display มาใช้แสดงผลร่วมกับเซ็นเซอร์ต่างๆ ในบทความนี้เป็นการนำมาต่อใช้งานร่วมกับโมดูล Counter / Speed Sensor เพื่อนับจำนวนเหรียญ สามารถนำไปประยุกต์ใช้ทำเครื่องนับจำนวนเหรียญ หรือกระปุกออมสินได้ครับ


การใช้งาน Counter / Speed Sensor
ตัวโมดูลเซ็นเซอร์จะมีขาให้ใช้งานทั้งหมด 4 ขา มี 2 ขาสำหรับจ่ายไฟ และอีก 2 ขา สำหรับส่งสัญญาณออกมาเมื่อตรวจพบวัตถุ

ขา VCC สำหรับต่อไฟบวก 3.3 - 5V
ขา GND
ขา D0 เป็นขาส่งสัญญาณ HIGH (ลอจิก 1) ออกมา เมื่อตรวจพบวัตถุ
ขา A0 เป็นขาสำหรับปล่อยสัญญาณแบบอนาล็อกออกมา ขานี้จะถูกใช้งานเมื่อวัตถุมีลักษณะโปร่งแสง ทำให้ต้องอ่านค่าอย่างละเอียดจาดตัวเซ็นเซอร์



การใช้งานจะเหมือนกับการอ่านค่าสวิตซ์ คือใช้คำสั่ง pinMode(... , INPUT); และคำสั่ง digitalRead(...); อ่านค่าออกมา

การใช้งานโมดูล 7 Segment Display
ที่จริงแล้วโมดูลนี้เหมาะสำหรับนำไปทำเป็นนาฬิกามากกว่า หรืองานที่เกี่ยวกับการแสดงผลเวลา แต่หากปิดการใช้งานโคล่อน ( : ) ไว้ ก็สามารถนำมาใช้งานแสดงผลตัวเลข 4 หลักได้



โมดูลแสดงผลนี้ใช้ไอซี TM1637 ในการขับ 7 Segment Display ดังนั้นจึงต้องไปโหลดไลบารี่มาลงก่อน สามารถดาว์โหลดได้ที่ : TM1637 (By IOXhop.com)

ขาของโมดูลจะมีทั้งหมด 4 ขา ดังนี้

VCC สำหรับจ่ายไฟแรงดัน 3.3V - 5V
GND
CLK สำหรับสร้างความถี่กำหนดจังหวะการส่งข้อมูล
DIO สำหรับส่งข้อมูล



สำหรับคำสั่งที่ใช้ ทาง IOXhop ได้สร้างฟังก์ชั่น .print() ไว้ให้ใช้งานแล้ว นำตัวเลขไปใส่โมดูลก็จะแสดงผลตัวเลขออกมาเลย

วงจร
วงจรสามารถเปลี่ยนแปลงได้ หากต่อขาของโมดูลเข้ากับขาอื่นๆของบอร์ด Arduino ดังนั้นหากเปลี่ยนขา ต้องแก้โค้ดด้วย

สำหรับการต่อขาใช้งานตามโค้ด จะกำหนดไว้ดังนี้

ต่อขา VCC ของทั้ง 2 โมดูล เข้ากับขา 5V
ต่อขา GND ของทั้ง 2 โมดูล เข้ากับขา GND
ต่อขา CLK ของโมดูล 7 Segment Display เข้ากับขา D3 ของบอร์ด Arduino
ต่อขา DIO ของโมดูล 7 Segment Display เข้ากับขา D2 ของบอร์ด Arduino
ต่อขา D0 ของโมดูล Counter / Speed Sensor เข้ากับขา D4 ของบอร์ด Arduino

โค้ด

// CounterSensorDisplay by IOXhop.com

#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 3 // กำหนดว่าขา CLK ต่ออยู่กับขา D3
#define DIO 2 // กำหนดว่าขา DIO ต่ออยุ่กับขา D2
#define D0Sensor 4 // กำหนดว่าขา D0 ของ Counter / Speed Sensor ต่ออยู่กับขา D4

TM1637Display display(CLK, DIO); // เริ่มใช้งานไลบารี่

int i; // ประกาศตัวแปร i เป็นชนิด int เก็บข้อมูลตัวเลขจำนวนเต็ม

void setup()
{
  pinMode(D0Sensor, INPUT); // กำหนดให้ขาที่ต่อกับ D0 ของเซ็นเซอร์เป็นขาอินพุต
}

void loop()
{
  if (digitalRead(D0Sensor)==HIGH) { // ถ้าขาที่ต่อกับ D0 มีสถานะเป็น HIGH
    while(digitalRead(D0Sensor)==HIGH); // ให้รอจนกว่าขาที่ต่อกับ D0 เป็น LOW
    i++; // เพิ่มค่าในตัวแปร i ขึ้น 1 จำนวน
  }
  display.print(i); // แสดงผลค่า i ออกทางหน้าจอ 7 Segment
  delay(10); // หน่วงเวลา 10mS
}

การใช้งาน
เมื่อนำเหรียญไปบังในร่องของเซ็นเซอร์ แล้วนำออกมา จะทำให้ตัวเลขเพิ่มขึ้นมาทีละ 1 กรณีที่มีเหรียญบังค้างไว้ จะไม่เริ่มนับต่อจนกว่าเหรียญจะออกไปจากร่องแล้ว

วันเสาร์ที่ 17 ธันวาคม พ.ศ. 2559

1602 LCD (Blue Screen) 16x2 LCD with backlight of the LCD screen

1602 LCD (Blue Screen) LCD with backlight of the LCD screen

หน้าจอแสดงผล LCD ไฟแบคไลท์สีน้ำเงิน ขนาด 16 ตัวอักษร 2 บรรทัด มีไลบารีมาตรฐานพร้อมใช้งาน

แนะนำให้ใช้กับตัว I2C Module นี้นะครับ ช่วยลดขาในการต่อ

 นิยมใช้ร่วมกับ

2.54mm 1X16 16Pin Gold-plated Single Row Straight Female Pin Header
1602 2004 LCD Adapter Plate IIC I2C Interface for arduino
ฟังก์ชั่นสั่งงานจอ LCD
lcd.begin(จำนวนตัวอักษรที่ใส่ได้ในแถว,จำนวนแถวทั้งหมด)

> ใช้กำหนดลักษณะหน้าจอ เช่น ถ้าจอเรามี 2แถว 16ตัวอักษร ให้ใส่ lcd.begin(16,2);

lcd.clear()

> ใช้ล้างหน้าจอ เมื่อมีตัวอักษรใดๆอยู่บนหน้าจอ จะถูกล้างออกทั้งหมด

lcd.home()

> ใช้ปรับให้เคเซอร์กลับไปอยู่ที่ตำแหน่งแรกด้านซ้าย เมื่อใช้คำสั่ง lcd.print() จะไปเริ่มแสดงผลทางด้านบนซ้าย

lcd.setCursor(ลำดับตัวอักษรนับจากทางซ้าย, บรรทัด)

> ใช้ตั้งค่าเคเซอร์ เช่น lcd.setCursor(2, 0); หมายถึงเซ็ตเคเซอร์ไปตัวอักษรที่ 2 นับจากทางซ้าย และอยู่บรรทัดแรก เมื่อใช้คำสั่ง lcd.print() ตัวอักษรตัวแรกจะอยู่ลำดับที่ 3 นับจากทางซ้าย

lcd.write(ข้อมูลที่ต้องการเขียนออกไป)

> ใช้สำหรับเขียนข้อมูลออกไปทีละตัวอักษร

lcd.print(ข้อมูลที่ต้องการให้เขียนออกไป [, รูปแบบข้อมูล])

> ใช้เขียนข้อมูลออกไปทั้งข้อความ

lcd.cursor()

> ใช้สั่งให้แสดงเคเซอร์บนหน้าจอ

lcd.noCursor()

> ใช้สั่งให้ไม่แสดงเคเซอร์บนหน้าจอ

lcd.display()

> แสดงตัวอักษรบนหน้าจอ

lcd.noDisplay()

> ปิดการแสดงตัวอักษรในหน้าจอ

lcd.scrollDisplayLeft()

> เลือนตัวอักษรไปทางซ้าย 1 ตัว

lcd.scrollDisplayRight()

> เลื่อนตัวอักษรไปทางขวา 1 ตัว

lcd.autoscroll()

> เลื่อนตัวอักษรไปทางขวาอัตโนมัติหากใช้คำสั่ง lcd.print() หรือ lcd.write() เมื่อตัวอักษรเต็มหน้าจอ

lcd.noAutoscroll()

> ปิดการเลื่อนตัวอักษรอัตโนมัติ

lcd.leftToRight()

> เมื่อใช้คำสั่ง lcd.print() หรือ lcd.write() ตัวอักษรจะเขียนจากซ้ายไปขวา

lcd.rightToLeft()

> เมื่อใช้คำสั่ง lcd.print() หรือ lcd.write() ตัวอักษรจะเขียนจากขวาไปซ้าย





ตัวอย่างโค๊ด 

#include <LiquidCrystal.h>// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12,11,5,4,3,2);
void setup(){// set up the LCD's number of columns and rows:
lcd.begin(16,2);// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop(){// set the cursor to column 0, line 1// (note: line 1 is the second row, since counting begins with0 ):
lcd.setCursor(0,1);// print the number of seconds since reset:
lcd.print(millis()/1000);
}

อ้างอิง

http://www.myarduino.net/product/19/1602-lcd-blue-screen-16x2-lcd-with-backlight-of-the-lcd-screen