วันอาทิตย์ที่ 16 กันยายน พ.ศ. 2561

โปรเจค งานที่ 14 แผงควบคุม LED Matrix 8x8 ที่ควบคุมด้วยบลูทู ธ โดยใช้ Arduino

แผงควบคุมสัญญาณไฟ LED ไร้สายที่มีการควบคุมด้วย Bluetooth 8x8 บน PCB
แผงควบคุมสัญญาณไฟ LED ไร้สายที่มีการควบคุมด้วย Bluetooth 8x8 บน PCB

วัสดุที่จำเป็น:

  • Arduino Pro mini
  • MAX7219
  • โมดูล Bluetooth-HC-05
  • 8 * 8 จอแสดงผล LED Matrix
  • ตัวต้านทาน 20k
  • แจ็ค DC Barrel

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

แผนผังวงจรบอร์ด LED ที่ควบคุมด้วย LED นี้สร้างขึ้นโดยใช้โปรแกรม EasyEDA เราจะใช้แผนงานเดียวกันในการพัฒนาPCBจากนั้นและสร้างโดยใช้ EasyEDA
แผนภาพวงจรสำหรับแผงป้ายสัญลักษณ์ไร้สาย LED 8x8 ที่มีการควบคุมแบบบลูทู ธ โดยใช้ Arduino

วงจรจะสวยตรงไปข้างหน้า โครงการทั้งหมดใช้พลังงานจากอะแดปเตอร์ขนาด 12V ซึ่งได้รับโดยตรงจาก Pin Raw ของคณะกรรมการ Arduino Board แรงดันไฟฟ้านี้วัตถุดิบจะถูกควบคุมแล้วถึง + 5V ซึ่งจะถูกส่งไปยังโมดูลบลูทู ธ และ MAX7219 IC หมุด Tx และ Rx ของโมดูลบลูทู ธ เชื่อมต่อกับ D11 และ D10 ของ Arduino เพื่อเปิดใช้งานการเชื่อมต่อแบบอนุกรม
หมุดดิจิตอล D5 ถึง D7 เชื่อมต่อกับเครื่อง MAX7219 IC เพื่อส่งและรับข้อมูลผ่านการสื่อสาร SPI ขา ISET ของ MAX7219 ถูกดึงผ่านตัวต้านทาน 20k
สำหรับโครงการนี้ฉันได้ประดิษฐ์ PCBคุณจะได้รับไฟล์การออกแบบของ PCB และใช้เดียวกันหรือสร้างวงจรบน breadboardอย่างไรก็ตามเนื่องจากความซับซ้อนของผลิตภัณฑ์จึงขอแนะนำให้ซื้อโมดูลแสดงผล 8x8 หรือใช้ PCB
8x8 เมทริกซ์เป็นโมดูลการแสดงผลที่มีประโยชน์มากและสามารถใช้ในโครงการที่เย็นมาก
ฮาร์ดแวร์สำหรับควบคุมการแสดงป้ายสัญลักษณ์ไร้สาย LED 8x8 ที่ควบคุมด้วยบลูทู ธ

การสร้างแอปพลิเคชัน Android โดยใช้การประมวลผล:

