สารบัญ:

Arduino Browser Based Remote Control (linux): 9 ขั้นตอน (พร้อมรูปภาพ)
Arduino Browser Based Remote Control (linux): 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Browser Based Remote Control (linux): 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Browser Based Remote Control (linux): 9 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Arduino คืออะไร | เรียนรู้ Arduino ไปด้วยกัน EP:1 2024, พฤศจิกายน
Anonim
การควบคุมระยะไกลบนเบราว์เซอร์ Arduino (ลินุกซ์)
การควบคุมระยะไกลบนเบราว์เซอร์ Arduino (ลินุกซ์)
การควบคุมระยะไกลบนเบราว์เซอร์ Arduino (ลินุกซ์)
การควบคุมระยะไกลบนเบราว์เซอร์ Arduino (ลินุกซ์)

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

ขั้นตอนที่ 1: ข้อกำหนดเบื้องต้น

ข้อกำหนดเบื้องต้น
ข้อกำหนดเบื้องต้น

ฮาร์ดแวร์: ฝั่ง Arduino: Arduino - ฉันใช้เขียงหั่นขนม Arduino Uno R2 - ร้านขายอุปกรณ์อิเล็กทรอนิกส์ในพื้นที่ของคุณ หรือในห้องครัว หากคุณต้องการเขียงหั่นขนมของแท้ การติดตั้งสิ่งที่แนบมา - ฉันใช้เคสพลาสติกเก่าที่มีฝาปิดโปร่งใส ส่วนประกอบ: LED อินฟราเรด - ฉันเลิกใช้แล้ว หนึ่งจากรีโมทคอนโทรลที่เสีย (ขอบคุณเด็ก ๆ !) ตัวรับสัญญาณอินฟราเรด - ฉันได้ของฉันจากทรานซิสเตอร์ขยายระยะไกลของ magic eye - ฉันใช้ตัวต้านทาน BC547 - ฉันใช้ตัวต้านทานตัวแปร 1.5k ohm ที่ตั้งค่าเป็น 1k ohm สายจัมเปอร์เขียงหั่นขนม - ฉันได้ของฉัน จากม้วนสายเคเบิล RJ45 แกนแข็ง ฝั่งคอมพิวเตอร์: คอมพิวเตอร์ที่ใช้เป็นเซิร์ฟเวอร์ USB นำไปสู่ซอฟต์แวร์ Arduino: ซอฟต์แวร์ Arduino - จากห้องสมุด arduino.cc irremote - จาก https://www.arcfn.com/2009/08/multi-protocol- Infrared-remote-library.html (ขอบคุณ Ken ทำได้ดีมาก!) เว็บเซิร์ฟเวอร์ Apache ที่ติดตั้ง PHP แล้ว - apache.org ที่อยู่ IP ภายใน - ของฉันคือ 192.168.0.9 รูปภาพของรีโมทคอนโทรลของคุณ - google หรือรูปภาพที่ถ่ายด้วยกล้องของคุณ ฉันบันทึกของฉันที่ความละเอียด 200x600

ขั้นตอนที่ 2: การสร้างบอร์ด

การสร้างคณะกรรมการ
การสร้างคณะกรรมการ

ขอแนะนำให้ใช้เขียงหั่นขนมสำหรับ Arduino ฉันติดตั้ง Arduino และเขียงหั่นขนมในตู้เดียวกันและต่อสายพินทั้งหมดที่ฉันใช้เป็นประจำโดยตรงกับเขียงหั่นขนมอย่างถาวร พิน Arduino ที่ใช้สำหรับโครงการนี้: 5v, พินดิจิตอลกราวด์ 3, 11 (พิน 3 ควบคุม IR LED, พิน 11 เชื่อมต่อกับตัวรับสัญญาณ IR)

ขั้นตอนที่ 3: แผนผัง

แผนผัง
แผนผัง

แผนผังนี้ง่ายมาก 4 ส่วนประกอบและ 6 สาย การเชื่อมต่อ IR LED: ต่อขาหนึ่งของตัวต้านทานเข้ากับขาดิจิตอล Arduino 3 ต่อขาอีกข้างของตัวต้านทานเข้ากับขาฐานของทรานซิสเตอร์ (ขากลางในกรณีของฉัน) ต่ออีซีแอลของทรานซิสเตอร์กับกราวด์ เชื่อมต่อตัวสะสม ของทรานซิสเตอร์กับขาลบของ LED (ขาสั้น ด้านแบนของ LED) ต่อขาบวก (ขายาว ด้านโค้ง) ของ LED เข้ากับจุดต่อตัวรับสัญญาณ IR 5v พิน (คุณจะต้องหาพินสำหรับ ตัวรับสัญญาณ IR เฉพาะของคุณ): GND พินกับกราวด์ VS พินถึง 5v VO พินไปยังพินดิจิตอล Arduino 11

ขั้นตอนที่ 4: เพิ่ม Irremote Library ให้กับซอฟต์แวร์ Arduino

เพิ่ม Irremote Library ให้กับซอฟต์แวร์ Arduino
เพิ่ม Irremote Library ให้กับซอฟต์แวร์ Arduino

irremote เป็นห้องสมุดที่ยอดเยี่ยมที่เขียนโดย Ken Shirriff และหาได้จากบล็อกของเขาที่ https://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html ดาวน์โหลดห้องสมุดจาก https://arcfn.com/files/IRremote.zip และติดตั้งเหมือนกับที่คุณทำกับไลบรารี่อื่นๆ สำหรับ Arduino บล็อกของเขามีข้อมูลที่เป็นประโยชน์มากมายเกี่ยวกับห้องสมุดและวิธีการติดตั้ง

ขั้นตอนที่ 5: บันทึกรหัสจากรีโมทคอนโทรลของคุณ

นี่คือจุดเริ่มต้นของส่วนที่น่าเบื่อ (แต่หลีกเลี่ยงไม่ได้): การกดปุ่มทุกปุ่มบนรีโมทคอนโทรล บันทึกสตริงเอาต์พุตและจับคู่กับรีโมทคอนโทรลเสมือน คุณต้องทำเพียงครั้งเดียวเท่านั้น คาดว่าจะใช้เวลาประมาณ 20 นาทีหรือมากกว่านั้น เริ่มโปรแกรมแก้ไขข้อความเพื่อบันทึกผลลัพธ์ของคุณ สร้างเอกสารใหม่และพิมพ์ทุกปุ่มบนรีโมตคอนโทรลของคุณ หนึ่งปุ่มต่อบรรทัด: Power Up Down Left Right.. et cetera เริ่ม Arduino IDE และคลิกที่ "Files->Examples->IRremote->IRrecvDump" แล้วอัปโหลดไปที่ Arduino ของคุณ ตัวอย่างนี้จะดัมพ์รหัสระยะไกลไปยังพอร์ตอนุกรม เริ่มการตรวจสอบพอร์ตอนุกรมและกดปุ่มบนรีโมทคอนโทรลของคุณ คุณจะเห็นสตริงปรากฏขึ้นในหน้าต่างมอนิเตอร์แบบอนุกรม: "Decoded *: * (* bits)" คัดลอกบรรทัดนี้และบันทึกลงในเอกสารของคุณในบรรทัดที่เหมาะสม ทำซ้ำจนกว่าคุณจะเก็บคีย์ทั้งหมดไว้ในไฟล์ข้อความ ฉันรู้ว่าบิตนี้สนุกแค่ไหน ฉันทำมันสองครั้งแล้ว:P ตอนนี้เราต้องทำการค้นหาและแทนที่ในไฟล์ข้อความเล็กน้อย: ค้นหา "Decoded " แทนที่ด้วย "" ค้นหา ": 0x" แทนที่ด้วย ", " ค้นหา " (" แทนที่ด้วย ", " ค้นหา " บิต)" แทนที่ด้วย "" ดังนั้นสำหรับบรรทัดเช่น: ถอดรหัส NEC: 0x000110 (15 บิต) ตอนนี้เราควรมีบรรทัดที่ระบุว่า: NEC, 000110, 15

ขั้นตอนที่ 6: สร้างหน้าเว็บสำหรับรีโมทคอนโทรลของคุณ

ตอนนี้เราจำเป็นต้องแมปปุ่มต่างๆ บนรูปภาพของรีโมตคอนโทรลของคุณ

ฉันใช้ https://www.maschek.hu/imagemap/imgmap เพื่อแมปปุ่มและแก้ไขโค้ดที่เว็บไซต์ให้คุณเพื่อให้ใช้งานได้

คลิกที่ "ใช้รูปภาพบนคอมพิวเตอร์ของคุณ: [เลือกไฟล์]" เลือกรูปภาพของคุณ คลิก [อัปโหลด] คลิก [ยอมรับ] วางสี่เหลี่ยม วงกลม ฯลฯ ลงบนแต่ละปุ่ม สำหรับ HREF ให้ใส่ /remote.php?command= และบรรทัดสำหรับปุ่มนั้นจากเอกสารข้อความ เช่น /remote.php?command=NEC, 000110, 15 จะเป็นการดี (และให้ความช่วยเหลืออย่างมากในการดีบัก) หากคุณกรอก Alt: ด้วยชื่อปุ่ม แต่ขึ้นอยู่กับคุณ

ทำซ้ำสำหรับแต่ละปุ่ม

ทุกอย่างเสร็จเรียบร้อย? จากนั้นเราจะดำเนินการต่อ ที่ด้านล่างของหน้านั้นคือ "รหัส" คลิกที่นั้นและกล่องจะเปิดขึ้นเพื่อแสดงรหัสสำหรับแผนผังรูปภาพ คัดลอกและวางลงในเอกสารข้อความใหม่ นี่คือส่วนหลักของหน้าเว็บของเรา

นี่คือหน้าเว็บที่สมบูรณ์ของฉัน เพียงแทนที่ …

ด้วยรหัสของคุณเองด้านบนและบันทึกเป็น remote.php ในไดเร็กทอรีเว็บของคุณ (/var/www บน linux) พร้อมกับรูปภาพการควบคุมระยะไกลของคุณ เปลี่ยนเส้นสำหรับภาพของคุณเอง:

"https://www.w3.org/TR/html4/loose.dtd">

Arduino LED control

ขั้นตอนที่ 7: อัปโหลดรหัสการควบคุมระยะไกลไปยัง Arduino. ของคุณ

อัปโหลดรหัสการควบคุมระยะไกลไปยัง Arduino. ของคุณ
อัปโหลดรหัสการควบคุมระยะไกลไปยัง Arduino. ของคุณ

สร้างภาพร่างใหม่แล้ววางโค้ดต่อไปนี้ลงไป: /* * WebRemote * IR LED ต้องเชื่อมต่อกับขา Arduino PWM 3 * เวอร์ชัน 0.1 กรกฎาคม 2009 * รหัสนี้เป็นลิขสิทธิ์ของ Gregory Fenton, https://labby.co uk/2012/02/irremote-arduino-experimentation/ * IRremote Library copyright 2009 Ken Shirriff, https://arcfn.com */ #include template inline Print &operator <<(Print &obj, T arg) { obj.print(arg)); ส่งคืน obj; } บูลีนสิ้นสุด = false; ถ่านในข้อมูล[64]; // ขนาดตามดัชนีไบต์ที่เหมาะสม = 0; #define EOP "\n" IRsend irsend; การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); Serial << "พอร์ตอนุกรมเริ่มต้น" << EOP; } วงเป็นโมฆะ () { สตริง pch, sType, sTemp; ถ่าน inChar, sTest, k; int sBits; sHex ยาว; int ฉัน, เจ; while(1) { while(Serial.available() > 0) { inChar = Serial.read(); ถ้า (ดัชนี == 0) { pch = ""; } if(inChar == '\r' || inChar == '\n' || inChar == '/') // EOP { สิ้นสุด = จริง; ดัชนี = 0; หยุดพัก; } else { if(index < 64) // ขนาดอาร์เรย์ { pch += inChar; ดัชนี++; } } } if(ended) { // แยกวิเคราะห์ข้อมูลใน inData ที่นี่… pch.toUpperCase(); i = pch.indexOf(' ') != -1 ? pch.indexOf(' '): pch.indexOf(', '); sType = pch.substring(0, i); ผม++; // ข้าม ', ' หรือ ' ' // ตอนนี้ฉันชี้ไปที่จุดเริ่มต้นของเลขฐานสิบหก j = pch.lastIndexOf(' ') != -1 ? pch.lastIndexOf(' '): pch.lastIndexOf(', '); // j ตอนนี้ชี้ไปที่ ', ' หรือ ' ' หลังเลขฐานสิบหก sHex = 0; sTemp = pch.substring(i, j); if(sTemp.substring(0, 2) == String("0X")) sTemp = sTemp.substring(2); for(i = 0; i < sTemp.length(); i++) { k = sTemp; if(!((k >= '0' && k = 'A' && k <= 'F'))) แตก; sHex *= 16; if(k >= '0' && k <= '9') sHex += (k - '0'); อื่นถ้า (k >= 'A' && k <= 'F') sHex += ((k - 'A') + 10); if(!((k >= '0' && k = 'A' && k <= 'F'))) แตก; } sTemp = pch.substring(j+1); sBits = 0; for(i = 0; i < sTemp.length(); i++) { k = sTemp; sBits *= 10; if(k >= '0' && k <= '9') sBits += (k - '0'); } if(sType.length()>0) { Serial << pch << EOP << "ประเภทโค้ด: "<< sType << " Hex: "; Serial.print(sHex, HEX); อนุกรม << " บิต: " << sBits; } sendIt(sType, sHex, sBits); pch = ""; สิ้นสุด = 0; } } } เป็นโมฆะ sendIt (String sType, sHex แบบยาว, int sBits) { สำหรับ (int i = 0; i <2; i++) { if(sType.equals(String("RC6"))) { irsend.sendRC6(sHex), sBits); } else if (sType.equals(String("RC5"))) { irsend.sendRC5(sHex, sBits); } else if(sType.equals(String("SONY"))) { irsend.sendSony(sHex, sBits); } else if(sType.equals(String("NEC"))) { if (!i) irsend.sendNEC(sHex, sBits); } อื่น if(sType.equals(String(""))) { Serial << "Delaying" << EOP; ล่าช้า (450); } ล่าช้า (30); } }

