แสงกลางคืนจากหลอดไฟเก่าที่ใช้ Arduino และ WS2812 การเชื่อมต่อโฟโตรีซีสเตอร์กับ Arduino และทำงานกับเซ็นเซอร์วัดแสง

สำหรับงานเพิ่มเติม

    ไฟ LED อีก 1 ดวง

    ตัวต้านทานอีก 1 ตัวที่มีค่าเล็กน้อย 220 โอห์ม

    อีก 2 สาย

แผนผัง

โครงการบนเขียงหั่นขนม

โปรดทราบ

    ในการทดลองนี้ เราติดตั้งโฟโตรีซีสเตอร์ระหว่างแหล่งจ่ายไฟและอินพุตแบบอะนาล็อก เช่น เพื่อวางตำแหน่ง R1 ในวงจรแบ่งแรงดันไฟฟ้า เราต้องการสิ่งนี้เพื่อว่าเมื่อแสงสว่างลดลง เราได้รับแรงดันไฟฟ้าน้อยลงที่อินพุตแบบอะนาล็อก

    พยายามวางส่วนประกอบต่างๆ เพื่อไม่ให้ LED ส่องสว่างโฟโตรีซีสเตอร์

ร่าง

p050_night_light.ino #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 การตั้งค่าเป็นโมฆะ () ( pinMode (LED_PIN, OUTPUT) ; ) void loop () ( //อ่านระดับแสง โดยวิธีการประกาศ // คุณสามารถกำหนดตัวแปรและค่าให้กับมันได้ในคราวเดียว int lightness = อะนาล็อกอ่าน (LDR_PIN) ; // อ่านค่าจากโพเทนชิออมิเตอร์ที่เราควบคุม // ค่าเกณฑ์ระหว่างความมืดและแสงสว่างแบบมีเงื่อนไขเกณฑ์ int = analogRead (POT_PIN) ; // ประกาศตัวแปรบูลีนและกำหนดค่าให้กับมัน // “มืดแล้วเหรอ” ตัวแปรบูลีนซึ่งตรงข้ามกับ // จำนวนเต็ม สามารถมีค่าได้เพียงค่าใดค่าหนึ่งจากสองค่า: //จริงหรือเท็จ ค่านิยมดังกล่าว // เรียกอีกอย่างว่าบูลีนบูลีน tooDark = (lightness< threshold) ; // ใช้การแยกสาขาของโปรแกรม: โปรเซสเซอร์จะดำเนินการอย่างใดอย่างหนึ่ง // โค้ดสองบล็อกขึ้นอยู่กับการดำเนินการของเงื่อนไข // If (ภาษาอังกฤษ “if”) มืดเกินไป...ถ้า (มืดเกินไป) ( // ...เปิดไฟ digitalWrite (LED_PIN, สูง) ; ) อื่น (// ...ไม่เช่นนั้นก็ไม่จำเป็นต้องใช้ไฟ - ปิดไฟ

digitalWrite(LED_PIN, ต่ำ);

    - คำอธิบายสำหรับรหัสเราใช้ ชนิดใหม่ ตัวแปรคือบูลีนที่เก็บเฉพาะค่าจริง (จริง 1) หรือเท็จ (เท็จ 0) ค่าเหล่านี้เป็นผลมาจากการประเมินนิพจน์บูลีน ในในตัวอย่างนี้< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

    การแสดงออกทางตรรกะ

    - นี่คือความสว่าง< . Мы можем использовать операторы > , <= , >เราใส่นิพจน์เชิงตรรกะนี้ไว้ในวงเล็บเพื่อความชัดเจนเท่านั้น การเขียนโค้ดที่อ่านง่ายจะดีกว่าเสมอ ในกรณีอื่นๆ วงเล็บอาจส่งผลต่อลำดับการดำเนินการได้เช่นเดียวกับในเลขคณิตทั่วไป

    ในการทดลองของเรา นิพจน์บูลีนจะเป็นจริงเมื่อค่าความสว่างน้อยกว่าค่าเกณฑ์เนื่องจากเราใช้ตัวดำเนินการ = , == , != ซึ่งหมายถึง "มากกว่า" "น้อยกว่าหรือเท่ากับ" "มากกว่าหรือเท่ากับ" "เท่ากับ" "ไม่เท่ากับ" ตามลำดับ== และอย่าสับสนกับตัวดำเนินการที่ได้รับมอบหมาย = ในกรณีแรก เราจะเปรียบเทียบค่าของนิพจน์และรับค่าตรรกะ (จริงหรือเท็จ) และในกรณีที่สอง เราจะกำหนดค่าของตัวถูกดำเนินการที่ถูกต้องให้กับตัวถูกดำเนินการทางซ้าย คอมไพเลอร์ไม่ทราบความตั้งใจของเราและจะไม่แสดงข้อผิดพลาด แต่เราสามารถเปลี่ยนค่าของตัวแปรบางตัวโดยไม่ตั้งใจและใช้เวลานานในการค้นหาข้อผิดพลาด

    คำสั่ง if แบบมีเงื่อนไขเป็นหนึ่งในคำสั่งสำคัญในภาษาการเขียนโปรแกรมส่วนใหญ่ ด้วยความช่วยเหลือนี้ เราไม่เพียงแต่สามารถดำเนินการตามลำดับการกระทำที่กำหนดไว้อย่างเคร่งครัดเท่านั้น แต่ยังตัดสินใจได้ว่าควรปฏิบัติตามสาขาใดของอัลกอริทึม ขึ้นอยู่กับเงื่อนไขบางประการ

    การแสดงออกทางตรรกะที่เบา< threshold есть значение: true или false . Мы вычислили его и поместили в булеву переменную tooDark («слишком темно»). Таким образом мы как бы говорим «если слишком темно, то включить светодиод»

    ด้วยความสำเร็จแบบเดียวกัน เราสามารถพูดได้ว่า "หากแสงสว่างน้อยกว่าระดับเกณฑ์ ให้เปิด LED" กล่าวคือ ส่งผ่านนิพจน์เชิงตรรกะทั้งหมดไปที่ if:

