อาจเหมือนกับผู้สร้าง Arduino ทุกคนที่มีความคิดบ้าๆ บอๆ อยู่ในหัว ฉันสั่งชิ้นส่วนที่จำเป็นทั้งหมดจากจีน เราต้องรอเป็นเวลานานมาก แต่แล้วก็มีการส่งมอบบอร์ด Arduino Uno และจอแสดงผล LCD ของ Nokia 5110 ก่อนกำหนด เนื่องจากฉันไม่เคยคุ้นเคยกับอุปกรณ์อิเล็กทรอนิกส์และการเขียนโปรแกรมมาก่อน ฉันจึงตัดสินใจไม่เสียเวลาและเริ่มเรียนรู้วิธีแสดงข้อมูลในโมดูลนี้
สิ่งแรกที่ฉันทำคือ Google และบังเอิญเจอสิ่งพิมพ์ “Arduino, Nokia 5110 LCD module and Cyrillic letter” จากผู้เขียน แล้วฉันก็ตระหนักว่าทุกสิ่งที่ฉันวางแผนไว้ก่อนหน้านี้จะไม่ง่ายที่จะทำ
ฉันเข้าใจอักษรซีริลลิกแล้ว ทุกอย่างเรียบง่ายที่นั่น ฉันจะไม่คัดลอกวางโพสต์ล่าสุด แต่รูปภาพมีปัญหาจริงๆ ภารกิจคือ: คุณต้องวาดภาพและอัปโหลดไปยังจอแสดงผล เจอปัญหาแรกเข้าระบบเมื่อวันพุธ การเขียนโปรแกรมอาร์ดูโน่ฉันเห็นว่าไม่มี "แทรก - รูปภาพ" แต่คุณต้องเขียนรูปภาพด้วยรหัสบางอย่างในระบบเลขฐานสิบหก ฉันพบบรรณาธิการหลายคน แต่นั่นไม่ใช่กรณีนี้ รูปภาพแสดงได้ไม่เพียงพอ ฉันเริ่มมองหาปัญหาที่อาจเกิดขึ้น
จากการทดลอง ความพยายาม และการทดสอบต่างๆ มากมาย ฉันจึงได้อัลกอริธึมที่ฉันจะแชร์กับคุณ:
1) คุณต้องได้ภาพในรูปแบบ .bmp ขาวดำ โดยมีนามสกุล 84 x 48 พิกเซล
ซึ่งสามารถทำได้หลายวิธีสำหรับเกือบทุกคน โปรแกรมแก้ไขกราฟิกมีฟังก์ชัน "บันทึกเป็น" ที่เราระบุพารามิเตอร์ที่จำเป็น
ฉันทำใน corelDRAW เราได้รับสิ่งที่คล้ายกัน มีความจำเป็นต้องชี้แจงว่าต้องบันทึกชื่อของรูปภาพ รูปแบบละตินคีย์บอร์ดเพราะว่า โปรแกรมถัดไปจะไม่สามารถเปิดมันได้
2) หากจำเป็น คุณสามารถแก้ไขรูปภาพด้วยสีได้ มีเครื่องมือที่เรียบง่ายและน่าสนใจอยู่หลายอย่าง
3) การใช้สิ่งนี้เราได้รับรหัสฐานสิบหกของรูปภาพ
4) ใส่ รหัสนี้วี รหัสโปรแกรม Arduino และอัปโหลดไปยังบอร์ด:
// SCK - พิน 8 // MOSI - พิน 9 // DC - พิน 10 // RST - พิน 11 // CS - พิน 12 // #include
#รวม
เมื่อประกอบอุปกรณ์บน Arduino เรามักจะเผชิญกับความจำเป็นในการส่งออกข้อมูลโดยอัตโนมัติ และเช่นเคย ฉันต้องการให้โซลูชันมีราคาไม่แพง และปรากฎว่าการเลือกอุปกรณ์ราคาไม่แพงนั้นไม่ได้สมบูรณ์มากนัก
หากมีการแสดงข้อมูลเพียงเล็กน้อย จะสะดวกในการใช้ตัวบ่งชี้เจ็ดส่วน พวกมันสว่างและตัดกันมาก ไม้บรรทัด 4 หลักสูง 0.36 นิ้วบน TM1637 ขายในราคา 70 เซ็นต์และควบคุมด้วยพินเพียง 2 อัน ดังที่คุณอาจเดาได้ ส่วนใหญ่จะออกแบบมาเพื่อแสดงเวลา แม้ว่าจะสามารถแสดงอุณหภูมิ ความดัน และพารามิเตอร์อื่นๆ ได้อย่างง่ายดาย ซึ่งตัวเลข 4 หลักก็เพียงพอแล้ว
แต่หากมีข้อมูลเอาต์พุตจำนวนมากก็จะไม่ทำงาน ในกรณีเช่นนี้มักใช้จอแสดงผล LCD 1602 แบบ "พื้นบ้าน" ซึ่งมีความสามารถในการแสดง 2 บรรทัดจำนวน 16 ตัวอักษรในราคาหนึ่งเหรียญครึ่ง วิธีนี้ทำให้คุณสามารถแสดงข้อมูลได้มากขึ้น
พี่ชาย 4 บรรทัดที่ล้ำหน้ากว่าจะแสดงข้อมูลได้มากขึ้น แต่มีราคาแพงกว่าอย่างเห็นได้ชัดประมาณ 5 ดอลลาร์และขนาดของมันก็ค่อนข้างใหญ่อยู่แล้ว
อุปกรณ์ทั้งหมดนี้มีทั้งข้อดีและข้อเสีย ข้อเสียเปรียบหลัก ได้แก่ การขาดการรองรับภาษารัสเซียเนื่องจากตารางโค้ดมีการต่อสายเข้ากับชิปอย่างแน่นหนาและการไม่สามารถแสดงกราฟิกได้ พูดอย่างเคร่งครัดมีความเป็นไปได้ที่จะมีเฟิร์มแวร์ Cyrillic ในอุปกรณ์ดังกล่าว แต่ส่วนใหญ่จะขายในรัสเซียและในราคาที่ไม่สมเหตุสมผล
หากข้อเสียเหล่านี้ชี้ขาดสำหรับการใช้งานในอุปกรณ์ที่ถูกสร้างขึ้นและความละเอียด 84x48 พิกเซลในกราฟิกขาวดำเหมาะสมกับคุณคุณควรให้ความสนใจกับจอแสดงผล Nokia 5110 กาลครั้งหนึ่ง แต่มันก็ไม่สมบูรณ์มาก และในสถานที่ที่ล้าสมัย โดยเฉพาะอย่างยิ่งมีการระบุไว้ที่นั่นว่าไม่สามารถแสดงอักษรซีริลลิกได้ วันนี้ไม่มีปัญหาดังกล่าว
ฮีโร่แห่งรีวิวของเราซึ่งมีราคาไม่ถึงสองเหรียญมาหาฉันในกล่องกระดาษแข็งที่ทนทานพร้อมฟิล์มกันรอยบนหน้าจอ ซึ่งต้องขอบคุณผู้ขายมาก อุปกรณ์นี้มีแผงวงจรพิมพ์ขนาด PCB สีแดง 45x45 มม. และหน้าจอ LCD ความละเอียด 84x48 พิกเซลและขนาด 40x25 มม. ตัวเครื่องมีน้ำหนัก 15 กรัม มีไฟแบ็คไลท์สีน้ำเงินที่สามารถปิดได้ สำหรับ Arduino จอแสดงผลนี้จะกัดพินดิจิทัล 5 พิน ไม่นับแหล่งจ่ายไฟ กระดานมีพิน 2 แถวที่ขนานกัน คุณจึงใช้เพียงแถวเดียวได้ ในจำนวนนี้ 5 รายการใช้สำหรับการควบคุม 2 รายการสำหรับเปิดเครื่องและอีก 1 รายการสำหรับเปิดไฟแบ็คไลท์ หากต้องการเปิดไฟแบ็คไลท์คุณจะต้องทำให้พิน LIGHT สั้นลงกราวด์ (ตามที่พวกเขาพูดมีจอแสดงผลอีกเวอร์ชันหนึ่ง - บนกระดานสีน้ำเงินซึ่งพินนี้เชื่อมต่อกับแหล่งจ่ายไฟ) บอร์ดไม่มีการขาย มีหวี 2 อันรวมอยู่ในชุด
ดังนั้นเราจึงเชื่อมต่อพิน SCLK, DIN, DC, CE และ RTS เข้ากับพิน Arduino เช่น 3, 4, 5, 6, 7 พิน VCC เป็น 3.3V (3.3 พอดีไม่ใช่ 5!) เชื่อมต่อ กราวด์และดาวน์โหลดไลบรารี
ฟังก์ชันจากไลบรารีนี้ช่วยให้คุณสามารถแสดงกราฟิกดั้งเดิม (เส้น วงกลม สี่เหลี่ยมผืนผ้า ฯลฯ) ภาพแรสเตอร์ และข้อความ ห้องสมุดมีตัวอย่างที่แสดงความสามารถ ฉันแนะนำให้คุณดู แต่เพื่อให้ข้อความแสดงเป็นภาษารัสเซีย คุณจะต้องปรับแต่งแบบอักษร แต่โชคดีที่คนดีทำทุกอย่างให้เราแล้วและสามารถดาวน์โหลดไฟล์ทดแทนได้
ฉันจะยกตัวอย่างภาพร่างด้านล่างและสามารถดูผลลัพธ์ของข้อความในภาษารัสเซียได้ด้านบน ง่ายต่อการคำนวณว่าด้วยขนาดตัวอักษรที่เล็กที่สุด (หมายเลข 1) คุณสามารถแสดงอักขระได้ 84 ตัว (14 ใน 6 บรรทัด) ซึ่งเพียงพอที่จะแสดง เช่น ข้อความวินิจฉัยที่ครอบคลุม แบบอักษร #2 มีขนาดใหญ่เป็นสองเท่า
ความละเอียดหน้าจอช่วยให้คุณแสดงภาพแรสเตอร์สองสีได้ค่อนข้างดีซึ่งสามารถใช้เป็นไอคอนในโปรแกรมได้
การสร้างไอคอนดังกล่าวนั้นง่ายมาก ภายใต้สปอยเลอร์ฉันจะแสดงให้คุณเห็นว่าสิ่งนี้เสร็จสิ้นได้อย่างไร
วิธีสร้างภาพแรสเตอร์อย่างรวดเร็วโดยใช้ตัวอย่างโลโก้เว็บไซต์ MYSKU
ขั้นแรก มาจับภาพหน้าจอของหน้าจอโลโก้ (ปุ่ม Print Screen)
เปิด Paint จากโปรแกรมมาตรฐานแล้วกด Ctrl+V หน้าจอทั้งหมดที่มีโลโก้อยู่ในมือเรา
เลือกส่วนที่ต้องการแล้วกดปุ่ม TRIM มารับชิ้นส่วนของเรากันเถอะ
ตอนนี้เราต้องเปลี่ยนส่วนนี้เป็นสองสี สีเองก็สามารถจัดการเรื่องนี้ได้ คลิก "บันทึกเป็น" และเลือกประเภท "ภาพขาวดำ (*.bmp)" เราเพิกเฉยต่อคำเตือนของบรรณาธิการและคลิกตกลงและเห็นภาพต่อไปนี้:
ตอนนี้เราต้องเปลี่ยนชุดพิกเซลนี้เป็นอาร์เรย์ของโค้ดสำหรับ Arduino ฉันพบสิ่งหนึ่งที่รับมือกับงานนี้ได้
เขาจำเป็นต้องส่งไฟล์ bmp เป็นอินพุต แต่ต้องเป็น 256 สี! ดังนั้นเราจะคลิก "บันทึกเป็น" อีกครั้งและเลือกประเภท "256 color bmp art" ตอนนี้เรามาจำขนาดของด้านข้างของไฟล์ผลลัพธ์คุณจะต้องระบุในแบบร่าง (ดูใน Paint ที่ด้านล่างในแถบสถานะหรือโดยการเปิดคุณสมบัติไฟล์ -> แท็บรายละเอียด) และไปที่ตัวแปลงออนไลน์ .
มาเลือกไฟล์ของเรา ตรวจสอบเลขฐานสิบหก แล้วคลิก CONVERT
มารับอาร์เรย์ที่เราต้องการ:
เราคัดลอกอาร์เรย์นี้ลงในร่าง รวบรวมและดูว่าเกิดอะไรขึ้น
ตอนนี้เรามาปิดไฟแบ็คไลท์แล้วดูว่าภาพจะเป็นอย่างไรหากไม่มีมัน
อย่างที่คุณเห็นทั้งข้อความและไอคอนสามารถอ่านได้ ยิ่งไปกว่านั้น ยิ่งแสงสว่างมากเท่าไหร่ การอ่านก็จะยิ่งดีขึ้นเท่านั้น (โอ้ ฉันจำได้ว่าการใช้ Nokia 1100 ในวันที่อากาศแจ่มใสช่างน่ายินดีแค่ไหน ในขณะที่ผู้คนซ่อนมือถือของตนไว้ในที่ร่มเพื่อหมุนหมายเลขโดยใช้เมทริกซ์สี) โดยทั่วไป คุณสามารถใช้จอแสดงผลในโหมดนี้ได้หากมีแสงสว่างเพียงพอหรือแสงพื้นหลังรบกวน หรือเพื่อประหยัดพลังงานแบตเตอรี่ หากมองเห็นหน้าจอของใครบางคนได้ยาก ให้ลองเล่นกับคอนทราสต์ในภาพร่าง ความเปรียบต่างที่ดีที่สุดทั้งที่มีและไม่มีแบ็คไลท์นั้นได้มาจากค่าที่ต่างกัน ซึ่งจะต้องนำมาพิจารณาด้วย
ตัวอย่างภาพร่างสำหรับแสดงข้อความและรูปภาพ
#รวม
และเนื่องจาก Arduino (โปรเซสเซอร์ + RAM + Bootloader-BIOS) + ไดรฟ์ (EEPROM) + ระบบอินพุต / เอาท์พุต (IRDA Remote และ Nokia 5110) ที่จริงแล้วเป็นคอมพิวเตอร์ที่มีคุณสมบัติครบถ้วนแล้วทำไมไม่เขียนคอมพิวเตอร์ที่มีคุณสมบัติครบถ้วน เกมเพื่อมันเหรอ? แน่นอนว่าคอมพิวเตอร์ Arduino ของเราไม่สามารถจัดการกับเกมอย่าง GTA ได้ แต่มันสามารถจัดการกับของเล่นง่ายๆ สบายๆ ได้อย่างง่ายดาย! มาเขียนเกมตลอดกาลกันเถอะ - Tetris
สำหรับโปรแกรมเมอร์คนไหนก็เหมือนกับการออกกำลังกายตอนเช้า เป็นการออกกำลังกายสมองง่ายๆ ดังนั้นลุยเลย! และมันเหมือนกับว่าสิ่งนี้ไม่เคยเกิดขึ้นมาก่อนในมัสก้า และภายในเกมศักยภาพของวิชาก็จะถูกเปิดเผย
ในฐานะระบบอินพุต ฉันตัดสินใจใช้รีโมทคอนโทรล IRDA จากอุปกรณ์ใดก็ได้ ด้วยวิธีนี้เราต้องการเพียงอันเดียวโดยมีราคา 4 รูเบิลต่ออัน และรีโมทคอนโทรล IR สามารถพบได้ในอพาร์ตเมนต์ทุกห้อง สำหรับการแสดงเสียงเราจะใช้ทวีตเตอร์แบบพายโซจากมาเธอร์บอร์ดเก่าซึ่งจะเป็นอะนาล็อกมัลติมีเดียราคาประหยัดของเรา)) ตอนนี้อันที่เจ๋งกว่ากำลังมาหาฉัน แต่นี่ทำให้ราคาซูเปอร์คอมพิวเตอร์ของเราขึ้นหนึ่งดอลลาร์แล้ว! เราจะผ่านไปได้ในตอนนี้ มันจะอยู่กับเขาแล้ว
บนเขียงหั่นขนมเราเชื่อมต่ออุปกรณ์เอาท์พุตและอุปกรณ์อินพุตและ "มัลติมีเดีย" ของเรา มันกลับกลายเป็นเช่นนี้:
ฉันใช้ Arduino Uno เนื่องจากมี 3.3V ที่เราต้องการอยู่แล้ว แต่ถ้าคุณใช้ Mini คุณจะต้องได้ 3.3V ที่ต้องการจาก 5 โวลต์สำหรับหน้าจอ วิธีที่ง่ายที่สุดจากอินเทอร์เน็ตคือการใส่ซิลิคอนไดโอดสองตัวต่ออนุกรมกัน (เลือก)
เพื่อไม่ให้วาดไดอะแกรมไฟฟ้า ฉันจะระบุพิน Arduino ที่ฉันใช้
การเชื่อมต่อจอแสดงผล Nokia 5110:
พิน 3 - โอเวอร์คล็อกอนุกรม (SCLK)
พิน 4 - ข้อมูลอนุกรมออก (DIN)
พิน 5 - เลือกข้อมูล/คำสั่ง (D/C)
พิน 6 - เลือกชิป LCD (CS)
พิน 7 - รีเซ็ต LCD (RST)
ในการส่องสว่างพิน LIGHT ของจอแสดงผล ให้โยนมันไปที่ GND ของ Arduino (เฉพาะกระดานสีแดงเท่านั้น!) จ่ายไฟเพิ่มที่ 3.3V. กราวด์เป็น GND
การเชื่อมต่อตัวรับสัญญาณ IR:
พิน 8 - IR (ควบคุม) แหล่งจ่ายไฟที่ +5V และ GND ตามลำดับ
การเชื่อมต่อทวีตเตอร์แบบ Piezo:
พิน 9 - ลำโพง, กราวด์ถึง GND
หลังการติดตั้ง ให้อัพโหลดภาพร่าง
เกมร่างของเกม Tetris
///// © Klop 2017 #รวม สรุปผลการแสดงผลของ Nokia 5110: ข้อเสีย คำตัดสิน: สำหรับเงินของมันในแง่ของคุณสมบัติทั้งหมดมันครองตำแหน่งเฉพาะของมันอย่างมั่นใจ ไม่ใช่ว่าไม่มีเหตุผลที่จะเป็นตับที่ยาวในบรรดาอุปกรณ์แสดงผลสำหรับ Arduino จำสมัยที่โทรศัพท์มือถือ "โอ๊ค" ได้ไหม พวกเขามีแป้นพิมพ์ปุ่มกดแยกต่างหากและจอแสดงผลคริสตัลเหลวขาวดำขนาดเล็ก ขณะนี้ตลาดนี้เป็นของ iPhone, Galaxy และอื่น ๆ ทุกประเภท แต่จอแสดงผลกำลังค้นหาการใช้งานใหม่: โปรเจ็กต์ DIY! จอแสดงผลขาวดำขนาด 84x48 พิกเซลที่เราจะพิจารณานั้นใช้ในโทรศัพท์ Nokia 3310 ข้อได้เปรียบหลักคือใช้งานง่าย จอแสดงผลดังกล่าวจะลงตัวกับโครงการของคุณเพื่อการแลกเปลี่ยนข้อมูลแบบโต้ตอบกับผู้ใช้ ในบทความนี้เราจะดูการควบคุมการแสดงผลกราฟิกนี้โดยใช้ Arduino พิจารณาคุณสมบัติการเชื่อมต่อลักษณะทางเทคนิคของจอแสดงผลและโปรแกรมสำหรับ Arduino ทั้งหมด วัสดุที่จำเป็น ก่อนที่จะเชื่อมต่อจอแสดงผลและตั้งโปรแกรม Arduino เรามาดูข้อมูลทั่วไปเกี่ยวกับอุปกรณ์นี้ก่อน ในการเชื่อมต่อและส่งข้อมูล จอแสดงผลจะใช้ขั้วต่อ 8 แถวคู่ขนานกัน แต่ละพินจะถูกทำเครื่องหมายไว้ที่ด้านหลังของจอแสดงผล ดังที่ได้กล่าวไปแล้วหมุดนั้นเชื่อมต่อกันแบบขนานกัน ข้อมูลเกี่ยวกับวัตถุประสงค์ของตัวเชื่อมต่อแต่ละตัวมีดังต่อไปนี้ คุณสังเกตเห็นแล้วว่าจอแสดงผล LCD 5110 มีขั้วต่อสายไฟสองตัว สิ่งแรกคือสิ่งที่สำคัญที่สุด - การขับเคลื่อนตรรกะในการแสดงผล เอกสารข้อมูลระบุว่าควรเลือกในช่วง 2.7 - 3.3 V ในการทำงานปกติ จอแสดงผลจะใช้ 6 ถึง 7 mA ขั้วต่อสายไฟอันที่สองใช้สำหรับไฟแบ็คไลท์ของจอแสดงผล หากคุณถอดจอแสดงผลออกจากบอร์ด (ไม่จำเป็นคุณสามารถดูภาพด้านล่างได้) คุณจะเห็นว่ามีการใช้แบ็คไลท์อย่างง่ายดาย: ไฟ LED สีขาวสี่ดวงซึ่งอยู่ที่มุมของบอร์ด โปรดทราบว่าไม่มีตัวต้านทานจำกัดกระแส ดังนั้นคุณต้องระวังเรื่องอาหารให้มากขึ้น คุณสามารถใช้ตัวต้านทานจำกัดกระแสเมื่อเชื่อมต่อพิน "LED" หรือใช้แรงดันไฟฟ้าสูงสุด 3.3 V อย่าลืมว่า LED สามารถดูดซับกระแสสูงได้! พวกเขาจะดึงกระแสประมาณ 100 mA ที่แรงดันไฟฟ้า 3.3 V โดยไม่มีข้อจำกัด จอแสดงผลมีตัวควบคุมในตัว: Philips PCD8544 ซึ่งแปลงอินเทอร์เฟซแบบขนานขนาดใหญ่ให้เป็นอนุกรมที่สะดวกยิ่งขึ้น PCD8544 ถูกควบคุมโดยใช้โปรโตคอลอนุกรมแบบซิงโครนัสซึ่งคล้ายกับ SPI โปรดทราบว่ามีพินตัวนับเวลา (SCLK) และพินอินพุตข้อมูลอนุกรม (DN) รวมถึงการเลือกชิปที่ใช้งานต่ำ (SCE) เหนือตัวเชื่อมต่อแบบอนุกรมที่พิจารณาจะมีการติดตั้งตัวเชื่อมต่ออื่น - D / C ซึ่งได้รับข้อมูลว่าสามารถแสดงข้อมูลที่ถูกส่งได้หรือไม่ สำหรับรายการคำสั่ง โปรดดูส่วน “คำแนะนำ” ของเอกสารข้อมูล PCD8544 (หน้า 11) มีคำสั่งล้างหน้าจอ, กลับพิกเซล, ปิดเครื่อง ฯลฯ ก่อนที่จะอัปโหลดร่างและถ่ายโอนข้อมูลไปยังจอแสดงผล คุณต้องเข้าใจการเชื่อมต่อก่อน ในการทำเช่นนี้คุณต้องแก้ไขปัญหาในการประกอบและเชื่อมต่อกับ Arduino หากต้องการ "ประกอบ" จอแสดงผล คุณอาจต้องใช้ขั้วต่อ 8 ชิ้นก็เพียงพอแล้ว คุณสามารถใช้ขาตรงหรือขา 90 องศาก็ได้ ขึ้นอยู่กับการใช้งานต่อไป หากคุณวางแผนที่จะใช้แผงวงจร รางที่มีขั้วต่อตรงน่าจะเป็นตัวเลือกที่ดีที่สุด จอแสดงผล LCD จาก Nokia 5110 ติดตั้งบนแผงวงจรขนาดเล็ก: คุณยังสามารถบัดกรีอะแดปเตอร์เข้ากับจอแสดงผลได้โดยตรง ในตัวอย่างนี้ เราจะเชื่อมต่อจอแสดงผล LCD เข้ากับ Arduino เทคนิคที่คล้ายกันนี้สามารถนำไปปรับใช้กับบอร์ดและไมโครคอนโทรลเลอร์อื่นๆ ได้อย่างง่ายดาย ในการเชื่อมต่อพินการถ่ายโอนข้อมูล - SCLK และ DN(MOSI) - เราใช้พิน Arduino SPI ซึ่งให้การถ่ายโอนข้อมูลที่รวดเร็ว พินการเลือกชิป (SCE) รีเซ็ต (RST) และพินข้อมูล/การควบคุม (D/C) สามารถเชื่อมต่อกับพินดิจิทัลใดก็ได้ เอาต์พุตจาก LED เชื่อมต่อกับพินบน Arduino ซึ่งรองรับการปรับ PWM ด้วยเหตุนี้ จึงสามารถปรับความสว่างของแบ็คไลท์ได้อย่างยืดหยุ่น น่าเสียดายที่แรงดันไฟฟ้าสูงสุดของจอแสดงผล 5110 สูงถึง 3.6 โวลต์ ดังนั้นจึงไม่สามารถเชื่อมต่อโดยตรงกับเอาต์พุตมาตรฐาน 5 V บน Arduino ได้ จำเป็นต้องปรับแรงดันไฟฟ้า ดังนั้นจึงมีตัวเลือกการเชื่อมต่อหลายอย่างปรากฏขึ้น ตัวเลือกที่ง่ายที่สุดคือการเชื่อมต่อกับ Arduino โดยตรง ในกรณีนี้คุณต้องใช้ บอร์ด Arduinoโปร 3.3V/8MHz หรือ 3.3V Arduino Pro Mini ตัวเลือกที่นำเสนอด้านล่างใช้งานได้กับบอร์ด Arduino 5V นี่เป็นตัวเลือกที่ใช้งานได้ แต่อายุการแสดงผลอาจลดลงเล็กน้อย หมุดเชื่อมต่อดังนี้: ตัวเลือกที่ดีและราคาไม่แพงในการป้องกันเพิ่มเติมคือการติดตั้งตัวต้านทานระหว่างพินข้อมูลจาก Arduino กับ LCD 5110 หากคุณใช้อาร์ดูโน่ อูโน่ การเชื่อมต่อจะเหมือนกับในตัวอย่างแรก แต่มีการติดตั้งตัวต้านทานในแต่ละวงจรสัญญาณ มีการติดตั้งตัวต้านทาน 10 kOhm ระหว่างพิน SCLK, DN, D/C และ RST ตัวต้านทาน 1 kOhm อยู่ระหว่างพิน SCE และพิน 7 ส่วน 330 โอห์มยังคงอยู่ระหว่างพิน 9 และพินที่มี LED และพิน 7 ตัวเลือกการเชื่อมต่อที่สามคือการใช้ตัวแปลงระดับเพื่อสลับระหว่าง 5 และ 3.3 V เพื่อวัตถุประสงค์เหล่านี้ คุณสามารถใช้ตัวแปลงระดับลอจิกแบบสองทิศทางหรือโมดูล TXB0104 น่าเสียดายที่มีอินพุตห้าช่องสำหรับสัญญาณ 3.3 V บนจอแสดงผลและสี่ช่องบนตัวแปลงระดับ คุณสามารถปล่อยให้เอาต์พุต RTS อยู่ในระดับสูงได้ (โดยเชื่อมต่อโดยใช้ตัวต้านทาน 10k โอห์ม) ด้วยเหตุนี้ คุณจะไม่สามารถควบคุมวิธีการรีบูตจอแสดงผลได้อีกต่อไป แต่ฟังก์ชันอื่นๆ ทั้งหมดจะใช้งานได้ หลังจากการเชื่อมต่อสำเร็จ คุณสามารถดำเนินการดาวน์โหลดภาพร่างและแสดงข้อมูลบนจอแสดงผลได้! ความคิดเห็นในโค้ดด้านบนจะช่วยให้คุณเข้าใจโปรแกรมได้ การดำเนินการส่วนใหญ่เกิดขึ้นภายในฟังก์ชัน lcdFunTime() หลังจากอัปโหลดไปยัง Arduino แล้ว ภาพร่างจะเริ่มทำงานและเปิดตัวการสาธิต - ชุดภาพเคลื่อนไหวมาตรฐานและการทดสอบฟังก์ชันกราฟิก ก่อนอื่น เรามาแสดงพิกเซลกันก่อน หลังจากนั้น เราจะไปยังการแสดงเส้น สี่เหลี่ยม และวงกลม การโหลดบิตแมป ฯลฯ หลังจากเสร็จสิ้นการร่างภาพแล้ว จอภาพจะสลับไปที่โหมดการถ่ายโอนข้อมูลผ่านโปรโตคอลแบบอนุกรม เปิดมอนิเตอร์แบบอนุกรม (ด้วยอัตรารับส่งข้อมูล 9600 bps) สิ่งที่คุณพิมพ์บนจอภาพแบบอนุกรมจะปรากฏบนจอภาพ LCD หากคุณสนใจความสามารถในการแสดงภาพแรสเตอร์ โปรดอ่านต่อ เราจะมาดูกันว่าคุณสามารถนำเข้าภาพบิตแมป 84x48 ของคุณเองและแสดงบนหน้าจอได้อย่างไร ในตัวอย่างนี้ เราจะสร้างบิตแมป 84x48 ใหม่ รวมเข้ากับโค้ด Arduino และส่งไปยังจอภาพ LCD ขั้นแรก ค้นหาภาพที่คุณต้องการแสดงบนหน้าจอ LCD 5110 คุณจะไม่สามารถขยายเป็น 84x48 พิกเซลได้มากนัก แต่ก็ยังสามารถทำได้ นี่คือตัวอย่างบางส่วน: หลังจากเลือกรูปภาพแล้ว คุณต้องแก้ไข: ทำให้เป็นขาวดำ (สี 2 บิต); คงขนาด 84x48 พิกเซลไว้ คุณสามารถใช้โปรแกรมแก้ไขรูปภาพส่วนใหญ่สำหรับสิ่งนี้ รวมถึง Paint หากคุณมี Windows บันทึกภาพที่ได้ ขั้นตอนต่อไปคือการแปลงไฟล์นี้เป็นอาร์เรย์อักขระขนาด 504 ไบต์ คุณสามารถใช้โปรแกรมต่างๆได้ ตัวอย่างเช่น ผู้ช่วย LCD หากต้องการโหลดรูปภาพลงใน LCD Assistant ให้ไปที่ไฟล์ > โหลดรูปภาพ หน้าต่างที่มีภาพตัวอย่างควรเปิดขึ้น ตรวจสอบให้แน่ใจว่ารูปภาพมีขนาดที่ถูกต้อง - กว้าง 84 พิกเซล สูง 48 พิกเซล และตั้งค่าการวางแนวไบต์เป็นแนวตั้ง ความกว้างของขนาดเป็นเล็ก การตั้งค่าเริ่มต้นที่เหลือควรตั้งค่าให้ถูกต้อง (8 พิกเซล/ไบต์) หลังจากนี้ ไปที่แท็บ ไฟล์ > บันทึกเอาต์พุต เพื่อสร้างไฟล์ข้อความชั่วคราว เปิดไฟล์ข้อความนี้เพื่อดูอาร์เรย์ใหม่ที่ยอดเยี่ยมของคุณ เปลี่ยนประเภทอาร์เรย์เป็นถ่าน (ไม่ใช่ไม่ได้ลงนามหรือ const) ตรวจสอบให้แน่ใจว่าตั้งชื่ออาร์เรย์อย่างถูกต้อง (ไม่มีขีดกลาง ไม่ขึ้นต้นด้วยตัวเลข ฯลฯ) คัดลอกอาร์เรย์ที่สร้างขึ้นลงในร่าง Arduino คุณสามารถใช้แบบร่างจากตัวอย่างแรกได้ วางอาร์เรย์ของคุณไว้ที่ใดก็ได้ ตอนนี้ หากต้องการแสดงภาพร่างของคุณ ให้แทนที่ setup() และ loop() ในภาพร่างของคุณด้วยเส้นด้านล่าง (คงฟังก์ชันและตัวแปรอื่นๆ ไว้เหมือนเดิม): // ...ตัวแปร ค่าคงที่ และอาร์เรย์บิตแมปถูกกำหนดไว้ด้านบน จอแอลซีดีเริ่มต้น(); // การตั้งค่าพินและการเริ่มต้นจอแสดงผล LCD ตั้งค่าคอนทราสต์ (60); // ปรับความคมชัด (ช่วงที่ต้องการคือ 40 ถึง 60) setBitmap(เปลวไฟบิตแมป); //flameBitmap ควรถูกแทนที่ด้วยชื่ออาร์เรย์ของคุณ อัพเดตดิสเพลย์(); //อัพเดตการแสดงผลเพื่อแสดงอาเรย์ // ฟังก์ชั่นสำหรับการควบคุมและกราฟิกบนจอ LCD มีการกำหนดไว้ด้านล่าง... มันเจ๋งจริงเหรอ? เหนือสิ่งอื่นใด คุณสามารถนำเข้าภาพหลายภาพและสร้างภาพเคลื่อนไหวขนาดเล็กได้! ลองมันฉันแน่ใจว่าคุณจะชอบมัน! แสดงความคิดเห็น คำถาม และแบ่งปันประสบการณ์ส่วนตัวของคุณด้านล่าง แนวคิดและโครงการใหม่ ๆ มักเกิดในการสนทนา! บทความใหม่ ในการทดลองนี้ เราจะดูที่จอแสดงผลกราฟิก Nokia 5110 ซึ่งสามารถใช้ในโปรเจ็กต์ Arduino เพื่อแสดงข้อมูลกราฟิก ส่วนประกอบที่จำเป็น: จอแสดงผลคริสตัลเหลว Nokia 5110 เป็นจอแสดงผลขาวดำที่มีความละเอียด 84×48 บนตัวควบคุม PCD8544 ซึ่งออกแบบมาเพื่อแสดงข้อมูลกราฟิกและข้อความ แหล่งจ่ายไฟของจอแสดงผลควรอยู่ระหว่าง 2.7-3.3 V (สูงสุด 3.3 V หากจ่าย 5 V ให้กับพิน VCC จอแสดงผลอาจเสียหาย) แต่พินคอนโทรลเลอร์นั้นทน +5V จึงสามารถเชื่อมต่อโดยตรงกับอินพุต Arduino จุดสำคัญคือการสิ้นเปลืองพลังงานต่ำซึ่งช่วยให้คุณสามารถจ่ายไฟให้กับจอแสดงผลจากบอร์ด Arduino โดยไม่ต้องใช้แหล่งพลังงานภายนอก ข้าว. 16.1. แผนภาพการเชื่อมต่อสำหรับ Nokia 5110 กับ Arduino ในการทำงานกับจอแสดงผล Nokia 5110 เราจะใช้ไลบรารี Adafruit_GFX ซึ่งมีความสามารถมากมายในการแสดงกราฟิกและข้อความ ในการทดลองของเรา เราจะได้รับข้อมูลการส่องสว่างจากโฟโตรีซีสเตอร์ที่เชื่อมต่อกับอินพุตอะนาล็อกของ Arduino A0 และส่งออกข้อมูลการส่องสว่างในรูปแบบตัวเลขและกราฟิก แผนภาพการเชื่อมต่อแสดงในรูปที่ 1 16.2. ข้าว. 16.2. แผนภาพการเชื่อมต่อของ Nokia 5110 และโฟโตรีซีสเตอร์กับ Arduino รหัสสำหรับร่างการทดลองของเราแสดงอยู่ในรายการ 16.1 เราอ่านข้อมูลจากโฟโตรีซีสเตอร์และแสดงค่าตัวเลข รวมทั้งในรูปแบบกราฟิก (แถบความคืบหน้า) ค่าความสว่างเป็นเปอร์เซ็นต์ของค่าสูงสุด เราใช้ค่าการส่องสว่างขั้นต่ำและสูงสุดจากการทดลองที่ 13 // เชื่อมต่อห้องสมุด
และคุณสามารถต่อสู้ได้ เกมดังกล่าวรองรับการเชื่อมโยงกับรีโมตคอนโทรลใด ๆ ในการทำเช่นนี้เมื่อเริ่มเกมเมื่อถูกถามว่า "กดตกลง" ให้กดปุ่มบนรีโมทคอนโทรลที่จะรับผิดชอบในการหมุนร่าง หากคุ้นเคยกับรีโมตคอนโทรลของเกมแล้ว เกมจะเริ่มต้นทันที หากรีโมตคอนโทรลเป็นของใหม่ รหัสของปุ่ม OK จะไม่ตรงกับที่จำได้ และเกมจะต้องให้คุณกดปุ่ม "ซ้าย", "ขวา" และ "ลง" ตามลำดับ ปุ่มเหล่านี้จะถูกบันทึกลงในหน่วยความจำแบบไม่ลบเลือนของ Arduino และต่อมารีโมทคอนโทรลเฉพาะนี้จะถูกจดจำทันทีเมื่อกดปุ่ม "ตกลง"
เมื่อคุณ "ล้มเหลว" ในแถวที่รวบรวม จะมีการเล่นเสียงแหลม มันถูกนำมาใช้บนพื้นฐานของพิน Arduino หลายตัว (ในกรณีของเรา 9) เพื่อสร้าง PWM ที่ความถี่ที่กำหนด
เกมดังกล่าวรองรับคุณลักษณะทั้งหมดของเกมปกติ นอกจากนี้ยังมีคำใบ้สำหรับตัวเลขถัดไปและคะแนนปัจจุบันอีกด้วย เกมจะติดตามบันทึก ค่านี้ถูกเก็บไว้ในหน่วยความจำแบบไม่ลบเลือนของ Arduino หากต้องการรีเซ็ตบันทึก เพียงเปลี่ยนค่า flfirst=1234 ในแบบร่างเป็นค่าอื่น เกมยังเพิ่มความเร็วในการตกโดยอัตโนมัติทุก ๆ 30 ไลน์ที่ถูกตัดออกไป ดังนั้นคุณจะไม่สามารถเล่นได้อย่างไม่มีกำหนด) ภาพร่างไม่ได้รับการปรับให้เหมาะสมหรือดำเนินการอย่างระมัดระวัง แต่เขียนขึ้นเพื่อความสนุกสนาน หากใครพบข้อผิดพลาดเขียน เกี่ยวกับ ©. คุณได้รับอนุญาตให้แก้ไขร่างตามที่คุณต้องการ เฉพาะเมื่อเผยแพร่ตัวเลือกของคุณที่ใดที่หนึ่งเท่านั้น โปรดระบุลิงก์ไปยังแหล่งที่มาดั้งเดิม)
ทำไมฉันถึงทำ - วันหยุดยาว + "เพื่อความรักในศิลปะ" ถ้าลูกสาวของฉันยังเด็ก ฉันคงจะทำให้เธอเป็นสล็อตแมชชีนขนาดเล็กสำหรับห้องตุ๊กตาของเธอในวันที่ 8 มีนาคม ทันเวลาพอดี ฉันจะเพิ่มเกมบางเกมเช่น Snake และ Arkanoid และอาจตัดส่วนของร่างกายออกจาก PCB ปีนี้มีเพียงลูกสาวของฉันเท่านั้นที่ปกป้องปริญญาเอกของเธอแล้ว ดังนั้นจึงพลาดไป แต่แนวคิดนี้อาจเป็นประโยชน์กับคนอื่น)
ข้อดี
+ ความเป็นไปได้ในการแสดงกราฟิก
+ ไม่มีปัญหากับอักษรซีริลลิก
+ น้ำหนักเบา;
+อัตราส่วนที่ดีเยี่ยมของขนาด/ปริมาณของข้อมูลที่แสดง
+ข้อดีของเทคโนโลยี LCD ที่ใช้คือใช้พลังงานต่ำและสามารถอ่านได้ดีในที่มีแสงจ้า
+ แสงไฟสลับได้;
+ราคา.
- แสงไฟไม่สม่ำเสมอ
-ภาพเป็นขาวดำ (ไม่มีเฉดสี)
- จำเป็นต้องดูแล 3.3V ไม่ใช่ทุก Arduino ที่มีแรงดันไฟฟ้าดังกล่าวข้อมูลจำเพาะการแสดงผลของโนเกีย 5110
พินเอาท์
โภชนาการ
อินเตอร์เฟซการควบคุม
การประกอบและเชื่อมต่อจอแสดงผล 5110
การประกอบ
การเชื่อมต่อจอแสดงผล 5110 กับ Arduino
การเชื่อมต่อโดยตรงกับ Arduino
ตัวแปลงระดับ
ตัวอย่างร่าง Arduino แรก: การสาธิต LCD
โปรแกรมสำหรับ Arduino
ร่างในการดำเนินการ
ตัวอย่างที่สอง ร่าง Arduino: การโหลดและการแสดงบิตแมป
ค้นหา/สร้าง/เปลี่ยนบิตแมป
การแปลงบิตแมปเป็นอาร์เรย์
นำเข้าสู่ร่างและวาด!
ลิงค์สำหรับดาวน์โหลดโปรแกรม ไลบรารี และเอกสารข้อมูลทางเทคนิคเพิ่มเติม
เอกสารข้อมูลสำหรับจอแสดงผล LCD และไดรเวอร์
ไลบรารีและภาพร่างของ Arduino
โปรแกรมสำหรับสร้างภาพแรสเตอร์
● โครงการ 16: ตัวบ่งชี้กราฟิก การเชื่อมต่อ จอแสดงผลโนเกีย 5110
แผนภาพการเชื่อมต่อสำหรับ Nokia 5110 กับ Arduino แสดงในรูปที่ 1 16.1.
ลำดับการเชื่อมต่อ:
1. เชื่อมต่อเซ็นเซอร์จอแสดงผล Nokia 5110 และโฟโตรีซีสเตอร์ตามแผนภาพในรูป 16.2.
2. โหลดแบบร่างจากรายการ 16.1 ลงบนบอร์ด Arduino
3. ใช้มือปิดกั้นการไหลของแสง ดูการเปลี่ยนแปลงของการอ่านค่าความสว่างบนหน้าจอแสดงผล
รายการโปรแกรม
ก่อนหน้านี้ในบล็อกนี้ได้กล่าวถึงจอแสดงผล/ตัวบ่งชี้ LCD หลายตัวและการใช้งานจาก Arduino ข้อเสียเปรียบที่สำคัญคือขนาดและน้ำหนักค่อนข้างใหญ่ บ่อยครั้งนี่ไม่ใช่ปัญหา ตัวอย่างเช่น หากคุณกำลังประกอบสถานีบัดกรีแบบ DIY ในกล่องทำเอง ไม่ว่าจอแสดงผลจะมีขนาดเท่าใดก็ตาม ในทางกลับกัน หากคุณต้องการใช้จอแสดงผล เช่น quadcopter น้ำหนักและขนาดก็มีความสำคัญ ดังนั้นวันนี้เราจะมาเรียนรู้วิธีการทำงานกับหน้าจอที่เล็กและเบามากจากโทรศัพท์ Nokia 5110
บันทึก:โพสต์อื่นๆ ในหัวข้อหน้าจอ - เรียนรู้การแสดงข้อความบนตัวบ่งชี้ LCD จาก Arduino เกี่ยวกับการใช้หน้าจอ 1602 ด้วยอะแดปเตอร์ I2C การทำงานกับ LCD ที่ใช้ HD44780 โดยไม่มีไลบรารี และเครื่องวัดอุณหภูมิแบบดิจิตอลจากเมทริกซ์ LCD, TMP36 และ Arduino
ไม่ต้องกังวล คุณจะไม่ต้องซื้อ Nokia 5110 ซึ่งไม่มีอยู่จริงในปัจจุบัน เพียงเลือกหน้าจอแล้วทิ้งส่วนอื่นๆ ทั้งหมด หน้าจอ Nokia 5110 เป็นโมดูลแบบสแตนด์อโลนทั่วไปสำหรับนักวิทยุสมัครเล่น และมีราคาตั้งแต่ 2 ถึง 5 ดอลลาร์ ขึ้นอยู่กับร้านค้า ในรัสเซียสามารถซื้อโมดูลได้เช่นบน tpai.ru arduino-kit.ru, amperkot.ru, compacttool.ru, chipster.ru หรือ electromicro.ru และแน่นอนว่าหน้าจอขายในราคาต่ำสุดใน AliExpress แต่คุณจะต้องรอหนึ่งหรือสองเดือนจนกว่าสินค้าจะมาถึงจากจีน
ดังที่มักเกิดขึ้นในโลก Arduino มีไลบรารีสำเร็จรูปสำหรับโมดูลอยู่แล้วและมีมากกว่าหนึ่งแห่ง ฉันชอบไลบรารี LCD5110 ที่โพสต์บนเว็บไซต์ rinkydinkelelectronics.com ไลบรารีนี้มีสองเวอร์ชัน อันแรกเรียกว่า LCD5110_Basic ง่ายกว่าและสามารถแสดงเฉพาะข้อความในแบบอักษรที่มีขนาดต่างกันเท่านั้น สามารถสร้างแบบอักษรของคุณเองได้ รุ่นที่สองเรียกว่า LCD5110_Graph มีความสามารถทั้งหมดของไลบรารี่แรก และนอกจากนั้น ยังสามารถวาดส่วน สี่เหลี่ยม วงกลม และอื่น ๆ ได้อีกด้วย
เพื่อจุดประสงค์ของโพสต์นี้ เราจะใช้ LCD5110_Basic ไลบรารีทั้งสองมีเอกสารอย่างดีและมีตัวอย่างการใช้งานมากมาย ดังนั้นหากคุณต้องการ LCD5110_Graph คุณก็สามารถแก้ไขได้ด้วยตัวเอง อย่างไรก็ตาม เป็นที่น่าสังเกตว่าเพื่อให้ LCD5110_Basic คอมไพล์โดยไม่มีคำเตือน ฉันต้องทำการแก้ไขโค้ดเล็กน้อยเล็กน้อย
ตัวอย่างการใช้ห้องสมุด:
#รวม
ภายนอก uint8_t BigNumbers ;
ภายนอก uint8_t MediumNumbers ;
ภายนอก uint8_t SmallFont ;
/* SCK / CLK, MOSI / DIN, DC, RST, CS */
จอแอลซีดี5110(2, 3, 4, 6, 5);
การตั้งค่าเป็นโมฆะ ()
{
จอแอลซีดี.InitLCD();
}
intctr = 0 ;
เป็นโมฆะวน()
{
จอแอลซีดี.clrScr();
Lcd.setFont(ตัวเลขขนาดใหญ่) ;
lcd.printNumI(ctr, ขวา, 0);
Lcd.setFont(ตัวเลขปานกลาง) ;
lcd.printNumF(12.34, 2, ขวา, 24);
จอแอลซีดี setFont(SmallFont) ;
lcd.print ("บรรทัด 1" , 0 , 8 * 0 ) ;
lcd.print("บรรทัด 2", 0, 8 * 1);
lcd.print ("บรรทัด 3" , 0 , 8 * 2 ) ;
จอแอลซีดีพิมพ์ ("L 4" , 0 , 8 * 3 ) ;
จอแอลซีดีพิมพ์ ("L 5" , 0 , 8 * 4 ) ;
จอแอลซีดีพิมพ์ ("0123456789ABCD" , 0 , 8 * 5 ) ;
ศูนย์กลาง + = 5 ;
ถ้า (ctr >= 1,000 )
ctr = 0 ;
ความล่าช้า(500);
}
ดูเหมือนว่าในทางปฏิบัติ:
ฉันหวังว่าจะไม่จำเป็นต้องเคี้ยวรหัส โปรดทราบว่าโมดูลนี้ใช้พลังงานจาก 3.3 V แต่สามารถเข้าใจคำสั่งจาก Arduino ได้ตามปกติ โดยไม่ต้องใช้ตัวแปลงระดับลอจิก ดังนั้นเราจึงเชื่อมต่อพิน VCC (กำลังไฟ) และ BL (แบ็คไลท์) เข้ากับ 3.3 V เชื่อมต่อ GND เข้ากับกราวด์ และเชื่อมต่อพินห้าพินที่เหลือเข้ากับพินดิจิทัล Arduino เราส่งหมายเลขพินไปยังตัวสร้างคลาส LCD5110 ตามความคิดเห็นในโค้ดที่กำหนด
ง่ายใช่มั้ย? คุณสามารถค้นหาซอร์สโค้ดแบบเต็มสำหรับโพสต์นี้ได้ในพื้นที่เก็บข้อมูล GitHub นี้ ยินดีต้อนรับการเพิ่มเติมและคำถามเช่นเคย
ส่วนที่เพิ่มเข้าไป:ผู้เขียนไลบรารีสำหรับการทำงานกับหน้าจอ Nokia 5110 ยังเป็นผู้เขียนไลบรารี OLED_I2C ซึ่งออกแบบมาเพื่อทำงานกับหน้าจอ OLED ที่ได้รับความนิยมไม่แพ้กันพร้อมอินเทอร์เฟซ I2C คุณสามารถดูตัวอย่างการใช้ OLED_I2C ได้ในโพสต์ การใช้จอยสติ๊ก Sega Genesis ในโครงการ Arduino อย่างที่คุณคาดหวัง ไลบรารีทั้งสองมีอินเทอร์เฟซที่คล้ายกัน