ก่อนที่เราจะเริ่มต้นเขียนโปรแกรม Arduino เราควรทราบว่าข้อมูลประเภทใดที่เราจะได้รับจากโทรศัพท์มือถือเพื่อตอบสนองต่อข้อมูลนั้น ดังนั้นลองมาดูที่วิธีการประยุกต์ใช้ Android จะถูกสร้างขึ้นและวิธีการที่คุณสามารถใช้มันด้วยตัวคุณมาร์ทโฟนที่จะควบคุม 8x8 เมทริกซ์
แอปพลิเคชัน Android สำหรับโครงการนี้สร้างโดยใช้ ซอฟต์แวร์การประมวลผล เป็นโปรแกรมสำหรับพัฒนาโอเพ่นซอร์สและสามารถดาวน์โหลดได้อย่างง่ายดายและนำไปใช้ในการพัฒนาโครงการที่น่าสนใจโดยใช้ Arduino หรือไมโครคอนโทรลเลอร์อื่น ๆ เนื่องจากสามารถพัฒนาแอพพลิเคชันแอพพลิเคชันและระบบแอพพลิเคชันของหุ่นยนต์ได้ เราได้ดำเนินการบางโครงการโดยใช้การประมวลผลแล้วและคุณสามารถตรวจสอบได้โดยคลิกที่ลิงก์ด้านล่าง
  1. DIY วิทยุ FM ใช้การประมวลผล
  2. การควบคุมความจริง / ท่าทางเสมือนจริงโดยใช้ Arduino
  3. ห้องแชทส่วนตัวที่ใช้ Arduino
  4. Arduino Radar System โดยใช้ Appliance Appliance และ Ultrasonic Sensor
  5. การตรวจหาใบหน้าแบบเรียลไทม์และการติดตามโดยใช้ Arduino
  6. DIY Speedometer ใช้ Arduino และการประมวลผล
  7. เกม Ping Pong ใช้เครื่องวัดความเร็ว Arduino Accelerometer
  8. หุ่น Biped ใช้ Arduino
  9. กล้องถ่ายภาพความร้อน DIY Arduino

การกลับไปที่หัวข้อเป็นไปไม่ได้เลยที่ฉันจะอธิบายรหัสที่สมบูรณ์ของแอปพลิเคชันแอนดรอยด์ดังนั้นคุณจะต้องเรียนรู้การประมวลผลด้วยตัวเองและดูโค้ดเพื่อทำความเข้าใจวิธีการทำงาน ดังนั้นสำหรับผู้ที่ยินดีที่จะข้ามขั้นตอนการเรียนรู้การประมวลผลสามารถดาวน์โหลดโปรแกรมหุ่นยนต์จากด้านล่างลิงก์
ด้านล่างเป็นส่วนติดต่อของแอปพลิเคชันแอนดรอยด์ของเรา :
อินเทอร์เฟซแอนดรอยด์แอ็พพลิเคชันสำหรับการแสดงผลแบบบลูทู

ไฟล์ APK สามารถติดตั้งได้โดยตรงจากแอพพลิเคชันแอพพลิเคชันใด ๆ และเปิดตัวเหมือนแอพพลิเคชันอื่น ๆ แต่ตรวจสอบให้แน่ใจว่าอุปกรณ์บลูทู ธ HC-05 ของคุณมีชื่อว่า "HC-05" เพราะมีเพียงเวลาทำงานเท่านั้น

การทำความเข้าใจรหัสการประมวลผล:

คนที่สนใจที่จะรู้ว่าเกิดอะไรขึ้นหลังหน้าจอสามารถอ่านต่อได้และอื่น ๆ สามารถข้ามไปที่หัวข้อถัดไปได้ โดยทั่วไปแอพพลิเคชัน Android จะเชื่อมต่อกับอุปกรณ์บลูทู ธ ที่เรียกว่า "HC-05" ระหว่างการเริ่มต้นและแสดงชุดไฟ LED จำนวน 64 ดวงในรูปแบบของแวดวง จากนั้นเมื่อผู้ใช้กดวงกลมวงกลมจะเปลี่ยนเป็นสีแดงและหมายเลขวงกลมจะถูกส่งไปยัง Arduino ผ่าน Bluetooth เมื่อได้รับหมายเลขวงกลม Arduino จะเปิดไฟ LED ลองมองเข้าไปในเส้นที่สำคัญของโปรแกรมการประมวลผลที่จะเข้าใจได้ดียิ่งขึ้น คุณสามารถดาวน์โหลดโค้ดทั้งหมดของแอนดรอยด์ได้จากลิงค์ด้านล่าง
เราใช้คลาสและอ็อบเจ็กต์เพื่อแสดง LED 64 ดวงเพื่อให้เราสามารถระบุที่อยู่ได้อย่างง่ายดาย ดังที่คุณเห็นในโค้ดด้านล่างเราจะใช้ลูปสำหรับการวนซ้ำจาก 1 ถึง 64 โดยใช้อาร์เรย์ นี่คือ LED แต่ละตัวจะมีค่าตำแหน่ง X ตำแหน่ง Y และสีและเราสามารถเปลี่ยนได้ง่าย
/ / dipslay leds ทั้งหมดสำหรับ (int i = 1; i <= 64; i ++)   led_array [i] .display ();   // ไฟ LED แสดงทั้งหมด