ถ้า (ความสว่าง< threshold) { // ... }

    สำหรับ ตัวดำเนินการแบบมีเงื่อนไขหากจำเป็นต้องติดตามบล็อกของโค้ดที่ถูกดำเนินการหากนิพจน์เชิงตรรกะเป็นจริง อย่าลืมวงเล็บปีกกาทั้งสองอัน ()!

    หากนิพจน์เป็นจริง เราเพียงแต่ต้องดำเนินการเท่านั้น หนึ่งคำสั่งสามารถเขียนได้ทันทีหลังจาก if (...) โดยไม่มี วงเล็บปีกกา:

ถ้า (ความสว่าง< threshold) digitalWrite(LED_PIN, HIGH) ;

    คำสั่ง if สามารถขยายได้ด้วยโครงสร้าง else บล็อกของโค้ดหรือคำสั่งเดียวที่ตามมาจะถูกดำเนินการก็ต่อเมื่อนิพจน์บูลีนใน if ประเมินเป็นเท็จ กฎเกี่ยวกับเหล็กดัดฟันจะเหมือนกัน ในการทดลองของเรา เราเขียนว่า "ถ้ามันมืดเกินไป ให้เปิด LED หรือไม่ก็ปิด LED"

ทุกคนคงมีความฝันในวัยเด็ก (และมากกว่าหนึ่ง) คุณยังสามารถลองจดจำความรู้สึกที่เติมเต็มจิตวิญญาณของเด็กเมื่อความฝันของเขาเป็นจริง หรือประกายแวววาวที่คุ้นเคยและห่างไกลในดวงตาของเขา... ตอนเป็นเด็ก ฉันฝันว่าจะมีแสงไฟยามค่ำคืนเป็นของตัวเอง

ตอนนี้ฉันเป็นนักศึกษาชั้นปีที่ 4 ที่ BSUIR และเมื่อได้รับแจ้งว่า โครงการหลักสูตรตามการออกแบบวงจรคุณไม่สามารถทำมันได้บนกระดาษ แต่บนแผ่นเหล็กมันทำให้ฉันนึกถึง: แสงกลางคืนที่คุณต้องการในวัยเด็กคุณสามารถทำเองได้ ยิ่งไปกว่านั้น ไม่เพียงแต่สร้างวัตถุที่จะส่องสว่างห้องในที่มืดเท่านั้น แต่ยังเป็นอุปกรณ์ที่สามารถควบคุมได้ง่ายเพื่อให้เหมาะกับทุกอารมณ์ ทำไมไม่? ฉันตัดสินใจเพิ่มความสามารถในการเปลี่ยนสีด้วยมือของฉัน: ยิ่งมือของฉันอยู่ใกล้แสงกลางคืน สีใดสีหนึ่ง (RGB) ที่สว่างก็จะสว่างขึ้น ฉันอยากจะควบคุมแสงตอนกลางคืนโดยใช้รีโมทคอนโทรลด้วย

ฉันยอมรับทันทีว่าฉันพบแนวคิดนี้บนเว็บไซต์ cxem.net กล่าวโดยสรุป ตัวอย่างนี้ใช้เมทริกซ์ RGB ซึ่งควบคุมโดยใช้ชิฟต์รีจิสเตอร์ และเซ็นเซอร์วัดระยะอัลตราโซนิก แต่ฉันคิดว่าเมทริกซ์จะส่องไปในทิศทางเดียวเท่านั้น แต่ฉันอยากให้แสงกลางคืนส่องที่ด้านข้าง

เหตุผลขององค์ประกอบวงจร


ฉันหันความสนใจไปที่ไมโครคอนโทรลเลอร์ Arduino UNO ค่อนข้างเป็นตัวเลือกที่เหมาะสมสำหรับความคิดของฉัน ประการแรกเนื่องจากเป็นแพลตฟอร์มที่ได้รับความนิยมมากที่สุดและจำนวนพินไม่ใหญ่เกินไป ไม่เหมือน Mega และประการที่สอง คุณสามารถเชื่อมต่อแหล่งพลังงานภายนอกเข้ากับมันได้ ในกรณีของฉันคือ 12V ไม่เหมือนนาโน ประการที่สาม... ฉันคิดว่าเราสามารถหยุดที่จุดสองจุดนี้ได้ แพลตฟอร์มดังกล่าวได้รับความนิยมอย่างมากทั่วโลกเนื่องจากความสะดวกและความเรียบง่ายของภาษาการเขียนโปรแกรมเช่นกัน สถาปัตยกรรมแบบเปิดและรหัสโปรแกรม

มากกว่า ข้อมูลรายละเอียดคุณสามารถค้นหาข้อมูลเกี่ยวกับบอร์ดนี้ได้อย่างง่ายดายบนอินเทอร์เน็ต ดังนั้นฉันจะไม่โหลดบทความนี้มากเกินไป

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

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

เรนจ์ไฟนเดอร์ที่ได้รับความนิยมมากที่สุดใน ในขณะนี้คือ Sharp GP2Y0A21YK และ HC-SR04 Sharp GP2Y0A21YK เป็นเครื่องวัดระยะแบบอินฟราเรด มันมาพร้อมกับตัวส่งสัญญาณ IR และตัวรับสัญญาณ IR: อันแรกทำหน้าที่เป็นแหล่งกำเนิดของลำแสงซึ่งแสงสะท้อนจะถูกจับโดยวินาที ในเวลาเดียวกัน รังสีอินฟราเรดของเซ็นเซอร์จะมองไม่เห็นด้วยตามนุษย์ และที่ความเข้มดังกล่าวก็ไม่เป็นอันตราย

เมื่อเปรียบเทียบกับเซ็นเซอร์อัลตราโซนิก HC-SR04 เซ็นเซอร์นี้มีทั้งข้อดีและข้อเสีย ข้อดี ได้แก่ ความเป็นกลางและไม่เป็นอันตราย ข้อเสียคือช่วงที่สั้นกว่าและขึ้นอยู่กับการรบกวนจากภายนอกรวมถึงแสงบางประเภท

เครื่องหาระยะอัลตราโซนิก HC-SR04 ถูกใช้เป็นเซ็นเซอร์วัดระยะห่างสำหรับโครงการ
หลักการทำงานของ HC-SR04 ขึ้นอยู่กับปรากฏการณ์การสะท้อนตำแหน่งที่รู้จักกันดี เมื่อใช้งาน ตัวส่งสัญญาณจะสร้างสัญญาณเสียงซึ่งเมื่อสะท้อนจากสิ่งกีดขวางแล้วจะส่งกลับไปยังเซ็นเซอร์และลงทะเบียนโดยเครื่องรับ รู้ความเร็วการแพร่กระจายของอัลตราซาวนด์ในอากาศ (ประมาณ 340 เมตร/วินาที) และเวลาหน่วงระหว่างการปล่อยและ รับสัญญาณทำให้ง่ายต่อการคำนวณระยะห่างจากแผงกั้นเสียง

อินพุต TRIG เชื่อมต่อกับพินใดๆ ของไมโครคอนโทรลเลอร์ ต้องใช้พัลส์กับพินนี้ สัญญาณดิจิตอลระยะเวลา 10 μs ตามสัญญาณที่อินพุต TRIG เซ็นเซอร์จะส่งแพ็กเก็ตของพัลส์อัลตราโซนิก หลังจากรับสัญญาณที่สะท้อนแล้ว เซ็นเซอร์จะสร้างที่พิน ECHO สัญญาณชีพจรโดยมีระยะเวลาแปรผันตามระยะทางถึงสิ่งกีดขวาง

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

โครงการนี้มีพื้นฐานมาจากแนวคิดในการส่องสว่างห้องด้วยสีใดก็ได้ซึ่งหมายความว่าคุณจะต้องมีสีหลัก 3 สีซึ่งจะได้รับแสง: แดง, เขียว, น้ำเงิน ดังนั้นจึงเลือกรุ่น LED SMD 5050RGB ที่จะรับมือกับงานได้อย่างสมบูรณ์แบบ

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

แถบ LED ที่ใช้ในโครงการใช้พลังงานจาก 12V

เนื่องจากแรงดันไฟฟ้าบน LED ในสถานะ "ปิด" คือ 6V และจำเป็นต้องควบคุมแหล่งจ่ายไฟซึ่งเกิน 5V จึงจำเป็นต้องเพิ่มทรานซิสเตอร์ให้กับวงจรในโหมดสวิตชิ่ง ตัวเลือกของฉันตกอยู่ที่รุ่น BC547c

ให้เราพิจารณาสั้น ๆ สำหรับผู้ที่ลืมหลักการ ทำงาน n-p-nทรานซิสเตอร์. หากคุณไม่ได้ใช้แรงดันไฟฟ้าเลย แต่เพียงลัดวงจรขั้วฐานและตัวส่งสัญญาณแม้ว่าจะไม่ลัดวงจร แต่ผ่านตัวต้านทานหลายโอห์มปรากฎว่าแรงดันฐานตัวส่งสัญญาณเป็นศูนย์ ดังนั้นจึงไม่มีกระแสฐาน ทรานซิสเตอร์ปิดอยู่ กระแสสะสมมีขนาดเล็กมาก เพียงกระแสเริ่มต้นเท่ากัน ในกรณีนี้ ทรานซิสเตอร์จะอยู่ในสถานะตัดการเชื่อมต่อ สถานะตรงกันข้ามเรียกว่าความอิ่มตัว: เมื่อทรานซิสเตอร์เปิดจนสุดจนไม่มีที่ให้เปิดอีกต่อไป ด้วยการเปิดระดับนี้ความต้านทานของส่วนตัวสะสมและตัวปล่อยจะต่ำมากจนเป็นไปไม่ได้เลยที่จะเปิดทรานซิสเตอร์โดยไม่มีโหลดในวงจรตัวสะสมมันจะไหม้ทันที ในกรณีนี้แรงดันตกค้างบนตัวสะสมสามารถมีค่าได้เพียง 0.3...0.5V

สถานะทั้งสองนี้ ได้แก่ ความอิ่มตัวและจุดตัด จะใช้เมื่อทรานซิสเตอร์ทำงานในโหมดสวิตชิ่ง เช่นเดียวกับหน้าสัมผัสรีเลย์ปกติ ความหมายหลักของโหมดนี้คือ กระแสฐานขนาดเล็กจะควบคุมกระแสคอลเลคเตอร์ขนาดใหญ่ ซึ่งมากกว่ากระแสฐานหลายสิบเท่า ได้รับกระแสสะสมขนาดใหญ่เนื่องจาก แหล่งภายนอกพลังงาน แต่ยังคงได้รับในปัจจุบันอย่างที่พวกเขาพูดนั้นชัดเจน ในกรณีของเรา microcircuit ซึ่งมีแรงดันไฟฟ้า 5V ประกอบด้วยแถบ 3 แถบที่มีไฟ LED ทำงานจาก 12V

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

ดังนั้นแถบจึงสามารถมีแรงดันไฟฟ้าในการทำงานที่ 220V และสามารถควบคุมวงจรฐานได้จากไมโครวงจรที่มีแรงดันไฟฟ้า 5V หากทรานซิสเตอร์ได้รับการออกแบบให้ทำงานด้วยแรงดันไฟฟ้าที่ตัวสะสม LED จะสว่างโดยไม่มีปัญหา
แรงดันไฟฟ้าตกคร่อมจุดเชื่อมต่อตัวส่งสัญญาณฐานคือ 0.77V โดยมีเงื่อนไขว่ากระแสไฟพื้นฐานคือ 5mA และกระแสไฟสะสมคือ 0.1A
แรงดันไฟฟ้าตกคร่อมตัวต้านทานฐานจะเป็นดังนี้:

ตามกฎของโอห์ม:

จากช่วงความต้านทานมาตรฐานเราเลือกตัวต้านทาน 8.2 kOhm เสร็จสิ้นการคำนวณ

ฉันอยากจะดึงความสนใจของคุณไปที่ปัญหาหนึ่งที่ฉันพบ เมื่อใช้ไลบรารี IRremote Arduino จะค้างเมื่อปรับสีน้ำเงิน หลังจากค้นหาทางอินเทอร์เน็ตอย่างยาวนานและอย่างละเอียดปรากฎว่าไลบรารีนี้ใช้ Timer 2 เป็นค่าเริ่มต้นสำหรับรุ่น Arduino นี้ ตัวจับเวลาใช้เพื่อควบคุมเอาต์พุต PWM

ตัวจับเวลา 0 (เวลาของระบบ, PWM 5 และ 6);
ตัวจับเวลา 1 (PWM 9 และ 10);
ตัวจับเวลา 2 (PWM 3 และ 11)

ตอนแรกฉันใช้ PWM 11 เพื่อควบคุมสีฟ้า ดังนั้นควรระมัดระวังเมื่อทำงานกับ PWM ตัวจับเวลา และไลบรารีบุคคลที่สามที่อาจใช้งาน มันแปลกตรงที่ หน้าแรกไม่มีอะไรพูดเกี่ยวกับความแตกต่างนี้ใน Github หากต้องการ คุณสามารถยกเลิกการใส่ข้อคิดเห็นในบรรทัดด้วยตัวจับเวลา 1 และแสดงความคิดเห็นในบรรทัดที่ 2

การเชื่อมต่อองค์ประกอบบนเขียงหั่นขนมมีลักษณะดังนี้:

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

แล้วมันก็เป็นเพียงเรื่องของร่างกาย ด้วยเหตุนี้ ไม้อัดที่มีรูสำหรับเซ็นเซอร์ของเราจึงถูกตัด ฝาหลังมันถูกออกแบบให้ถอดออกได้เป็นพิเศษเพื่อให้คุณสามารถเพลิดเพลินกับทิวทัศน์จากด้านใน และหากต้องการ ก็สามารถทำให้เสร็จหรือทำซ้ำบางอย่างได้ นอกจากนี้ยังมี 2 รูสำหรับตั้งโปรแกรมบอร์ดใหม่และพาวเวอร์ซัพพลาย

ร่างกายติดกาวด้วยกาวอีพอกซีสององค์ประกอบ เป็นที่น่าสังเกตถึงลักษณะเฉพาะของกาวนี้สำหรับผู้ที่ไม่เคยพบมาก่อน ผลิตภัณฑ์นี้มาในภาชนะสองใบแยกกัน และเมื่อส่วนผสมถูกผสม จะเกิดปฏิกิริยาเคมีทันที หลังจากผสมแล้วต้องรีบดำเนินการภายใน 3-4 นาที หากต้องการใช้ต่อไปคุณจะต้องผสมส่วนใหม่ ดังนั้นหากคุณพยายามทำซ้ำ คำแนะนำของฉันคือผสมในปริมาณเล็กน้อยและดำเนินการอย่างรวดเร็ว จะได้มีเวลาคิดไม่มาก ดังนั้นจึงควรคิดล่วงหน้าว่าจะติดร่างกายอย่างไรและที่ไหน ยิ่งกว่านั้นสิ่งนี้ไม่สามารถทำได้ในคราวเดียว

ในการติดแถบด้วยไฟ LED มีการสอดท่อเข้าไปในฝาครอบด้านบนซึ่งสายไฟทั้งหมดผ่านไปได้อย่างสมบูรณ์แบบ

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

คุณต้องการพูดอะไรในตอนท้าย?

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

ฉันอยากจะทราบว่านี่เป็นภาคการศึกษาที่น่าสนใจและเป็นโอกาสที่ดีที่จะลองทำสิ่งที่ไม่ได้เขียนบนกระดาษ ซึ่งฉันสามารถทำเครื่องหมายอีกอันไว้ข้างรายการ "ความฝันในวัยเด็ก" ได้ และถ้าคุณคิดว่าการลองทำอะไรใหม่ๆ นั้นยาก และไม่รู้ว่าต้องทำอะไรก่อนก็อย่ากังวล หลายๆ คนมีความคิดที่ลอยอยู่ในหัว: จะเริ่มต้นที่ไหน และจะทำได้อย่างไร? มีงานมากมายในชีวิตที่คุณอาจสับสนได้ แต่เมื่อคุณลองแล้ว คุณจะสังเกตเห็นว่าด้วยการกระพริบตาในดวงตาของคุณ คุณสามารถเคลื่อนย้ายภูเขาได้ แม้ว่าคุณจะต้องลองเพียงเล็กน้อยก็ตาม

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

ความต้านทานของโฟโตรีซีสเตอร์ขึ้นอยู่กับแสงที่ตกกระทบ เมื่อใช้โฟโตรีซีสเตอร์ร่วมกับตัวต้านทาน 4.7 kOhm ทั่วไป เราจะได้ตัวแบ่งแรงดันไฟฟ้าซึ่งแรงดันไฟฟ้าที่ผ่านโฟโตรีซีสเตอร์จะเปลี่ยนไปตามระดับแสง

เราใช้แรงดันไฟฟ้าจากตัวแบ่งกับอินพุตของ Arduino ADC ที่นั่นเราเปรียบเทียบค่าผลลัพธ์กับเกณฑ์ที่กำหนดแล้วเปิดหรือปิดหลอดไฟ

แผนภาพวงจรของตัวแบ่งแสดงอยู่ด้านล่าง เมื่อแสงสว่างเพิ่มขึ้น ความต้านทานของโฟโตรีซีสเตอร์จะลดลง และแรงดันไฟฟ้าที่เอาท์พุตของตัวแบ่ง (และอินพุต ADC) จะเพิ่มขึ้นตามไปด้วย เมื่อแสงสว่างลดลง ทุกอย่างก็กลับกลายเป็นตรงกันข้าม

ภาพด้านล่างแสดงวงจรที่ประกอบบนเขียงหั่นขนม แรงดันไฟฟ้า 0V และ 5V นำมาจาก Arduino Pin A0 ใช้เป็นอินพุต ADC

ด้านล่างเป็นภาพร่าง Arduino ในบทช่วยสอนนี้ เราเพียงแค่เปิดและปิด LED ที่ติดตั้งอยู่ในบอร์ด Arduino คุณสามารถเชื่อมต่อ LED ที่สว่างกว่าเข้ากับขา 13 ได้ (ผ่านตัวต้านทาน ~ 220 โอห์ม) หากคุณเชื่อมต่อโหลดที่ทรงพลังกว่าเช่นหลอดไส้ก็ควรเชื่อมต่อผ่านรีเลย์หรือไทริสเตอร์

มีส่วนแสดงความคิดเห็นในโค้ดโปรแกรม ซึ่งใช้สำหรับการดีบัก จะสามารถควบคุมค่า ADC ได้ (ตั้งแต่ 0 ถึง 1,024) นอกจากนี้ คุณต้องเปลี่ยนค่า 500 (เกณฑ์เปิดและปิด) ในโค้ดเป็นค่าที่คุณเลือกทดลองโดยการเปลี่ยนความสว่าง

/* ** ไฟกลางคืน ** ** www.hobbytronics.co.uk */ int sensorPin = A0; // ตั้งค่าขาอินพุตสำหรับ ADC int sensorValue ที่ไม่ได้ลงนาม = 0; // ค่าดิจิทัลของการตั้งค่าโมฆะของโฟโตรีซีสเตอร์ () ( pinMode (13, OUTPUT); Serial.begin (9600); // เริ่มเอาต์พุตข้อมูลอนุกรม (สำหรับการทดสอบ) void loop () ( sensorValue = analogRead (sensorPin); // อ่านค่าจากโฟโตรีซีสเตอร์ if(sensorValue<500) digitalWrite(13, HIGH); // включаем else digitalWrite(13, LOW); // выключаем // Для отладки раскомментируйте нижеследующие строки //Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024) //Serial.println(""); // возврат каретки //delay(500); }

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

ตัวกระจายแสงจากหลอดไฟ LED ฐาน E27
- แหล่งจ่ายไฟ 5V
- Arduino โปรมินิ 5V
- USB-TTL (สำหรับการอัพโหลดภาพร่างไปยัง Arduino)
- LED WS2812
- พลาสติกบาง
- เทปสองหน้า
- ไม่จำเป็นต้องชาร์จจากโทรศัพท์ แต่ใช้งานได้
- หัวแร้ง
- สายไฟ
- บัดกรีขัดสน
- ปืนกาวร้อน

ขั้นตอนที่ 1. การสร้างร่างกาย
ก่อนอื่นเราต้องมีตัวกระจายสัญญาณ เราใช้หลอดไฟ LED ที่มีฐาน E27 แน่นอนว่าควรใช้หลอดไฟที่ใช้แล้วดีกว่า:

ด้วยมือข้างหนึ่งเราจับหลอดไฟไว้ที่ฐานและตัวเครื่องที่เป็นพลาสติก ส่วนมืออีกข้างจับมันด้วยตัวกระจายแสงและหักหลอดไฟ ดิฟฟิวเซอร์ควรหลุดออกจากตัวเครื่องได้ง่าย เนื่องจากมีเฉพาะสารเคลือบหลุมร่องฟันเท่านั้นที่ยึดไว้:

ตอนนี้เราต้องสร้างฐานสำหรับติดไฟ LED ในการทำเช่นนี้เราใช้พลาสติกบาง ๆ โดยจะมีฝาปิดจากแฟ้มพลาสติก ตอนนี้เราวัดเส้นผ่านศูนย์กลางด้านในของรูยึดของดิฟฟิวเซอร์ และเรายังต้องวัดความลึกของดิฟฟิวเซอร์ด้วย เรามาทำฐานกันต่อ มันจะอยู่ในรูปทรงกระบอกซึ่งมีเส้นผ่านศูนย์กลางควรน้อยกว่าเส้นผ่านศูนย์กลางภายในของรูยึดของดิฟฟิวเซอร์ 5 มม. และความสูงน้อยกว่าความลึกของดิฟฟิวเซอร์ 7 มม. มันควรมีลักษณะดังนี้:

ปล่อยให้มันเป็นอย่างนั้นตอนนี้

ขั้นตอนที่ 2 ไฟฟ้า
อย่างที่บอกไปก่อนหน้านี้ คอนโทรลเลอร์จะเป็น Arduino Pro Mini ซึ่งเป็นเวอร์ชันที่ใช้ไฟ 5 โวลต์ แถบ LED เชื่อมต่อค่อนข้างง่าย ในการทำเช่นนี้คุณต้องเชื่อมต่อหน้าสัมผัส +5V เข้ากับขั้วบวกจากแหล่งจ่ายไฟ 5 โวลต์และ GND เข้ากับขั้วลบ เชื่อมต่อพิน DIN (อินพุต) เข้ากับพิน 6 ของ Arduino พอร์ตการเชื่อมต่อริบบิ้นสามารถเปลี่ยนเป็นพอร์ตที่สะดวกในแบบร่างได้ เราจะจ่ายไฟให้กับ Arduino จากแหล่งจ่ายไฟเดียวกัน เนื่องจากเราจะใช้แหล่งจ่ายไฟที่มีความเสถียร เราจึงเชื่อมต่อเครื่องหมายบวกจากแหล่งจ่ายไฟเข้ากับพิน 5V บน Arduino ขั้วลบของแหล่งจ่ายไฟจะต้องเชื่อมต่อกับ GND ของ Arduino โครงการเป็นดังนี้:

ดังนั้น LED หนึ่งดวงที่ความสว่างสูงสุดของทั้งสามสีจะกินไฟ 60 mA ฉันพอดี 25 ดังนั้นปรากฎว่า:

25 x 60 mA = 1500 mA = 1.5 A

นั่นคือฉันต้องการแหล่งจ่ายไฟ 5 V, 1.5 A นี่คือตัวบ่งชี้กระแสสูงสุดที่จะเป็นเมื่อไฟ LED ทั้งหมดเปิดไปที่โหมดความสว่างสูงสุดของทั้งสามสี

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

เราตัดปลั๊กออกแล้วบัดกรีสายไฟเข้ากับเทปโดยตรงอย่าลืมตรวจสอบขั้วด้วยเครื่องทดสอบหรือมัลติมิเตอร์ คุณควรสร้างสายไฟสำหรับจ่ายไฟให้กับ Arduino และสายสัญญาณจากเทปไปยัง Arduino

เราสร้างช่องที่ส่วนล่างของกระบอกสูบเพื่อผ่านหน้าสัมผัสของเทปโดยมีสายบัดกรีอยู่ข้างใน:

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

หากคุณได้รับผลลัพธ์เดียวกัน อย่าเพิ่งอารมณ์เสีย เพียงตัดเทปที่ห้อยอยู่ที่ขอบออกแล้วบัดกรีสายไฟเข้ากับ LED โดยตรง ผู้ติดต่อ WS2812:

โปรดทราบว่าแถบ LED บน WS2812B มีทิศทาง ด้านหนึ่ง (จุดเริ่มต้นหรืออินพุต) มีหน้าสัมผัส DIN, +5V, GND และอีกด้านหนึ่ง (ปลายหรือเอาต์พุต) DO, +5V, GND หากคุณบัดกรีโดยตรงกับ LED ให้ดูที่ตำแหน่งของหน้าสัมผัสโดยเน้นที่ปุ่ม (มุมตัด) เพื่อให้การติดตั้งง่ายขึ้น ลูกศรแสดงทิศทางจะถูกวาดไว้บนเทป ให้ความสนใจเป็นพิเศษกับการเปลี่ยนไปด้านบนดูเหมือนว่าจะโค้งงอมากและมีความเป็นไปได้สูงที่จะทำให้เทปแตก ฉันได้รับมันเช่นนี้:


บัดกรีโดยตรงกับ LED จากด้านบน:

และตรงกลางที่ระดับที่สองจะมีไฟ LED อีกสองสามดวง:

และเพื่อความน่าเชื่อถือให้เติมสายไฟด้วยกาวร้อน:

ตอนนี้เราใส่กระบอกสูบของเราโดยมีไฟ LED อยู่ในลูกบอลจากหลอดไฟ ใช้กาวร้อนยึดกระบอกสูบภายในลูกบอลเป็นวงกลม:

อย่าลืมทำช่องให้สายไฟออกมา:

ขั้นตอนที่ 3 การเตรียมสภาพแวดล้อมและเฟิร์มแวร์
ในการดาวน์โหลดภาพร่าง (หรือเฟิร์มแวร์) เราจะใช้ Arduino IDE ดาวน์โหลดเวอร์ชันล่าสุดจากเวอร์ชันอย่างเป็นทางการแล้วติดตั้ง

หากต้องการทำสิ่งนี้ ให้ดาวน์โหลดไฟล์เก็บถาวรก่อน จากนั้นคลายไฟล์เก็บถาวรนี้ และย้ายไฟล์ที่คลายแพ็กแล้วไปยังโฟลเดอร์ “libraries” ซึ่งอยู่ในโฟลเดอร์ที่ติดตั้ง Arduino IDE สามารถทำให้ง่ายขึ้นได้ เปิดตัว Arduino IDE เราไม่แตกไฟล์ที่ดาวน์โหลดมา ใน Arduino IDE เลือกรายการเมนู Sketch – Connect Library ที่ด้านบนสุดของรายการแบบเลื่อนลง ให้เลือก “ไลบรารี Add.Zip” กล่องโต้ตอบควรปรากฏขึ้น จากนั้นเลือกไลบรารีของเรา Adafruit_NeoPixel-master มันคุ้มค่าที่จะรอสักหน่อย เปิดรายการเมนู ร่าง – เชื่อมต่อไลบรารี อีกครั้ง ตอนนี้ที่ด้านล่างสุดของรายการแบบเลื่อนลง คุณจะเห็นไลบรารีใหม่ หลังจากรีสตาร์ท Arduino IDE คุณจะสามารถใช้ไลบรารี่ได้

ดาวน์โหลดร่างของฉัน:

สิ่งที่เหลืออยู่คือการอัปโหลดภาพร่างไปยัง Arduino เราใช้ Arduino Pro Mini Arduino ยอดนิยมเวอร์ชันนี้ไม่มีชิป USB-TTL บัดกรีอยู่บนบอร์ด ดังนั้น หากต้องการสื่อสารกับคอมพิวเตอร์และอัปโหลดภาพร่าง คุณต้องใช้ USB-TTL แยกต่างหาก การเชื่อมต่อตามแผนภาพต่อไปนี้:

Arduino - USB-TTL
RX (P0) – เท็กซัส
เท็กซัส (P1) – RX
จีเอ็นดี - จีเอ็นดี

ไฟ USB-TTL จะจ่ายจากพอร์ต USB ของคอมพิวเตอร์ Arduino สามารถใช้พลังงานจาก USB-TLL หรือใช้แหล่งจ่ายไฟภายนอก สิ่งสำคัญคือเชื่อมต่อพิน GND ของ USB-TTL และ Arduino แล้ว บ่อยครั้งที่คุณเจอ USB-TTL ที่ไม่มีเอาต์พุตพิน DTR ต้องเชื่อมต่อพิน DTR เข้ากับรีเซ็ต Arduino เพื่อทำการรีเซ็ตอัตโนมัติก่อนอัปโหลดภาพร่าง หากคุณไม่มีเอาต์พุตนี้เหมือนฉัน คุณต้องรีบูตด้วยตนเองก่อนที่จะอัปโหลดภาพร่าง เราทำเช่นนี้: เราเชื่อมต่อทุกคนตามรูปแบบที่อธิบายไว้ข้างต้น เปิด Arduino IDE เปิดภาพร่างที่คุณดาวน์โหลด กดปุ่ม - ดาวน์โหลด - และดูสิ่งที่เขียนไว้ด้านล่าง ในขณะที่กำลัง "รวบรวม" เราไม่ได้ทำอะไรเลย เราแค่รอให้คำว่า "ดาวน์โหลด" ปรากฏขึ้น เราต้องกดปุ่มรีเซ็ตบน Arduino หากไม่สะดวกกดปุ่มบนบอร์ดสามารถแสดงปุ่มที่เชื่อมต่อกับ GND และรีเซ็ตได้ หรือเพียงนำสายไฟไปที่ขั้วต่อเดียวกันแล้วปิดให้ถูกเวลา

ฉันอยากจะบอกว่ามีตัวเลือกมากมายในการให้แสงสว่างยามค่ำคืนฉันเขียนเพียงไม่กี่อย่างที่ฉันชอบลงในแบบร่าง คุณสามารถแก้ไขร่างได้ตามต้องการ ทดลองและเลือกสิ่งที่คุณชอบที่สุด

ในการทดลองนี้ LED ควรเปิดเมื่อระดับแสงลดลงต่ำกว่าเกณฑ์ที่กำหนดโดยโพเทนชิออมิเตอร์

รายการชิ้นส่วนสำหรับการทดลอง

- บอร์ด Arduino Uno 1 อัน;

- เขียงหั่นขนมไร้บัดกรี 1 อัน

- ไฟ LED 1 ดวง;

- โฟโตรีซีสเตอร์ 1 ตัว

- ตัวต้านทาน 1 ตัวที่มีค่าระบุ 220 โอห์ม, ตัวต้านทาน 1 ตัวที่มีค่าระบุ 10 kOhms

- ตัวต้านทานปรับค่าได้ 1 ตัว (โพเทนชิออมิเตอร์)

- สายไฟตัวผู้-ตัวผู้ 10 เส้น

รายละเอียดสำหรับงานเพิ่มเติม

ไฟ LED อีก 1 ดวง;

ตัวต้านทานอีก 1 ตัวที่มีค่าเล็กน้อย 220 โอห์ม

อีก 2 สาย.

แผนผังวงจร

แผนภาพบนเขียงหั่นขนม

ร่าง

ดาวน์โหลดภาพร่างสำหรับ Arduino IDE
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // อ่านระดับความสว่าง อย่างไรก็ตาม // คุณสามารถประกาศตัวแปรและกำหนดได้ ค่าของมันในครั้งเดียว int lightness = analogRead(LDR_PIN); // อ่านค่าจากโพเทนชิออมิเตอร์ซึ่งเราใช้ในการปรับ // ค่าเกณฑ์ระหว่างความมืดแบบมีเงื่อนไขและเกณฑ์ int แสง = analogRead(POT_PIN); ตัวแปรลอจิคัลและกำหนดค่า // “ตอนนี้มืดแล้ว” ตัวแปรบูลีนไม่เหมือนกับ // จำนวนเต็มสามารถมีเพียงค่าใดค่าหนึ่งจากสองค่า: // จริงหรือเท็จ ค่าดังกล่าว // เรียกอีกอย่างว่าบูลีน (boolean tooDark =). (ความสว่าง< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

คำอธิบายสำหรับหลักปฏิบัติ

  • เรากำลังใช้ตัวแปรชนิดใหม่ - บูลีนซึ่งเก็บเฉพาะค่าเท่านั้น จริง (จริง 1) หรือ เท็จ (เท็จ 0- ค่าเหล่านี้เป็นผลมาจากการประเมินนิพจน์บูลีน ในตัวอย่างนี้ นิพจน์บูลีนคือ ความเบา< threshold - ในภาษามนุษย์จะฟังดูเหมือน: “ความสว่างต่ำกว่าระดับธรณีประตู” ข้อความดังกล่าวจะเป็นจริงเมื่อแสงสว่างต่ำกว่าระดับเกณฑ์ ไมโครคอนโทรลเลอร์สามารถเปรียบเทียบค่าของตัวแปรได้ ความเบาและ เกณฑ์ซึ่งจะเป็นผลการวัดและคำนวณความจริงของนิพจน์เชิงตรรกะ
  • เราใส่นิพจน์เชิงตรรกะนี้ไว้ในวงเล็บเพื่อความชัดเจนเท่านั้น การเขียนโค้ดที่อ่านง่ายจะดีกว่าเสมอ ในกรณีอื่นๆ วงเล็บอาจส่งผลต่อลำดับการดำเนินการได้เช่นเดียวกับในเลขคณิตทั่วไป
  • ในการทดลองของเรา นิพจน์บูลีนจะเป็นจริงเมื่อค่าดังกล่าว ความเบาน้อยกว่ามูลค่า เกณฑ์เพราะเราใช้โอเปอเรเตอร์ < - เราสามารถใช้ตัวดำเนินการ > , <= , >= , = = , != ซึ่งหมายถึง "มากกว่า" "น้อยกว่าหรือเท่ากับ" "มากกว่าหรือเท่ากับ" "เท่ากับ" "ไม่เท่ากับ" ตามลำดับ
  • ระมัดระวังเป็นพิเศษกับตัวดำเนินการเชิงตรรกะ = = และอย่าสับสนกับผู้ปฏิบัติงานที่ได้รับมอบหมาย = - ในกรณีแรก เราจะเปรียบเทียบค่าของนิพจน์และรับค่าตรรกะ (จริงหรือเท็จ) และในกรณีที่สอง เราจะกำหนดค่าของตัวถูกดำเนินการที่ถูกต้องให้กับตัวถูกดำเนินการทางซ้าย คอมไพเลอร์ไม่ทราบความตั้งใจของเราและจะไม่แสดงข้อผิดพลาด แต่เราสามารถเปลี่ยนค่าของตัวแปรบางตัวโดยไม่ตั้งใจและใช้เวลานานในการค้นหาข้อผิดพลาด
  • ตัวดำเนินการแบบมีเงื่อนไข ถ้าถ้า") เป็นหนึ่งในภาษาหลักในภาษาโปรแกรมส่วนใหญ่ ด้วยความช่วยเหลือนี้ เราไม่เพียงแต่สามารถดำเนินการตามลำดับการกระทำที่กำหนดไว้อย่างเคร่งครัดเท่านั้น แต่ยังตัดสินใจได้ว่าควรปฏิบัติตามสาขาใดของอัลกอริทึม ขึ้นอยู่กับเงื่อนไขบางประการ
  • สำหรับการแสดงออกทางตรรกะ ความเบา< threshold มีความหมาย: จริงหรือ เท็จ- เราคำนวณและใส่ไว้ในตัวแปรบูลีน มืดเกินไป(“มืดเกินไป”) เลยดูเหมือนเราจะพูดว่า “ถ้ามืดไปก็เปิดไฟ LED”
  • ด้วยความสำเร็จแบบเดียวกัน เราสามารถพูดได้ว่า "หากแสงสว่างน้อยกว่าระดับเกณฑ์ ให้เปิด LED" กล่าวคือ โอนไปที่ ถ้าการแสดงออกเชิงตรรกะทั้งหมด:
ถ้า (ความสว่าง< threshold) { // ... }
  • เบื้องหลังคำสั่งแบบมีเงื่อนไข ถ้าจะต้องมีบล็อกของโค้ดที่ถูกดำเนินการหากนิพจน์เชิงตรรกะเป็นจริง อย่าลืมเหล็กดัดฟันทั้งสองอันด้วย {} !
  • หากนิพจน์เป็นจริง เราเพียงแต่ต้องดำเนินการเท่านั้น หนึ่ง คำแนะนำสามารถเขียนได้ทันทีหลังจากนั้น ถ้า (…)ไม่มีเหล็กดัดฟัน:
ถ้า (ความสว่าง< threshold) digitalWrite(LED_PIN, HIGH);
  • ผู้ดำเนินการ ถ้าสามารถขยายได้โดยการออกแบบ อื่น("มิฉะนั้น"). บล็อกของโค้ดหรือคำสั่งเดียวที่ตามมาจะถูกดำเนินการเฉพาะในกรณีที่นิพจน์เชิงตรรกะเข้ามา ถ้าเรื่อง เท็จ , « โกหก- กฎเกี่ยวกับเหล็กดัดฟันจะเหมือนกัน ในการทดลองของเรา เราเขียนว่า "ถ้ามันมืดเกินไป ให้เปิด LED หรือไม่ก็ปิด LED"

คำถามเพื่อทดสอบตัวเอง

  1. หากเราติดตั้งโฟโตรีซีสเตอร์ระหว่างอินพุตแบบอะนาล็อกและกราวด์ อุปกรณ์ของเราจะทำงานย้อนกลับ: LED จะเปิดเมื่อปริมาณแสงเพิ่มขึ้น ทำไม
  2. เราจะได้ผลลัพธ์อะไรจากการทำงานของอุปกรณ์หากแสงจาก LED ตกกระทบกับโฟโตรีซีสเตอร์
  3. หากเราติดตั้งโฟโตรีซีสเตอร์ตามคำถามที่แล้ว จะต้องเปลี่ยนโปรแกรมอย่างไรให้อุปกรณ์ทำงานได้อย่างถูกต้อง?
  4. สมมติว่าเรามีรหัส ถ้า (เงื่อนไข) (การกระทำ;)- จะทำในกรณีใดบ้าง? การกระทำ ?
  5. อยู่ที่ค่าไหน. การแสดงออก x + y > 0จะเป็นจริงถ้า x > 0 ?
  6. จำเป็นต้องระบุคำสั่งที่จะดำเนินการหรือไม่หากเงื่อนไขอยู่ในคำสั่ง ถ้าเท็จ?
  7. ความแตกต่างระหว่างตัวดำเนินการคืออะไร = = จากผู้ปฏิบัติงาน = ?
  8. หากเราใช้การก่อสร้าง ถ้า (เงื่อนไข) การกระทำ 1; การกระทำอื่น2;อาจมีสถานการณ์ที่ไม่มีการดำเนินการใดๆ หรือไม่? ทำไม

ภารกิจสำหรับการแก้ปัญหาอย่างอิสระ

  1. เขียนโปรแกรมใหม่โดยไม่ใช้ตัวแปร มืดเกินไปในขณะที่ยังคงการทำงานของอุปกรณ์ไว้
  2. เพิ่ม LED อื่นลงในวงจร ดำเนินโปรแกรมให้เสร็จสิ้นเพื่อที่ว่าเมื่อไฟส่องสว่างต่ำกว่าค่าเกณฑ์ ไฟ LED ดวงหนึ่งจะเปิดขึ้น และเมื่อไฟส่องสว่างลดลงต่ำกว่าครึ่งหนึ่งของค่าเกณฑ์ ไฟ LED ทั้งสองดวงจะเปิด
  3. เปลี่ยนวงจรและโปรแกรมเพื่อให้ไฟ LED เปิดตามหลักการเดียวกัน แต่ยิ่งเรืองแสงเข้มขึ้น แสงก็จะตกบนโฟโตรีซีสเตอร์น้อยลง



2024 wisemotors.ru. วิธีนี้ทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล