วันอังคารที่ 10 กันยายน พ.ศ. 2562

งานที่5 Internet of Things (อ้างอิงhttps://www.aware.co.th/iot-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/)

 Internet of Things (IoT) คือ การที่อุปกรณ์อิเล็กทรอนิกส์ต่างๆ สามารถเชื่อมโยงหรือส่งข้อมูลถึงกันได้ด้วยอินเทอร์เน็ต โดยไม่ต้องป้อนข้อมูล การเชื่อมโยงนี้ง่ายจนทำให้เราสามารถสั่งการควบคุมการใช้งานอุปกรณ์อิเล็กทรอนิกส์ต่างๆ ผ่านทางเครือข่ายอินเตอร์เน็ตได้ ไปจนถึงการเชื่อมโยงการใช้งานอุปกรณ์อิเล็กทรอนิกส์ต่างๆ ผ่านทางเครือข่ายอินเตอร์เน็ตเข้ากับการใช้งานอื่นๆ จนเกิดเป็นบรรดา Smart ต่างๆ ได้แก่ Smart Device, Smart Grid, Smart Home, Smart Network, Smart Intelligent Transportation ทั้งหลายที่เราเคยได้ยินนั่นเอง ซึ่งแตกต่างจากในอดีตที่อุปกรณ์อิเล็กทรอนิกส์เป็นเพียงสื่อกลางในการส่งและแสดงข้อมูลเท่านั้น

กล่าวได้ว่า Internet of Things นี้ได้แก่การเชื่อมโยงของอุปกรณ์อัจฉริยะทั้งหลายผ่านอินเทอร์เน็ตที่เรานึกออก เช่น แอปพลิเคชัน แว่นตากูเกิลกลาส รองเท้าวิ่งที่สามารถเชื่อมต่อข้อมูลการวิ่ง ทั้งความเร็ว ระยะทาง สถานที่ และสถิติได้

นอกจากนั้น Cloud Storage หรือ บริการรับฝากไฟล์และประมวลผลข้อมูลของคุณผ่านทางออนไลน์ หรือเราเรียกอีกอย่างว่า แหล่งเก็บข้อมูลบนก้อนเมฆ เป็นอีกสิ่งหนึ่งที่เราใช้งานบ่อยๆแต่ไม่รู้ว่าเป็นหนึ่งในรูปแบบของ Internet of Things สมัยนี้ผู้ใช้นิยมเก็บข้อมูลไว้ในก้อนเมฆมากขึ้น เนื่องจากมีข้อดีหลายประการ คือ ไม่ต้องกลัวข้อมูลสูญหายหรือถูกโจรกรรม ทั้งยังสามารถกำหนดให้เป็นแบบส่วนตัวหรือสาธารณะก็ได้ เข้าถึงข้อมูลได้ทุกที่ทุกเวลาด้วยอุปกรณ์อิเล็กทรอนิกส์ใดๆผ่านเครือข่ายอินเตอร์เน็ต แถมยังมีพื้นที่ใช้สอยมาก มีให้เลือกหลากหลาย ช่วยเราประหยัดค่าใช้จ่ายได้อีกด้วย เนื่องจากเราไม่ต้องเสียเงินซื้ออุปกรณ์จัดเก็บข้อมูล เช่น ฮาร์ดไดร์ฟ หรือ Flash drive ต่างๆ

สรุป
Internet of Thing เป็นแนวความคิดที่ถูกพัฒนาขึ้นเพื่อเชื่อมต่อทุกสิ่งเข้าด้วยกัน เพื่อช่วยในการอำนวยความสะดวกให้กับมนุษย์ และลดการสูญเสียเวลาในการทำกิจกรรมต่างๆ เนื่องจากปัจจุบันเวลาถือเป็นสิ่งสำคัญยิ่ง แต่แนวคิดดังกล่าวหากไม่มีการควบคุมรักษาความปลอดภัยที่เพียงพอ ก็จะกลายเป็นช่องโหว่ให้มิจฉาชีพสามารถเข้าถึงความเป็นส่วนตัว และแนวทางการดำเนินของผู้ใช้ระบบได้ ซึ่งจะเป็นอันตรายต่อชีวิตและทรัพย์สินเป็นอย่างมาก

งานที่4 Augmented Reality (อ้างอิง https://www.scimath.org/article-technology/item/7755-ar-augmented-reality)

AR (Augmented Reality) เทคโนโลยีโลกเสมือนผสานโลกแห่งความจริง


           พฤติกรรมของผู้บริโภคในยุคดิจิทัล ที่มีสมาร์ทโฟนเป็นปัจจัยที่ 5 ของการใช้ชีวิต ทำให้ธุรกิจการค้าต้องปรับกลยุทธ์เชิงรุกในรูปแบบออนไลน์ ตามช่องทางโซเชียลมีเดีย โดยพัฒนาสื่อมัลติมีเดียดึงดูดความน่าสนใจ หลายคนคงจำเกมยอดฮิตอย่างโปเกมอนโก ที่นำเทคโนโลยี AR มาสร้าง จนทำให้คนติดเกมอย่างหนักกันพักใหญ่ทีเดียว เทคโนโลยีเสมือนจริง (AR) ได้ถูกรวมเข้าไปเป็นส่วนหนึ่งในกิจกรรมประจําวัน มีการนําไปประยุกต์ใช้อย่างแพร่หลายในด้านต่าง ๆ ทั้งด้านศิลปะ การแพทย์ การศึกษา และการพาณิชย์
7755 1
ภาพ เทคโนโลยี AR
ที่มา https://pixabay.com/th/
          คำว่า Augmented แปลว่าเพิ่มหรือเติม  ส่วน Reality แปลว่าความจริง   นั่นก็คือ เทคโนโลยีการผสมผสานโลกเสมือน (Virtual World) เพิ่มเข้าไปในโลกจริง (Physical World) เพื่อทำให้เกิดการกลมกลืนกันมากที่สุดจนแยกไม่ออก     
ความเป็นมาของ  AR
        เทคโนโลยีนี้ได้ถูกพัฒนามาตั้งแต่ปี ค.ศ. 2004 จัดเป็นแขนงหนึ่งของงานวิจัยด้านวิทยาการคอมพิวเตอร์ ว่าด้วยการเพิ่มภาพเสมือนของโมเดลสามมิติที่สร้างจากคอมพิวเตอร์ลงไปในภาพที่ถ่ายมาจากกล้องวิดีโอ กล้องเว็บแคม หรือกล้องในโทรศัพท์มือถือ แบบเฟรมต่อเฟรมด้วยเทคนิคทางด้านคอมพิวเตอร์กราฟิก แต่ด้วยข้อจำกัดทางเทคโนโลยีจึงมีการใช้ไม่แพร่หลายเท่าไหร่  แต่ปัจจุบันเทคโนโลยีมือถือ และการสื่อสารข้อมูลไร้สาย รวมทั้งการประมวลต่าง ๆ มีความรวดเร็วขึ้นและมีราคาถูก จึงทำให้อุปกรณ์สมาร์ทโฟน และแทบเล็ต ทำให้เทคโนโลยีที่อยู่แต่ในห้องทดลอง กลับกลายมาเป็นแอพที่สามารถดาวน์โหลดมาใช้งานกันง่าย ๆ ไปแล้ว  โดยในช่วง 2-3 ปีมานี้ AR เป็นเรื่องที่ถูกกล่าวถึงอยู่เป็นระยะ แม้จะไม่ฮอตฮิตเหมือนแอพตัวอื่น ๆ ก็ตาม  แต่อนาคตยังไปได้อีกไกล  ทั้ง VR และ AR สามารถนำมาประยุกต์ใช้งานได้กว้างขวางหลากหลาย ทั้งด้าน อุตสาหกรรม การทหาร การแพทย์ การตลาด การบันเทิง การสื่อสาร และ การศึกษา
Augmented Reality
         AR เป็นเทคโนโลยีใหม่ ที่ผสานเอาโลกแห่งความเป็นจริง (Real) เข้ากับโลกเสมือน (Virtual) โดยผ่านอุปกรณ์ทางด้านฮาร์ดแวร์รวมกับการใช้ซอฟต์แวร์ต่าง ๆ ทำให้สามารถมองเห็นภาพที่มีลักษณะเป็นวัตถุ (Object) แสดงผลในจอภาพกลายเป็นวัตถุ 3 มิติ ลอยอยู่เหนือพื้นผิวจริง มีการแสดงผลที่แสดงวัตถุมีการเคลื่อนไหว ดูมีมิติมีความตื่นเต้นเร้าใจ โดยสามารถนำรูปแบบใหม่ของการนำเสนอสินค้าลอยออกมานอกจอคอมพิวเตอร์ ซึ่งเป็นการนำเสนอรูปแบบใหม่ในโลกสังคมออนไลน์หรือการตลาดออนไลน์อีกทางหนึ่ง ว่ากันว่า นี่จะเป็นการเปลี่ยนแปลงโฉมหน้าสื่อยุคใหม่ พอๆ กับเมื่อครั้งเกิดอินเทอร์เน็ตขึ้นในโลกก็ว่าได้ หากเปรียบสื่อต่าง ๆ เสมือน “กล่อง” แล้ว AR คือการเด้งออกมาสู่โลกใหม่ภายนอกกล่องที่สร้างความตื่นเต้นเร้าใจ ในรูปแบบ Interactive Media โดยแท้จริง
          เทคโนโลยีเสมือนจริงนี้ มีหลักการทำงานโดยสามารถแบ่งประเภทตามส่วนวิเคราะห์ภาพ (Image Analysis) เป็น    2  ประเภท ได้แก่ การวิเคราะห์ภาพโดยอาศัย Marker เป็นหลักในการทํางาน (Marker based AR)   และการวิเคราะห์ภาพโดยใช้ลักษณะต่าง ๆ ที่อยู่ในภาพมาวิเคราะห์ (Marker-less based AR) หลักการของเทคโนโลยีเสมือนจริง ประกอบด้วย
  1. Marker (หรือที่เรียกว่า Markup)
  2. กล้องวิดีโอ เว็บแคม  กล้องโทรศัพท์มือถือ หรือ ตัวจับ Sensor อื่นๆ
  3. ส่วนการแสดงผลภาพ เช่นจอภาพจากอุปกรณ์แสดงผล
  4. ซอฟต์แวร์ส่วนประมวลผลเพื่อวัตถุแบบสามมิติ object 3D
พื้นฐานหลักของ AR  
        ใช้หลักการของการตรวจจับการเคลื่อนไหว (Motion Detection) การตรวจจับการเต้นหรือการเคาะ (Beat    Detection)  การจดจําเสียง   (Voice Recognize) และการประมวลผลภาพ (Image Processing) โดยนอกจากการตรวจจับการเคลื่อนไหวผ่าน Motion Detect  แล้ว การตอบสนองบางอย่างของระบบผ่านสื่อนั้น  ต้องมีการตรวจจับเสียงของผู้ใช้และประมวลผลด้วยหลักการ Beat    Detection เพื่อให้เกิดจังหวะในการสร้างทางเลือกแก่ระบบ เช่น    เสียงในการสั่งให้ตัว  Interactive Media ทํางาน
        ทั้งนี้การสั่งการด้วยเสียงจัดว่าเป็น  AR  และในส่วนของการประมวลผลภาพนั้น เป็นส่วนเสริม เพราะเน้นไปที่การทํางานของปัญญาประดิษฐ์ (Artificial Intelligent: AI)   ในการสื่ออารมณ์กับผู้ใช้บริการผ่านสีและรูปภาพ
        เทคโนโลยี AR นี้จะสามารถทำให้ผู้ใช้เห็นภาพเสมือนจริงได้รอบ โดยไม่จำเป็นจะต้องเดินทางไปสถานที่จริง หากในอนาคตเทคโนโลยีจะมีความก้าวหน้าเป็นอย่างไร สิ่งสำคัญที่สุดคือความก้าวหน้าของมนุษย์ก็ต้องพัฒนาควบคู่กันไปด้วย หากเรามีเทคโนโลยีที่ล้ำสมัยให้ใช้ แต่มนุษย์ไม่ได้เจริญตามเทคโนโลยีด้วย การดำรงชีวิตของมนุษย์ก็จะไม่เป็นปกติสุขได้เลย



Virtual reality หรือ VR ก็คือ เป็นการจำลองสภาพแวดล้อมจริงเข้าไปให้เสมือนจริง นั้นเอง โดยพยายามทำให้เหมือนจริงโดยผ่านการรับรู้ของเราไม่ว่าจะเป็น การมองเห็น เสียง การสัมผัส หรือแม้กระทั้งกลิ่น และทำให้เราสามารถตอบสนองกับสิ่งที่จำลองนั้นได้
ความแตกต่างของ VR และ AR นั้นก็คือ VR นั้นจะตัดขาดเราออกจากสถาพแวดล้อมปัจจุบันเพื่อเข้าไปสู่สภาพแวดล้อมที่จำลองขึ้นมาใหม่ทั้งหมด แต่ AR จะพยายามรวบรวมหรือผสานระหว่างสภาพแวดล้อมจริงๆ ณ ขณะนั้นเข้ากับวัตถุที่จำลองขึ้นมานั้นเอง
จะเห็นได้ว่าจากความแตกต่างระหว่าง VR และ AR ทำให้การนำไปประยุกต์ใช้งานนั้นแตกต่างกัน โดย VR นั้นจะเน้นที่ตัดขาดออกจากโลกจริงเข้าไปอยู่ในโลกเสมื่อนอย่างเต็มรูปแบบ ส่วน AR นั้นจะเน้นไปที่การผสานรวบรวมระหว่างวัตถุเสมือนรอบตัวเราเข้ากับสภาพแวดล้อมจริงๆ ณ ขณะนั้น นั้นเอง

งานที่3 Quantum Computing (อ้างอิง http://www.dv.co.th/blog-en/quantum-computing/)


Quantum Computing
ทุกวันนี้ คอมพิวเตอร์กลายเป็นเครื่องมืลักทั้งด้านการทำงานและความบันเทิงของหลายๆ คน แต่หากมองดีๆ จะพบว่า มันก็ไม่เพียงพอจะแก้ปัญหาต่างๆ โดยเฉพาะปัญหาขนาดใหญ่ที่ส่งผลกระทบต่อโลกทั้งใบ เช่นการประเมินสภาพอากาศเพื่อเตือนก่อนเกิดเหตุภัยพิบัติ หรือการจัดการจราจรซึ่งซับซ้อนขึ้นทุกวัน แม้คอมพิวเตอร์เร็วขึ้นทุกปีแต่ก็ยังตอบสนองไม่เพียงพอต่อการใช้งานของมนุษย์ ความต้องการเทคโนโลยีใหม่เข้ามา Disrupt จึงเกิดขึ้น วันนี้เราก็ขอชวนผู้อ่านมาทำความรู้จักกับคอมพิวเตอร์แห่งอนาคตที่เป็นความหวังใหม่ของมวลมนุษยชาติ โดยถูกพิสูจน์แล้วว่ามันเร็วกว่าคอมพิวเตอร์ปัจจุบันเป็นล้านเท่า ที่เรียกว่า “Quantum Computing”
Quantum Computing คืออะไร?
Quantum Computing ก็คือระบบคอมพิวเตอร์ที่เปลี่ยนจากการทำงานบนแผงวงจร มาใช้คุณสมบัติพิเศษของอะตอมแทน โดยจากเดิมที่คอมพิวเตอร์ปัจจุบันจะแทนค่าข้อมูลด้วย Bit อันประกอบด้วยตัวเลข 0 กับ 1 ทีละตัวแล้วนำไปประกอบกัน แต่ระบบ Quantum Computing จะใช้อะตอมที่มีคุณสมบัติของ Quantum Bit หรือ Qubit สามารถประมวลผลเป็นตัวเลข 0 หรือ 1 พร้อมกันได้
คุณสมบัติดังกล่าวทำให้แต่ละ Qubit ทำงานได้เร็วกว่า Bit อย่างมหาศาล นอกจากนี้ Qubit ยังสามารถสื่อสารกับอะตอมที่เป็น Qubit ด้วยกันได้โดยไม่ต้องผ่านสื่อกลาง ทำให้ Qubit สามารถประมวลผลร่วมกันได้ราบรื่นและรวดเร็ว รวมถึงรองรับงานแบบ Multitasking ได้ง่ายกว่า โดยเมื่อปี 2015 มีประกาศจาก Google ว่า Quantum Computer ที่พวกเขาพัฒนาขึ้น มีความเร็วมากกว่า PC ทั่วไปถึง 100 ล้านเท่า!!
แต่อย่างไรก็ตามระบบ Quantum Computing  ก็มีข้อจำกัดอยู่ เช่นตัว Qubit ที่มีขนาดเล็กกว่าอะตอมและเปราะบาง หากมีสิ่งรบกวนเพียงเล็กน้อย Qubit ดังกล่าวก็จะหายไปพร้อมข้อมูลภายใน อีกทั้งยังไม่พบวิธีการคัดลอก Qubit เพื่อสำรองข้อมูลโดยสมบูรณ์ ยังไม่นับเรื่องการเก็บรักษา Qubit ให้พร้อมใช้งานซึ่งต้องอยู่ในอุณหภูมิศูนย์สมบูรณ์หรือ -273.15 องศาเซลเซียส
Quantum Computing ทำอะไรได้บ้าง?
จริงๆ แล้วแนวคิดเรื่องการนำ Quantum มาใช้กับคอมพิวเตอร์ มีมาตั้งแต่ยุคปี 1980 แต่เนื่องจากมีความซับซ้อนทางฟิสิกส์ค่อนข้างสูงมาก รวมถึงต้องทำงานวิจัยในสภาพแวดล้อมที่เหมาะสม การวิจัยจึงยังอยู่ในวงจำกัด ต่อมาเมื่อเทคโนโลยีพัฒนาขึ้นระบบ Quantum Computing จึงได้รับการสานต่อโดยบริษัทไอทียักษ์ใหญ่และประเทศเศรษฐกิจชั้นนำ จนมีแนวโน้มว่าเราอาจจะได้ใช้คอมพิวเตอร์ที่ประมวลผลโดย Qubit ภายใน 10 ปีที่จะถึงนี้ และด้วยความเร็วมากกว่าคอมพิวเตอร์แบบดั้งเดิมที่เราใช้กันอย่างเทียบไม่ติด มันจึงเข้ามา Disrupt การใช้งานคอมพิวเตอร์ทุกวันนี้เปลี่ยนไป ลองมาดูตัวอย่างการนำระบบ Quantum Computing ไปใช้ในด้านต่างๆ
  • พลิกรูปแบบ Online Security - ปัจจุบัน ระบบ Online Security จะทำงานด้วยการเข้ารหัสจำนวนมาก แน่นอนว่า Quantum Computing สามารถถอดรหัสทั้งหมดได้อย่างง่ายดาย แต่หากว่าเรานำ Quantum Computing มาเป็นเครื่องประมวลผลรหัสแทนก็อาจจะได้แม่กุญแจและกุญแจที่แข็งแรงกว่าที่เคย
  • ลับสมองให้ AI - พลังประมวลผลอันรวดเร็วจากระบบ Quantum Computing ที่สามารถเร่งกระบวนการเรียนรู้ของ AI หรือปัญญาประดิษฐ์ให้เร็วกว่าที่เป็นอยู่ได้ ทำให้ AI ถูกพัฒนาเพื่อแก้ปัญหาเฉพาะหน้าได้ดียิ่งขึ้น
  • ทดลองทางเคมีเพื่อพัฒนายารักษาโรค - การสร้างยารักษาโรคแต่ละชนิดต้องอาศัยการคำนวณอันละเอียดและแม่นยำ Quantum Computing ไม่เพียงแต่ทำได้รวดเร็ว แต่ยังสามารถคำนวณค่าต่างๆ พร้อมกัน อีกทั้งในอนาคตการออกแบบยารักษาโรคจะลงลึกไปถึงในระดับวิเคราะห์ DNA เพื่อผลิตยาที่เหมาะกับแต่ละคน ประสิทธิภาพของเทคโนโลยี Qubit สามารถตอบโจทย์ทั้งด้านความแม่นยำและเวลาเพื่อรักษาอาการเจ็บป่วยได้ทันท่วงที
  • พัฒนาการพยากรณ์อากาศให้แม่นยำยิ่งขึ้น - ภัยพิบัติทางธรรมชาติก่อความเสียหายแก่ชีวิตและทรัพย์สินมากมาย แต่ด้วยเครื่องมือปัจจุบัน การพยากรณ์อากาศแทบจะเป็นเกมเดาสุ่ม แม้เราจะมีความรู้แต่การคำนวณของเรากลับไม่รวดเร็วพอที่จะป้องกันเหตุได้ เราจึงจำเป็นต้องใช้ประสิทธิภาพของ Quantum Computing เพื่อปรับปรุงการคาดการณ์ให้แม่นยำยิ่งขึ้น โดยปัจจุบัน หน่วยงานพยากรณ์อากาศแห่งชาติของสหราชอาณาจักรได้นำเทคโนโลยี Quantum Computing มาใช้เพื่อจำลองแนวโน้มสภาพอากาศในปัจจุบัน ทำให้เรามีข้อมูลมากพอจะคาดเดาอากาศได้แม่นยำขึ้น
  • ช่วยจัดการคมนาคมให้ใช้ได้เต็มประสิทธิภาพ - ไม่ว่าจะบนฟ้า บนพื้นดิน หรือบนผิวน้ำ ความเร็วของ ระบบ Quantum Computing สามารถนำมาใช้ประเมินเส้นทางให้เราเดินทางได้ประสิทธิภาพสูงสุด ช่วยประหยัดเวลา ลดค่าใช้จ่าย เพิ่มความปลอดภัยให้ผู้ใช้ทางบนวิถีการจราจรอันซับซ้อนขึ้นทุกวัน

งานที่2 Blockchain technology. (อ้างอิง https://medium.com/kiptopotamus/blockchain-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3-%E0%B8%89%E0%B8%9A%E0%B8%B1%E0%B8%9A%E0%B9%80%E0%B8%94%E0%B9%87%E0%B8%81%E0%B9%81%E0%B8%9B%E0%B8%94%E0%B8%82%E0%B8%A7%E0%B8%9A%E0%B8%81%E0%B9%87%E0%B9%80%E0%B8%82%E0%B9%89%E0%B8%B2%E0%B9%83%E0%B8%88-%E0%B8%A1%E0%B8%B1%E0%B9%89%E0%B8%87-60c69f6abf78)




Blockchain คือโครงสร้างข้อมูล (Data structure)

ตัวอย่างโครงสร้างข้อมูลในชีวิตประจำวันเช่น
  • สมุดพก คือโครงสร้างข้อมูลที่ไว้เก็บผลการเรียน
  • สมุดบัญชีก็คือโครงสร้างข้อมูลเอาไว้เก็บข้อมูลฝาก-ถอนในบัญชีธนาคารของเรา
  • สมุดสะสมแต้ม เอาไว้เก็บแสตมป์ที่ได้จากเซเว่น
ตัวอย่างข้างต้นเป็นตัวอย่างที่เราพบเห็นได้ในชีวิตประจำวัน ซึ่งก็เป็นโครงสร้างข้อมูลแบบง่ายๆ ที่เราอาจจะทำเลียนแบบได้ในโปรแกรม excel ซึ่งเป็นลักษณะของโครงสร้างข้อมูลแบบตาราง
สำหรับตัวอย่างโครงสร้างข้อมูลแบบ Blockchain เราอาจจะนึกแบบเรียน หรือหนังสืออะไรก็ได้ที่มีเลขหน้า ใช่ครับ หนังสือนี่แหละคือตัวอย่างโครงสร้างข้อมูลแบบ Blockchain แต่ละหน้าก็มีข้อมูลของตัวเองเป็น Block ส่วนเลขหน้าทำให้เรารู้ว่าหน้าก่อนหน้าคือหน้าอะไร หน้าถัดไปคือหน้าอะไร เชื่อมต่อกันเป็นสาย (chain)
แถมสำหรับโปรแกรมเมอร์ ลองดูตัวอย่างข้อมูลด้านล่างนี้ ส่วนที่อยู่ใน result ก็คือตัว data ที่เราสนใจ สำหรับส่วนหัวก็คือ link ที่จะเชื่อมไปหา block ก่อนหน้าและ block ถัดไป
{
 "count": 12,
 "next": https://example.com/abc/?pages=3,
 "previous": https://example.com/abc/?pages=1,
 "results": [
    ... data ...
 ]
}



วันจันทร์ที่ 9 กันยายน พ.ศ. 2562

งานที่1 Artificial Intelligence. (อ้างอิง https://contentshifu.com/artificial-intelligence-ai-marketers/)

Artificial Intelligence หรือ (AI) 

Artificial Intelligence (AI) หรือในภาษาไทยเราก็คือ ปัญญาประดิษฐ์ ถือเป็นเรื่องที่กำลังได้รับความสนใจสูงมากจากผู้คนทั่วโลก โดยเฉพาะบริษัทเทคโนโลยียักษ์ใหญ่ไม่ว่าจะเป็น Microsoft, Google, Facebook, Amazon หรือ Apple ต่างก็ให้ความสนใจนำปัญญาประดิษฐ์นี้มาใช้ในกลยุทธ์การขายและการตลาดกันอย่างดุเดือด
AI เป็นสาขาวิชาวิทยาการคอมพิวเตอร์ที่ผู้เชี่ยวชาญและนักวิจัยต่างโหมกระหน่ำพยายามทำให้มัน Intelligent (ฉลาด) มากขึ้นๆ จนถึงขนาดมีการนำไปทำภาพยนตร์ว่า AI จะครองโลก และมนุษย์จะไม่สามารถควบคุมมันได้ เพราะเราทำให้มันซุปเปอร์ฉลาดยิ่งกว่าความสามารถของมนุษย์น่ะซิ
ระยะหลังนี้เราจะได้ยินเรื่องราวของ AI กันจนก้นร้อน ต้องรีบตามเทรนด์ให้ทันว่ามันเกี่ยวอะไรกับฉันหว่า ถึงคุณจะไม่อยากเกี่ยวกับมัน แต่มันมาเกี่ยวกับคุณแล้วล่ะ ไม่ว่าจะเป็นทางด้านอุตสาหกรรมเทคโนโลยี ด้านการผลิต ด้านการแพทย์ และอีกหลายๆ ด้าน แม้กระทั่งด้านการตลาด การขาย และการบริการลูกค้า
จะเห็นได้ว่าในช่วงต้นๆ การวิจัยและพัฒนา AI จะใช้ในด้านคณิตศาสตร์, เกมส์, วิทยาศาตร์คอมพิวเตอร์ เป็นหลัก แต่ก็มีการทำวิจัยมาเรื่อยๆ ในความพยายามให้มันฉลาดมากขึ้น, ประมวลผลได้แม่นยำขึ้นและมีความสามารถเท่าเทียมมนุษย์ โดยแบ่งออกเป็น 4 แนวคิด
1. ระบบที่คิดเหมือนมนุษย์ (Systems that think like humans)
2. ระบบที่กระทำเหมือนมนุษย์ (Systems that act like humans)
3. ระบบที่คิดอย่างมีเหตุผล (Systems that think rationally)
4. ระบบที่กระทำอย่างมีเหตุผล (System that act rationally)
อ้างอิง

วันพุธที่ 20 มีนาคม พ.ศ. 2562

มินิโปรเจค


           มินิโปรเจค พัดลมระบายอากาศอัตโนมัติ




void main()
    {

   TRISB=0b00000001;
   PORTB=0b00000001;

 
 
   while(1){
         if(PORTB.F0==0)
         {
          while(1){
         PORTB=0b00100000;
           delay_ms(6000);
           PORTB=0b11000000;
          delay_ms(6000);
          PORTB=0b00100000;
          }
         }


}
    }




วันศุกร์ที่ 8 กุมภาพันธ์ พ.ศ. 2562

pic20

Generating PWM using PIC Microcontroller with MPLAB and XC8

EMBEDDED
ByAswinth Raj 35
Generating PWM using PIC Microcontroller with MPLAB and XC8Generating PWM using PIC Microcontroller with MPLAB and XC8
This is our 10th tutorial of Learning PIC microcontrollers using MPLAB and XC8. Till now, we have covered many basic tutorials like  LED blinking with PICTimers in PICinterfacing LCDinterfacing 7-segmentADC using PIC etc. If you are an absolute beginner, then please visit the complete list of PIC tutorials here and start learning.
In this tutorial, we will learn How to generate PWM signals using PIC PIC16F877A. Our PIC MCU has a special module called Compare Capture module (CCP) which can be used to generate PWM signals. Here, we will generate a PWM of 5 kHz with a variable duty cycle from 0% to 100%. To vary the duty cycle we are using a potentiometer, hence it is recommended to learn ADC tutorial before starting with PWM. PWM module also uses timers to set its frequency hence learn how to use timers beforehand here.  Further, in this tutorial we will use a RC circuit and a LED to convert the PWM values to Analog voltage and use it for dimming the LED light.

What is a PWM Signal?

Pulse Width Modulation (PWM) is a digital signal which is most commonly used in control circuitry. This signal is set high (5v) and low (0v) in a predefined time and speed. The time during which the signal stays high is called the “on time” and the time during which the signal stays low is called the “off time”.  There are two important parameters for a PWM as discussed below:
Duty cycle of the PWM:
The percentage of time in which the PWM signal remains HIGH (on time) is called as duty cycle. If the signal is always ON it is in 100% duty cycle and if it is always off it is 0% duty cycle.
Duty Cycle =Turn ON time/ (Turn ON time + Turn OFF time)
pulse-width-modulation-duty-cycle

Frequency of a PWM:
The frequency of a PWM signal determines how fast a PWM completes one period. One Period is complete ON and OFF of a PWM signal as shown in the above figure. In our tutorial we will set a frequency of 5KHz.

PWM using PIC16F877A:

PWM signals can be generated in our PIC Microcontroller by using the CCP (Compare Capture PWM) module. The resolution of our PWM signal is 10-bit, that is for a value of 0  there will be a duty cycle of 0% and for a value of 1024 (2^10) there be a duty cycle of 100%. There are two CCP modules in our PIC MCU (CCP1 And CCP2), this means we can generate two PWM signals on two different pins (pin 17 and 16) simultaneously, in our tutorial we are using CCP1 to generate PWM signals on pin 17.
The following registers are used to generate PWM signals using our PIC MCU:
  1. CCP1CON  (CCP1 control Register)
  2. T2CON (Timer 2 Control Register)
  3. PR2  (Timer 2 modules Period Register)
  4. CCPR1L (CCP Register 1 Low)

Programming PIC to generate PWM signals:

In our program we will read an Analog voltage of 0-5v from a potentiometer and map it to 0-1024 using our ADC module. Then we generate a PWM signal with frequency 5000Hz and vary its duty cycle based on the input Analog voltage. That is 0-1024 will be converted to 0%-100% Duty cycle. This tutorial assumes that you have already learnt to use ADC in PIC if not, read it from here, because we will skip details about it in this tutorial.
So, once the configuration bits are set and program is written to read an Analog value, we can proceed with PWM.
The following steps should be taken when configuring the CCP module for PWM operation:
  1. Set the PWM period by writing to the PR2 register.
  2. Set the PWM duty cycle by writing to the CCPR1L register and CCP1CON<5:4> bits.
  3. Make the CCP1 pin an output by clearing the TRISC<2> bit.
  4. Set the TMR2 prescale value and enable Timer2 by writing to T2CON.
  5. Configure the CCP1 module for PWM operation.
There are two important functions in this program to generate PWM signals. One is the PWM_Initialize() function which will initialize the registers required to set up PWM module and then set the frequency at which the PWM should operate, the other function is the PWM_Duty() function which will set the duty cycle of the PWM signal in the required registers.
PWM_Initialize()
{
  PR2 = (_XTAL_FREQ/(PWM_freq*4*TMR2PRESCALE)) - 1; //Setting the PR2 formulae using Datasheet // Makes the PWM work in 5KHZ
    CCP1M3 = 1; CCP1M2 = 1;  //Configure the CCP1 module 
    T2CKPS0 = 1;T2CKPS1 = 0; TMR2ON = 1; //Configure the Timer module
    TRISC2 = 0; // make port pin on C as output
}

The above function is the PWM initialize function, in this function The CCP1 module is set to use PWM by making the bit CCP1M3 and CCP1M2 as high.
CCP-register-in-PIC-Microcontroller

The timer module’s prescaler is set by making the bit T2CKPS0 as high and T2CKPS1 as low the bit TMR2ON is set to start the timer.
timer-register-in-PIC-Microcontroller

Now, we have to set the Frequency of the PWM signal. The value of the frequency has to be written to the PR2 register.  The desired frequency can be set by using the below formulae
PWM Period = [(PR2) + 1] * 4 * TOSC * (TMR2 Prescale Value)
Rearranging these formulae to get PR2 will give
PR2 = (Period / (4 * Tosc * TMR2 Prescale )) - 1
We know that Period = (1/PWM_freq) and Tosc = (1/_XTAL_FREQ). Therefore.....
PR2 = (_XTAL_FREQ/ (PWM_freq*4*TMR2PRESCALE)) – 1;
Once the frequency is set this function need not be called again unless and until we need to change the frequency again. In our tutorial I have assigned PWM_freq = 5000; so that we can get a 5 KHz operating frequency for our PWM signal.

Now let us set the duty cycle of the PWM by using the below function
PWM_Duty(unsigned int duty)
{
      if(duty<1023)
  {

    duty = ((float)duty/1023)*(_XTAL_FREQ/(PWM_freq*TMR2PRESCALE)); // On reducing //duty = (((float)duty/1023)*(1/PWM_freq)) / ((1/_XTAL_FREQ) * TMR2PRESCALE);
    CCP1X = duty & 1; //Store the 1st bit
    CCP1Y = duty & 2; //Store the 0th bit
    CCPR1L = duty>>2;// Store the remining 8 bit
  }
}
Our PWM signal has 10-bit resolution hence this value cannot be stored in a single register since our PIC has only 8-bit data lines. So we have use to other two bits of CCP1CON<5:4> (CCP1X and CCP1Y) to store the last two LSB and then store the remaining 8 bits in the CCPR1L Register.
The PWM duty cycle time can be calculated by using the below formulae:
PWM Duty Cycle = (CCPRIL:CCP1CON<5:4>) * Tosc * (TMR2 Prescale Value)
Rearranging these formulae to get value of CCPR1L and CCP1CON will give:
CCPRIL:CCP1Con<5:4> = PWM Duty Cycle / (Tosc * TMR2 Prescale Value)

The value of our ADC will be 0-1024 we need that to be in 0%-100% hence, PWM Duty Cycle = duty/1023. Further to convert this duty cycle into a period of time we have to multiply it with the period (1/ PWM_freq)
We also know that Tosc = (1/PWM_freq), hence..
Duty = ( ( (float)duty/1023) * (1/PWM_freq) ) / ( (1/_XTAL_FREQ) * TMR2PRESCALE) ;
Resolving the above equation will give us:
Duty = ( (float)duty/1023) * (_XTAL_FREQ / (PWM_freq*TMR2PRESCALE));

You can check the complete program in the Code section below along with the detailed Video.

Schematics and Testing:

As usual let us verify the output using Proteus simulation. The Circuit Diagram is shown below.
 PWM-with-PIC-Microcontroller-MPLAB-XC8-circuit-diagram
Connect a potentiometer to 7th pin to feed in a voltage of 0-5. CCP1 module is with pin 17 (RC2), here the PWM will be generated which can be verified using the Digital oscilloscope. Further to convert this into a variable voltage we have used a RC-filter and an LED to verify the output without a scope.

What is a RC-Filter?
An RC filter or a Low pass filter is a simple circuit with two passive elements namely the resistor and the capacitor. These two components are used to filter the frequency of our PWM signal and make it a variable DC voltage.
If we examine the circuit, when a variable voltage is applied to the input of R, the capacitor C will begin to charge. Now based on the value of the capacitor, the capacitor will take some time to get  fully charged, once charged it will block the DC current (Remember capacitors block DC but allows AC) hence the input DC voltage will appear across the output. The high frequency PWM (AC signal) will be grounded through the capacitor. Thus a pure DC is obtained across the capacitor. A value of 1000Ohm and 1uf was found to be appropriate for this project.  Calculating the values of R and C involves circuit analysis using transfer function, which is out of scope of this tutorial.
RC-low-pass-filter
The output of the program can be verified using the Digital Oscilloscope as shown below, vary the Potentiometer and the Duty cycle of the PWM should change. We can also notice the output voltage of the RC circuit using the Voltmeter. If everything is working as expected we can proceed with our hardware. Further check the Video at the end for full process.
PWM-with-PIC-Microcontroller-simulation

Working on Hardware:

The hardware setup of the project is very simple, we are just going to reuse our PIC Perf board shown below.
PERF-baord-for-PIC-Microcontroller-tutorials

We will also need a potentiometer to feed in the analog voltage, I have attached some female end wires to my pot (shown below) so that we can directly connect them to the PIC Perf board.
Potentiometer-for-PWM-with-PIC-Microcontroller PWM-with-PIC-Microcontroller-PerfBoard

Finally to verify the output we need a RC circuit and a LED to see how the PWM signal works, I have simply used a small perf board and soldered the RC circuit and the LED (to control brightness) on to it as shown below
PWM-with-PIC-Microcontroller-LED-baord
We can use simple female to female connecting wires and connect them according to the schematics shown above. Once the connection is done, upload the program to the PIC using our pickit3 and you should be able to get a variable voltage based on the input of your potentiometer. The variable output is used to control the brightness of the LED here.
I used my multimeter to measure the variable outputs, we can also notice the brightness of the LED getting changed for different voltage levels.
PWM-with-PIC-Microcontroller-demo-with-multimeter
That’s it we have programmed to read the Analog voltage from the POT and convert into PWM signals which in turn have been converted into Variable voltage using RC filter and the result is verified using our hardware. If you have some doubt or get stuck somewhere kindly use the comment section below, we will be happy to help you out. The complete working is working in the video.
Also check our other PWM Tutorials on other microcontrollers:
Code
// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
#define _XTAL_FREQ 20000000
#define TMR2PRESCALE 4
#include <xc.h>
long PWM_freq = 5000;
PWM_Initialize()
{
  PR2 = (_XTAL_FREQ/(PWM_freq*4*TMR2PRESCALE)) - 1; //Setting the PR2 formulae using Datasheet // Makes the PWM work in 5KHZ
    CCP1M3 = 1; CCP1M2 = 1;  //Configure the CCP1 module 
    T2CKPS0 = 1;T2CKPS1 = 0; TMR2ON = 1; //Configure the Timer module
    TRISC2 = 0; // make port pin on C as output
}
PWM_Duty(unsigned int duty)
{
      if(duty<1023)
  {
    duty = ((float)duty/1023)*(_XTAL_FREQ/(PWM_freq*TMR2PRESCALE)); // On reducing //duty = (((float)duty/1023)*(1/PWM_freq)) / ((1/_XTAL_FREQ) * TMR2PRESCALE);
    CCP1X = duty & 1; //Store the 1st bit
    CCP1Y = duty & 2; //Store the 0th bit
    CCPR1L = duty>>2;// Store the remining 8 bit
  }
}
void ADC_Initialize()
{
  ADCON0 = 0b01000001; //ADC ON and Fosc/16 is selected
  ADCON1 = 0b11000000; // Internal reference voltage is selected
}
unsigned int ADC_Read(unsigned char channel)
{
  ADCON0 &= 0x11000101; //Clearing the Channel Selection Bits
  ADCON0 |= channel<<3; //Setting the required Bits
  __delay_ms(2); //Acquisition time to charge hold capacitor
  GO_nDONE = 1; //Initializes A/D Conversion
  while(GO_nDONE); //Wait for A/D Conversion to complete
  return ((ADRESH<<8)+ADRESL); //Returns Result
}
void main()
{
    int adc_value;
  TRISC = 0x00; //PORTC as output
  TRISA = 0xFF; //PORTA as input
  TRISD = 0x00;
  ADC_Initialize(); //Initializes ADC Module
  PWM_Initialize();  //This sets the PWM frequency of PWM1
  do
  {
    adc_value = ADC_Read(4); //Reading Analog Channel 0 
    PWM_Duty(adc_value);
    
      __delay_ms(50); 
      
  }while(1); //Infinite Loop
  
}
Video

pic19



ถ่ายทอดการเชื่อมต่อกับไมโครคอนโทรลเลอร์ PIC

ที่ฝัง
โดยSourav Gupta 2
ถ่ายทอดการเชื่อมต่อกับ PIC Micro-controllerถ่ายทอดการเชื่อมต่อกับ PIC Micro-controller
ในโครงการนี้เราจะอินเตอร์เฟซRelay กับไมโครคอนโทรลเลอร์ PIC PIC16F877A รีเลย์เป็นอุปกรณ์ทางกลเพื่อควบคุมแรงดันไฟฟ้าสูง, เครื่องใช้ไฟฟ้าในปัจจุบันสูง ' เปิด ' หรือ ' ปิด ' จากระดับแรงดันไฟฟ้าที่ต่ำกว่า รีเลย์ให้แยกระหว่างสองระดับแรงดันไฟฟ้าและมันก็เป็นเรื่องปกติที่ใช้ในการควบคุมอุปกรณ์ไฟฟ้ากระแสสลับ ตั้งแต่รีเลย์เชิงกลถึงโซลิดสเตตมีรีเลย์หลายแบบให้เลือกในอุปกรณ์อิเล็กทรอนิกส์ ในโครงการนี้เราจะใช้รีเลย์เชิงกล
ในโครงการนี้เราจะทำสิ่งต่อไปนี้ -
  1. เราจะเชื่อมต่อสวิตช์สำหรับอินพุตจากผู้ใช้
  2. ควบคุมหลอดไฟ AC 220Vพร้อมรีเลย์ 5V
  3. เพื่อควบคุมการถ่ายทอดเราจะใช้ BC547 ทรานซิสเตอร์ NPN และทรานซิสเตอร์จะถูกควบคุมจากPIC16F877A ไฟ LED จะแจ้งให้ทราบสภาพการเปิดหรือปิดรีเลย์
ถ้าคุณยังใหม่กับไมโครคอนโทรลเลอร์ PIC แล้วเริ่มต้นด้วยการเริ่มต้นกับไมโครคอนโทรลเลอร์ PIC

องค์ประกอบที่ต้องการ:

  1. PIC16F877A
  2. คริสตัล 20MHz
  3. 2 ชิ้น 33pF เซรามิก
  4. ตัวต้านทาน 4.7k 3 ตัว
  5. ตัวต้านทาน 1k
  6. 1 LED
  7. BC547 ทรานซิสเตอร์
  8. 1N4007 ไดโอด
  9. 5V รีเลย์ลูกบาศก์
  10. หลอดไฟ AC
  11. เขียงหั่นขนม
  12. สายสำหรับเชื่อมต่อชิ้นส่วน
  13. อะแดปเตอร์ 5V หรือแหล่งจ่ายไฟ 5V ใด ๆ ที่มีความสามารถอย่างน้อย 200mA ในปัจจุบัน

รีเลย์และการทำงาน:

รีเลย์ทำงานเหมือนสวิตช์ทั่วไป รีเลย์กลใช้แม่เหล็กชั่วคราวที่ทำจากขดลวดแม่เหล็กไฟฟ้า เมื่อเราให้กระแสไฟฟ้าผ่านขดลวดนี้มากพอมันก็กลายเป็นพลังงานและดึงแขน เนื่องจากวงจรที่เชื่อมต่อข้ามรีเลย์สามารถปิดหรือเปิดได้ อินพุทและเอาท์พุทไม่มีการเชื่อมต่อทางไฟฟ้าใด ๆ ดังนั้นจึงแยกอินพุทและเอาท์พุท เรียนรู้เพิ่มเติมเกี่ยวกับการถ่ายทอดและการก่อสร้างของที่นี่
รีเลย์สามารถพบได้ในช่วงแรงดันไฟฟ้าที่แตกต่างกันเช่น5V, 6V, 12V, 18Vเป็นต้นในโครงการนี้เราจะใช้รีเลย์ 5Vเนื่องจากแรงดันใช้งานของเราคือ5 โวลต์ที่นี่ นี้5V ลูกบาศก์ถ่ายทอดความสามารถในการสลับ7Aโหลดที่240VACหรือ10Aโหลดที่110VAC อย่างไรก็ตามแทนที่จะโหลดขนาดใหญ่เราจะใช้หลอดไฟ 220VACและเปลี่ยนมันโดยใช้รีเลย์
นี่คือรีเลย์ 5V ที่เราใช้ในโครงการนี้ การให้คะแนนในปัจจุบันมีการระบุไว้อย่างชัดเจนสำหรับสองระดับแรงดันไฟฟ้า10A ที่ 120VACและ7A ที่ 240VAC เราจำเป็นต้องเชื่อมต่อโหลดข้ามรีเลย์น้อยกว่าคะแนนที่ระบุ
KT-603 5V รีเลย์5V รีเลย์แบบลูกบาศก์

การถ่ายทอดนี้มีขา ถ้าเราเห็นข้อผิดพลาดเราสามารถเห็น -
KT-603 5V รีเลย์พินท์

L1และL2เป็นขาขดลวดแม่เหล็กไฟฟ้าภายใน เราต้องควบคุมสองพินเหล่านี้เพื่อเปิดรีเลย์ ' เปิด ' หรือ ' ปิด ' ถัดไปสามหมุดเป็นเสา NOและNC ขั้วต่อเชื่อมกับแผ่นโลหะภายในซึ่งจะเปลี่ยนการเชื่อมต่อเมื่อรีเลย์เปิด ในสภาพปกติPOLEเป็น shorted กับNC NCยืนสำหรับการเชื่อมต่อได้ตามปกติ เมื่อรีเลย์เปิดเสาเปลี่ยนตำแหน่งและกลายเป็นที่เชื่อมต่อกับNO NOย่อมาจากปกติ เปิด
ในวงจรของเราเราได้ทำการเชื่อมต่อรีเลย์กับทรานซิสเตอร์และไดโอด รีเลย์พร้อมทรานซิสเตอร์และไดโอดมีวางจำหน่ายในตลาดเป็นโมดูลรีเลย์ดังนั้นเมื่อคุณใช้รีเลย์โมดูลคุณไม่จำเป็นต้องเชื่อมต่อวงจรไดรเวอร์ (ทรานซิสเตอร์และไดโอด)
KT-603 5V โมดูลรีเลย์

รีเลย์ถูกใช้ในโครงการ Home Automation ทั้งหมดเพื่อควบคุมเครื่องใช้ไฟฟ้าภายในบ้าน


แผนภูมิวงจรรวม:

วงจรที่สมบูรณ์สำหรับการเชื่อมต่อรีเลย์ด้วย PIC ไมโครคอนโทรลเลอร์ได้รับด้านล่าง:
 วงจรไดอะแกรมสำหรับรีเลย์อินเทอร์เฟซพร้อม PIC Micro-controller

ในแผนผังดังกล่าวข้างต้นpic16F877Aถูกนำมาใช้ซึ่งในพอร์ต B LEDและทรานซิสเตอร์มีการเชื่อมต่อซึ่งถูกควบคุมเพิ่มเติมได้โดยใช้สวิทช์ TACที่RBO R1ให้อคติปัจจุบันทรานซิสเตอร์ R2เป็นตัวต้านทานแบบดึงลงที่ใช้กับสวิทช์สัมผัส มันจะให้ตรรกะ 0เมื่อไม่ได้กดสวิทช์1N4007เป็นไดโอดยึดที่ใช้สำหรับขดลวดแม่เหล็กไฟฟ้ารีเลย์ของ เมื่อรีเลย์ปิดการทำงานจะมีโอกาสเกิดแรงดันไฟฟ้าสูงและไดโอดจะหยุดการทำงาน ทรานซิสเตอร์จำเป็นสำหรับการขับรีเลย์เนื่องจากต้องการกระแสมากกว่า50mAซึ่งไมโครคอนโทรลเลอร์ไม่สามารถให้ได้นอกจากนี้เรายังสามารถใช้ULN2003แทนทรานซิสเตอร์มันเป็นทางเลือกที่ฉลาดถ้ามากกว่าสองหรือสามรีเลย์ที่จำเป็นสำหรับการประยุกต์ใช้ให้ตรวจสอบวงจรโมดูลRelay LEDทั่วพอร์ต RB2จะแจ้งให้ทราบ“ ถ่ายทอดอยู่บน

วงจรสุดท้ายจะมีลักษณะเช่นนี้ -
ฮาร์ดแวร์วงจรสำหรับการเชื่อมต่อระหว่างกันกับ PIC ไมโครคอนโทรลเลอร์

คุณสามารถเรียนรู้การควบคุมรีเลย์กับ Arduino ที่นี่และถ้าคุณสนใจจริงๆในการถ่ายทอดจากนั้นตรวจสอบทุกวงจรรีเลย์ที่นี่

คำอธิบายรหัส:

ที่จุดเริ่มต้นของmain.cไฟล์เราเพิ่มสายการกำหนดค่าสำหรับpic16F877Aและกำหนดชื่อพิทั่วPORTB
เช่นเคยก่อนอื่นเราต้อง  ตั้งค่าบิตการกำหนดค่าในไมโครคอนโทรลเลอร์ picกำหนดมาโครบางตัวรวมถึงไลบรารี่และความถี่คริสตัล คุณสามารถตรวจสอบรหัสสำหรับทุกคนในรหัสที่สมบูรณ์ได้รับในตอนท้าย เราได้ทำให้RB0เป็นอินพุท ในพินนี้สวิตช์เชื่อมต่ออยู่
#include <xc.h> 
/ * 
คำจำกัดความที่เกี่ยวข้องกับฮาร์ดแวร์
* / 
#define _XTAL_FREQ 200000000 // ความถี่คริสตัลที่ใช้ในการหน่วงเวลา
#define SW PORTBbits.RB0 
# กำหนด PORTBbits.RB1 
# กำหนดนิยาม PORTBbits.RB1 #

หลังจากนั้นเราเรียกว่า system_init () ฟังก์ชั่นที่เราเริ่มต้นทิศทางของพินและกำหนดค่าสถานะเริ่มต้นของพิน
ในฟังก์ชั่น system_init () เราจะเห็น
เป็นโมฆะ system_init (เป็นโมฆะ) { 
    TRISBbits.TRISB0 = 1; // การตั้งค่า Sw เป็นอินพุต
    TRISBbits.TRISB1 = 0; // การตั้งค่า LED เป็นเอาต์พุต
    TRISBbits.TRISB2 = 0; // การตั้งค่า pin relay เป็น
    LED 
output = 0;     RELAY = 0; 
    }

ในฟังก์ชั่นหลักเราทำการตรวจสอบการกดสวิตช์อย่างต่อเนื่องหากเราตรวจจับการกดสวิตช์โดยการตรวจจับตรรกะสูงทั่วRB0 ; เรารอสักครู่และดูว่าสวิตช์ยังกดอยู่หรือไม่ถ้าสวิตช์ยังกดอยู่เราจะสลับสถานะ RELAY และ LED ของขา
เป็นโมฆะ main (void) { 
    system_init (); // ระบบเตรียมพร้อม     
    ในขณะที่ (1) { 
        ถ้า (SW == 1) {// สวิตช์ถูกกด
            __delay_ms (50); // debounce delay 
            ถ้า (SW == 1) {// สวิตช์ยังคงกด
                LED =! LED; // การกลับสถานะหมุด 
                RELAY =! RELAY; 
            } 
        } 
     } 
    return; 
    }

รหัสที่สมบูรณ์และวิดีโอสาธิตสำหรับการเชื่อมต่อรีเลย์นี้ได้รับด้านล่าง
รหัส
/ * 
 * ไฟล์: main.c 
 * ผู้แต่ง: Sourav Gupta 
 * โดย: - circuitdigest.com 
 * สร้างเมื่อ 30 พฤษภาคม 2018, 2:26 PM 
 * /
// PIC16F877A การตั้งค่าบิตการกำหนดค่า
// คำสั่งการกำหนดค่าบรรทัดซอร์ส 'C'
// CONFIG 
#pragma config FOSC = HS // บิตการเลือก Oscillator (HS oscillator) 
#pragma config WDTE = OFF // ตัวจับเวลา Watchdog เปิดใช้งานบิต (ปิดใช้งาน WDT) 
#pragma config PWRTE = OFF // ตัวจับเวลาเปิดใช้งานบิต (PWRT) ปิดใช้งาน) 
#pragma config BOREN = ON // รีเซ็ต Brown-out เปิดใช้งานบิต (เปิดใช้งาน BOR) 
#pragma config LVP = OFF // แรงดันไฟฟ้าต่ำ (Single-Supply) การเขียนโปรแกรมอนุกรมในวงจรเปิดใช้งานบิต (pin RB3 / PGM PGM มี PGM ฟังก์ชั่นการตั้งโปรแกรมแรงดันต่ำเปิดใช้งาน
#pragma config CPD = ปิด // ข้อมูล EEPROM บิตการป้องกันรหัสหน่วยความจำ (การป้องกันรหัส EEPROM ข้อมูลปิด) 
#pragma config WRT = ปิด // โปรแกรมแฟลชหน่วยความจำเขียนเปิดใช้งานบิต (ป้องกันการเขียนออก; หน่วยความจำอาจถูกเขียนถึงโดยการควบคุม EECON) 
#pragma config CP = OFF // โปรแกรมแฟลชบิตการป้องกันโค้ดหน่วยความจำ (การป้องกันโค้ดปิด)

#include <xc.h> 
/ * 
 คำจำกัดความที่เกี่ยวข้องกับฮาร์ดแวร์
 * / 
#define _XTAL_FREQ 200000000 // ความถี่คริสตัลที่ใช้ในการหน่วงเวลา
#define SW PORTBbits.RB0 
# กำหนด PORTBbits.RB1 
กำหนดนิยาม PORTBbits.RB1 #
/ * 
 คำจำกัดความเฉพาะอื่น ๆ
 * / 
void system_init (void);
เป็นโมฆะ main (void) { 
    system_init (); // ระบบเตรียมพร้อม     
    ในขณะที่ (1) { 
        ถ้า (SW == 1) {// สวิตช์ถูกกด
            __delay_ms (50); // debounce delay 
            ถ้า (SW == 1) {// สวิตช์ยังคงกด
                LED =! LED; // การกลับสถานะหมุด 
                RELAY =! RELAY; 
            } 
        } 
     } 
    return; 
    } 
    
/ * 
 ฟังก์ชั่นนี้มีไว้สำหรับการเริ่มต้นระบบ 
 * /
เป็นโมฆะ system_init (เป็นโมฆะ) { 
    TRISBbits.TRISB0 = 1; // การตั้งค่า Sw เป็นอินพุต
    TRISBbits.TRISB1 = 0; // การตั้งค่า LED เป็นเอาต์พุต
    TRISBbits.TRISB2 = 0; // การตั้งค่า pin relay เป็น
    LED output = 0; 
    RELAY = 0; 
    }
วีดีโอ

รับจดหมายข่าวรายสัปดาห์ของเรา!

สมัครสมาชิกด้านล่างเพื่อรับข่าวสารบทความและโครงการ DIY ยอดนิยมจาก Circuit Digest

ความคิดเห็น

เข้าสู่ระบบหรือลงทะเบียนเพื่อแสดงความคิดเห็น

ซูโม่
17
หุ้น
Facebook9Pinterest8พูดเบาและรวดเร็วGoogle+อีเมล์