ชั้นนำ { 
  float X_Pos; 
  ลอย Y_Pos; 
  สีสี;

  // CONSTRUTOR 
  Led (tempx ลอย, ลอย tempy, tempc สี) { 
    X_Pos = tempx; 
    Y_Pos = tempy; 
    color = tempc; 
  } 
  void display () 
  { 
    กรอกข้อมูล (สี); 
    วงรี (X_Pos, Y_Pos, led_dia, led_dia); 
  } 
}

LED จะถูกโหลดบนหน้าจอตามลำดับที่เท่ากันของจอแสดงผล LED แต่ละตัวจะถูกคั่นด้วยระยะทางเท่ากับเส้นผ่านศูนย์กลางของหลอด LED ดังนั้นเราจึงสามารถแยกความแตกต่างระหว่าง LED ที่ผู้ใช้เลือกไว้ ดังแสดงในโปรแกรมด้านล่างเราจะสร้างอาร์เรย์ซึ่งแต่ละองค์ประกอบจะเก็บข้อมูลตำแหน่ง X, Y และสีของ LED
โมฆะ load_leds () { 
  led_array = ใหม่ Led [65]; 
  int a = 1;

  สำหรับ (int j = 0; j <= 7; j ++) { 
    float y = height / 6 + j * (led_dia * 1.5); 
  สำหรับ (int i = 0; i <= 7; i ++) 
  { 
    float x = (กว้าง / 6) + i * (led_dia * 1.5); // กรอก (255); 
    / / วงรี (x, y, led_dia, led_dia); 
    led_array [a] = new Led (x, y, สี (255,255,255)); 
    A ++; 
  } 
  } 
}

ขั้นตอนหลักในโครงการคือการตรวจสอบว่าผู้ใช้มีการกด LED ใด ๆ และถ้าใช่เรามีการเปลี่ยนสีของไฟ LED และส่งจำนวน LED ผ่านบลูทู ธ ตั้งแต่ตอนนี้เราสามารถระบุตำแหน่งและสีของ LED แต่ละอันได้อย่างง่ายดายโดยการเปรียบเทียบค่า X, Y ของตำแหน่งที่ผู้ใช้กดด้วยค่า X, Y ของ LEDs หากการควบรวมค่าเข้ากันและกันเราจะเปลี่ยนสถานะของ LED และยังส่งหมายเลขผ่านบลูทู ธ ตามที่แสดงด้านล่าง
// ตรวจสอบว่ามีการนำเมาส์ไปวางไว้หรือไม่ถ้าใช่ให้ส่งเลขนำ
สำหรับ (int i = 1; i <= 64; i ++) 
{ 
  if ((mouseX <(led_array [i] .X_Pos + led_dia / 2)) && ( mouseX> (led_array [i] .X_Pos - led_dia / 2)) && (mouseY <(led_array [i] .Y_Pos + led_dia / 2)) && (mouseY> (led_array [i] .Y_Pos - led_dia / 2))) 
  {led_array [i] = ใหม่ Led (led_array [i] .X_Pos, led_array [i] .Y_Pos, led_color); 
  ไบต์ [] ข้อมูล = {ไบต์ (i)}; 
  bt.broadcast (ข้อมูล); 
  } 
}

นอกจากนี้โปรแกรมยังสามารถรีเซ็ต LED ที่สมบูรณ์โดยการปิดทั้งหมดและคุณยังสามารถทำให้ LED เปิดสีแดง (ON) หรือสีขาว (OFF) เพื่อให้เรายังมีปุ่มสลับสำหรับการที่ ปุ่มสลับปรากฏขึ้นและรอให้อินพุท หากกดการกระทำที่เกี่ยวข้องจะถูกถ่าย รหัสที่จะทำเช่นเดียวกันจะปรากฏด้านล่างเป็นฟังก์ชันที่เรียกว่าภายในวงเงินการวาด
void load_buttons () 
{ 
  rectMode (CENTER); 
  TextAlign (ศูนย์); 
  noStroke (); 
  เติม (# 1BF2D4); 
  ดูแลรักษา (กว้าง / 2-ความกว้าง / 4 สูง / 1.3 กว้าง / 4 สูง / 12); กรอก (0); ข้อความ ( "Reset" ความกว้าง / 2-ความกว้าง / 4 สูง / 1.3); // ปุ่ม 1

  if (red == true) 
  {กรอกข้อมูล (# 080F89); ดูแลรักษา (กว้าง / 2 + ความกว้าง / 4 สูง / 1.3 กว้าง / 4 สูง / 12); กรอก (255,0,0); ข้อความ ("RED", กว้าง / 2 + กว้าง / 4, ความสูง / 1.3);} // ปุ่ม 2 
  ถ้า (สีแดง == เท็จ) 
  {fill (# 080F89); ดูแลรักษา (กว้าง / 2 + ความกว้าง / 4 สูง / 1.3 กว้าง / 4 สูง / 12); กรอก (255); ข้อความ ("WHITE", กว้าง / 2 + กว้าง / 4, ความสูง / 1.3);} // ปุ่ม 2 
}

void read_buttons () 
{ 
    if (mousePressed && click_flag == true) 
  { 
  color_val = get (mouseX, mouseY); 
  click_flag = false; 
  if (color_val == - 14945580) 
  { 
   byte [] data = {0}; 
   bt.broadcast (ข้อมูล); 
   println ( "RESET"); load_leds (); / / โหลดทั้งหมดนำในตำแหน่งและสี
  } 
  ถ้า (color_val == - 16248951)   {    byte [] data = {100};    bt.broadcast (ข้อมูล);    if (red == true)    red = false;    else if (red == false)    red = true;  









   println ( "สลับ"); 
   }

  color_val = 0; 
  } 
}

การเขียนโปรแกรม Arduino ของคุณ:

โปรแกรม Arduino ที่สมบูรณ์สำหรับการนี้โครงการคณะกรรมการควบคุมไร้สายบลูทู ธจะได้รับที่ด้านล่างของหน้าจอนี้; คุณสามารถใช้งานได้โดยตรงและอัพโหลดลงบนกระดานของคุณ บรรทัดที่สำคัญในโปรแกรมจะอธิบายด้านล่าง

โมดูลบลูทู ธ เชื่อมต่อกับขา 10 และ 11ดังนั้นเราต้องใช้ซอฟแวร์แบบอนุกรมเพื่อเปิดใช้งานการสื่อสารแบบอนุกรมบนหมุดเหล่านี้และจากนั้นเราสามารถรับฟังข้อมูลจากพินเหล่านี้ เราได้รับข้อมูลที่ได้รับจากโมดูลบลูทู ธ และบันทึกไว้ในตัวแปรที่เรียกว่าเข้ามาหากค่าของขาเข้าเป็น "0" เราจะปิดไฟ LED ทั้งหมดโดยใช้รหัสด้านล่าง
ถ้า (BT.available ()) 
  { 
    incoming = BT.read (); 
    Serial.println (ขาเข้า);

    if (incoming == 0) 
      m.clear (); // ล้างหน้าจอ
     
ใช้ค่าของขาเข้าที่เราต้องตรวจสอบว่า LED ใดที่ผู้ใช้กดบนโทรศัพท์มือถือและสภาพอากาศเพื่อเปิดหรือปิด LED นั้น ดังนั้นเราจึงตรวจสอบว่าค่าเท่ากับ 100 ถ้าค่าเป็น 10 หมายความว่าผู้ใช้ได้ขอให้สลับสีของ LED ดังนั้นเราจึงสลับสีแดงเพื่อให้ทราบว่าควรเปิดหรือปิดไฟ LED
else if (incoming == 100) // ตรวจสอบว่าเราควรจะเปิดหรือปิด LED 
    { 
      if (red == true) 
      red = false; 
      else if (red == false) 
      red = true; 
        Serial.print ( "RED:"); Serial.println (สีแดง); 
    }

สุดท้ายถ้าค่ามากกว่า 65 หมายความว่าผู้ใช้กดบน LED ขึ้นอยู่กับจำนวนตั้งแต่ 1 ถึง 64 เราจะต้องตรวจสอบ LED ที่ผู้ใช้กด เพื่อสลับ LED ที่เราจะต้องมีค่าของแถวและคอลัมน์ของ LED ที่คำนวณและเก็บไว้ในตัวแปร X และ Y ตามลำดับและแสดงในรหัสด้านล่าง สุดท้ายขึ้นอยู่กับค่าของตัวแปรสีแดงที่เราทั้งเปิดหรือปิดไฟ LED ตามคำขอของผู้ใช้
อื่นถ้า (ขาเข้า <= 64) 
    {// คำนวณที่เป็น ON RO ปิดไฟ LED 
      สลับ = true; 
    Y = ขาเข้า / 8; 
    X = ขาเข้า - (Y * 8);

    if (incoming% 8 == 0) 
      {X = 8; Y - = 1;}

    Serial.println (X - 1); 
    Serial.println (Y); 
    if (red == true) 
    m.setDot ((X - 1), (Y), true); // LED ON 
    else if (red == false) 
    m.setDot ((X - 1), (Y), false); // LED OFF 
    }

การออกแบบวงจรและ PCB โดยใช้ EasyEDA:

การออกแบบนี้  แสดงผลเมทริกซ์บลูทู ธ ควบคุมเราได้เลือก  เครื่องมือ EDA ออนไลน์ที่เรียกว่า EasyEDA ฉันเคยใช้ EasyEDA มาแล้วหลายครั้งและพบว่าสะดวกในการใช้เนื่องจากมีรอยเท้าที่ดีและเป็นโอเพนซอร์ส หลังจากการออกแบบ PCB ที่เราสามารถสั่งซื้อตัวอย่าง PCB โดยค่าใช้จ่ายต่ำของพวกเขา  ให้บริการการผลิต PCB พวกเขายังมี  บริการจัดหาส่วนประกอบ ที่มีสต็อกชิ้นส่วนอิเล็กทรอนิกส์จำนวนมากและผู้ใช้สามารถสั่งซื้อชิ้นส่วนที่จำเป็นได้พร้อมกับใบสั่ง PCB
ในขณะที่ออกแบบวงจรและ PCBs ของคุณคุณยังสามารถทำวงจรและการออกแบบ PCB ให้กับสาธารณะเพื่อให้ผู้ใช้รายอื่นสามารถคัดลอกหรือแก้ไขได้และสามารถใช้ประโยชน์จากงานของคุณได้นอกจากนี้เรายังได้จัดทำวงจรและแผนผัง PCB ทั้งหมดสำหรับวงจรนี้ไว้ตรวจสอบ ลิงก์ด้านล่าง:
คุณสามารถ  ดู Layer  (Top, Bottom, Topsilk, Bottomsilk ฯลฯ ) ของ PCB ได้โดยเลือก Layer Layers จากหน้าต่าง Layers
นอกจากนี้คุณยังสามารถดู PCB ได้ว่าจะทำอย่างไรจึงจะดูหลังจากสร้างโดยใช้   ปุ่มPhoto Viewใน EasyEDA:
PCB ที่ออกแบบโดยใช้ EasyEDA สำหรับจอแสดงผลแบบควบคุมด้วยบลูทู ธ

การทำงานของจอแสดงผลป้ายสัญลักษณ์ Bluetooth:

เมื่อคุณพร้อมกับฮาร์ดแวร์ทั้งผ่านการ PCB หรือการเชื่อมต่อกับ breadboard ให้ใช้โปรแกรม Arduino ที่ระบุในตอนท้ายของหน้าและอัปโหลดไปยัง Arduino Board ของคุณ ไฟล์ APK โปรแกรมหุ่นยนต์ยังเป็นที่ให้ไว้ข้างต้นใช้และติดตั้งโปรแกรมบนอุปกรณ์ Android ที่คุณต้องการ

เปิดใช้ฮาร์ดแวร์และค้นหาชื่ออุปกรณ์ HC-05 ในโทรศัพท์เพื่อจับคู่กับอุปกรณ์ รหัสผ่านจะเป็นค่าเริ่มต้น 1234 หลังจากนั้นให้เปิดแอพพลิเคชันที่เราเพิ่งติดตั้ง แอ็พพลิเคชันควรแสดง " เชื่อมต่อกับ HC-05 " ที่ด้านบนของหน้าจอจากนั้นคุณจะสามารถสัมผัส LED บนหน้าจอและสังเกตได้ว่ามีการเปิด LED เดียวกันในบอร์ดด้วยเช่นกัน
แผงควบคุมสัญญาณไฟ LED ไร้สายที่มีการควบคุมด้วย Bluetooth 8x8 แสดงการทำงาน

นอกจากนี้คุณยังสามารถปิดไฟ LED ทั้งหมดได้โดยการกดปุ่มรีเซ็ตและตัดสินใจเปิดหรือปิดไฟ LED โดยเฉพาะโดยการกดปุ่ม Toggle ตามค่าเริ่มต้นที่เคย LED คุณกดจะถูกเปิด การทำงานที่สมบูรณ์แบบของโครงการที่สามารถพบได้ในวิดีโอด้านล่าง หากคุณมีปัญหาใด ๆ ในการทำให้การทำงานใช้กล่องความคิดเห็นด้านล่างหรือเขียนในฟอรั่มของเราสำหรับความช่วยเหลือทางเทคนิคเพิ่มเติม หวังว่าคุณจะเข้าใจการสอนและสนุกกับการสร้างมัน
รหัส
/ * 
      8 * 8 จอแสดงผลป้าย LED 
      B.Squitet Raj 
      www.circuitdigest.com
      library: GitHub | riyas-org / max7219  https://github.com/riyas-org/max7219
* /
#include <MaxMatrix.h> 
#include <SoftwareSerial.h> // นำเข้าไลบรารีแบบอนุกรม
SoftwareSerial BT (10, 11); // RX, TX
int DIN = 7; // ขา DIN ของ MAX7219 โมดูล
int CLK = 6; // ขา CLK ของโมดูล MAX7219 
int CS = 5; // รหัส CS ของ MAX7219 โมดูล
int maxInUse = 1;
boolean red = true; 
boolean toggle = true;
MaxMatrix m (DIN, CS, CLK, maxInUse);
การตั้งค่าเป็นโมฆะ () 

  BT.begin (9600); // เริ่มการสื่อสารด้วย Bluetooth ที่ 9600 baudrate 
  Serial.begin (9600); 
  // BT.println ("บลูทู ธ ที่ทำงาน");
  m.init (); // MAX7219 initialization 
  m.setIntensity (8); / / เริ่มต้นนำความเข้มของเมทริกซ์, 0-15 
  m.clear (); // ล้างหน้าจอ
}
int เข้ามา; 
int Y = 0; 
int X = 0;
void loop () 

  ถ้า (BT.available ()) 
  { 
    incoming = BT.read (); 
    Serial.println (ขาเข้า);
    if (incoming == 0) 
      m.clear (); // ล้างหน้าจอ
     
    อื่นถ้า (เข้ามา == 100) // ตรวจสอบว่าเราควรเปิดหรือปิด LED 
    { 
      if (red == true) 
      red = false; 
      else if (red == false) 
      red = true;
        Serial.print ( "RED:"); Serial.println (สีแดง); 
    } 
   
    else if (incoming <= 64) 
    {// คำนวณตำแหน่ง ON OFF OFF LED 
      toggle = true; 
    Y = ขาเข้า / 8; 
    X = ขาเข้า - (Y * 8);
    if (incoming% 8 == 0) 
      {X = 8; Y - = 1;}
    Serial.println (X - 1); 
    Serial.println (Y); 
    if (red == true) 
    m.setDot ((X - 1), (Y), true); // LED ON 
    else if (red == false) 
    m.setDot ((X - 1), (Y), false); // LED OFF 
   
    } 
  }
}


ไม่มีความคิดเห็น:

แสดงความคิดเห็น

งานครั้งที่ 5 ในสถานที่ฝึกงานของ นศ ใช้ระบบควบคุณภาพอย่างไร

มาตรฐาน ISO 9001 ISO 9001 เป็นมาตรฐานสากลที่องค์กรธุรกิจทั่วโลกให้ความสำคัญ เพื่อความเป็นเลิศทางด้านคุณภาพ และความมีประสิทธิภาพของการด...