ขั้นตอนที่ 8: เชื่อมต่อกับเว็บเซิร์ฟเวอร์จากคอมพิวเตอร์ของคุณ

เชื่อมต่อกับเว็บเซิร์ฟเวอร์จากคอมพิวเตอร์ของคุณ
เชื่อมต่อกับเว็บเซิร์ฟเวอร์จากคอมพิวเตอร์ของคุณ

.. หรือโทรศัพท์หรือ android หรือ ipad หรืออะไรก็ตาม: ไปที่ https://webserver IP address/remote.php ในเบราว์เซอร์ของคุณ สำหรับฉันที่อยู่คือ https://192.168.0.9/remote.php แต่ของคุณจะแตกต่างกันอย่างไม่ต้องสงสัย หากทุกอย่างใช้งานได้ คุณจะเห็นรูปภาพของรีโมตคอนโทรลพร้อมปุ่มต่างๆ ที่คุณสามารถคลิกได้

ขั้นตอนที่ 9: ขั้นตอนเพิ่มเติม: แก้ไขไฟล์โฮสต์ของคุณเพื่อให้ใช้งานได้ง่ายขึ้น

ขั้นตอนเพิ่มเติม: แก้ไขไฟล์โฮสต์ของคุณเพื่อให้ใช้งานได้ง่ายขึ้น
ขั้นตอนเพิ่มเติม: แก้ไขไฟล์โฮสต์ของคุณเพื่อให้ใช้งานได้ง่ายขึ้น

ขั้นตอนที่ฉันทำคือแก้ไขไฟล์โฮสต์ของฉัน (/etc/hosts บน linux, C:\Windows\System32\Drivers\etc\hosts บน windows) โปรดทราบว่าไฟล์นี้สามารถแก้ไขได้ในพรอมต์คำสั่งการดูแลระบบ (windows) หรือโดย su (linux) เพิ่มบรรทัด ip.add.re.ss remote แทนที่ ip.add.re.ss ด้วยที่อยู่ IP ของเซิร์ฟเวอร์และบันทึกไฟล์. คุณจะต้องทำเช่นนี้กับทุกอุปกรณ์ที่คุณต้องการเข้าถึงหน้าเว็บด้วยชื่อย่อ ตอนนี้คุณสามารถเข้าถึงรีโมตได้ด้วย https://remote/remote.php นี่เป็นคำสั่งแรกที่ถูกต้องของฉัน โปรดใช้คำสุภาพ และแจ้งให้เราทราบหากมีปัญหาใดๆ เพื่อที่ฉันจะได้แก้ไข

แนะนำ: