Lesson 18 Automatic door 1 What you will need CloudProfessor (CPF) PIR (Motion) sensor Servo Arduino Leonardo Arduino Shield USB cable Overview In this lesson, students explore automated systems such as automatic doors and lighting. Using a PIR sensor and a servo, students will write a program to simulate an automatic door. Learning Objectives Design and create an app which uses sequence, selection, repetition and variables. Program, debug and refine the code for their app. Understand and use selection in an algorithm (IF, Else and Else if) Learning Expectations (how learning / progress will be demonstrated) All Use sequences of instructions. Most Explain how their app works. Some Use logical reasoning to detect errors in their algorithms. Curriculum Links (Computing PoS) Designs simple algorithms using loops, and selection i.e. if statements. (AL) Uses logical reasoning to predict outcomes. (AL) Detects and corrects errors i.e. debugging, in algorithms. (AL) Creates programs that implement algorithms to achieve given goals. (AL) Understands that programming bridges the gap between algorithmic solutions and computers. (AB) Computational Thinking Concepts: AB = Abstraction; DE = Decomposition; AL = Algorithmic Thinking; EV = Evaluation; GE = Generalisation. 1 Lesson 18: Room Alarm
Step-by-step instructions (Blockly) 1. Connect the power of CloudProfessor then press and hold the power button for two seconds; it will turn on and the power indicator will light up.. Insert the Android Shield into Arduino Leonardo and use the USB cable to connect the CloudProfessor with Arduino Leonardo. Attach the PIR (motion) sensor to port D6 and the servo to port D4.. When the CloudProfessor detects the Arduino Leonardo, a notification will appear on your device; click the notification to launch the Arduino Leonardo APP, and select the CPF Arduino Blockly app. Click on Lesson 9. 1 4. Press the execute button to enter the control user interface (UI). 5. Press the edit button to enter the program editing page. Edit button Execute button CPF Arduino app Control user interface (UI) Program editing page Lesson 18: Room Alarm
Code recap (Blockly) Let s explore some of the code used in the previous lessons. 1. PIR Motion Sensor Get Value: The PIR Motion Sensor Get Value block returns the status of the PIR motion sensor (Returns a numeric value of 0 if no motion detected and a 1 if triggered).. Servo Pin# D4: The Servo block allows the user to control the attached servo by specifying the angle (degrees) and delay (milliseconds).. If / else: The if / else block is used to conditionally run code depending on whether a Boolean condition is true or false. In this example, if the light sensor value is less than (<) 500, the RGB LED light will light up; or else (else), if the light sensor value is greater than or equal to 500, the RGB LED light will automatically turn off. 4. Title Name Panel Set: The Title Name Panel Set block displays a message on the screen. In this example it will display a Downloading message on the UI (User Interface). 5. Delay Time(Sec.): The Delay Time(Sec.) block is used to pause the code (time set in milliseconds). In the example above, the program is paused for 1000 milliseconds (1 second). 6. Set CPF control request: Finally, the Set CPF control request block at the end of the program tells the program to run the code from the beginning again. The program will continuously repeat until the user closes the app or stops the program manually. Lesson 18: Room Alarm
4 Step-by-step instructions (Blockly) - Part 1 Let s write the code for our automatic door. 1. Clear the existing code so that you have a blank canvas to create your new program. Click on the bin icon (1). Click on OK () to create a blank canvas. 1. Note: You can return to the original program at any time by clicking on the restore icon ().. First, let s give our app a title. Click on CPF UI. Drag the Title Name Panel Set block onto the empty canvas. Call your app CPF Door. 4. Next, we need to check the status of button d5 in the user interface (UI). We will use this button to turn on and off your Theremin. a) Click on the Variables tab. Drag the Set item to block and attach it to the Title block. Rename the new variable to d6 (4). 4 b) Click on the CPF UI tab. Select and drag the Get control panel value block and attach it to d6. From the drop down menu, select d6 (5). 5 5. Next, let s display the status of the PIR sensor on the user interface (UI). a) Click on the CPF UI tab. Select and drag the Set control panel value block and attach it to the end of your code. From the drop down menu, select port D6 (6). 6 b) Click on the Variables tab. Select d6 and place it inside the Set control panel value block (7). 7 4 Lesson 18: Room Alarm
4 Step-by-step instructions (Blockly) - Part 6. Next, we need to write the condition which checks to see if the PIR has detected movement (PIR = 1). For this, we will use an IF statement. a). Click on the Logic tab. Drag the if do block and attach it to the end of your code (8). 8 9 b). Click on the logic tab. Drag the = block and attach it to your if block (9). c). Click on the CPF Devices tab. Select and drag the Light Get Value block onto the first slot in your logic block (10). 10 d). Click on the Math tab. Drag the 0 block onto the second slot in your logic block. Change this value to a 1 (11). 11 7. Next, we need to rotate the servo 180 degrees when movement is detected else return the servo back to the starting position (0 degrees) when no movement is detected. a) Click on Output Devices. Select Motors and drag the Servo Pin# D4 block and attach it to your code. b) Change the number of degrees to 180 and the delay to 0 ms (1). 1 c) Click the cog inside your if block. Drag an else block inside the pop-up window (1). d) Click on Output Devices. Select Motors and drag the Servo Pin# D4 block inside the else statement. b) Change the number of degrees to 0 and the delay to 0 ms (14). 1 14 8. Finally, we want the program to run continuously until the user ends the program. Select the CPF Devices tab. Click and drag the Set CPF control repeat block and attach it to the end of your code. Your finished code should look like this. Try changing the delay and/or angle to see how it affects the servo. 5 Lesson 18: Room Alarm
Step-by-step instructions 1. Connect the power of CloudProfessor then press and hold the power button for two seconds; it will turn on and the power indicator will light up.. Insert the Android Shield into Arduino Leonardo and use the USB cable to connect the CloudProfessor with Arduino Leonardo. Attach the PIR (motion) sensor to port D6 and the servo to port D4.. When the CloudProfessor detects the Arduino Leonardo, a notification will appear on your device; click the notification to launch the Arduino Leonardo APP, and select the CPF Arduino app. Click on Socket Mode. 1 4. Press the execute button to enter the control user interface (UI). 5. Press the edit button to enter the program editing page. Edit button Execute button CPF Arduino app Control user interface (UI) Program editing page 6 Lesson 18: Room Alarm
Code recap (JavaScript) Let s explore some of the code used in the previous lessons. 1. cpf.get( light sensor ); The cpf.get( light sensor ); statement returns the value of the light sensor. (Returns a numeric value based on the brightness level of the environment) and stores it in a variable called value. ui.set( light sensor, value); reads the value taken from the light sensor and displays it in the program control Interface (UI).. cpf.set( rgb led, 0, 0, 0); The cpf.set( rgb led, r, g, b); statement sets the colour of the attached RGB LED.. If / else: The if / else statement is used to conditionally run code depending on whether a Boolean condition is true or false. In this example from lesson 1, if the light sensor value is less than (<) 500, the RGB LED light will light up (based on the values taken from the UI); or else (else), if the light sensor value is greater than (>) 500, the RGB LED light will automatically turn off: cpf.set( rgb led, 0, 0, 0); 4. Math.random() Through Math.random(), a random number between 0 and 0.999999 is generated. If we want to generate a whole number in a range such as 1 55 we first need to multiply the result of the random function by 55 and then round the result to produce a whole number e.g., 5. cpf.sleep(1000); The cpf.sleep(1000); statement is used to pause the code (time set in milliseconds). In the example above, the program is paused for 1000 milliseconds (1 second). 6. Set CPF control request: Finally, the cpf.repeat(); statement, usually found at the end of the program, tells the program to run the code from the beginning again. The program will continuously repeat until the user closes the app or stops the program manually. 7 Lesson 18: Room Alarm
Step-by-step instructions (JavaScript) 4 Let s write the code for our automatic doors. 1. Clear the existing code so that you have a blank canvas to create your new program. Press and hold on a selection of code and click on Select all (1). Click on Cut () to create a blank canvas (). 1 Note: You can return to the original program at any time by clicking on the restore icon in the Save/load menu.. First, let s give our new script a name. Click on line 1 and type in the following: //Servo. Next, we need to read the status of the PIR motion sensor and display the current status on the user interface (UI). Click on line and type in the following: //Control PIR var d6 = cpf.get( socket d6 ); ui.set( socket d6, d6); 4. Next, we need to write the condition which checks to see if the PIR has detected movement (PIR = 1). For this, we will use an IF statement. Click on line 7 and type in the following (making sure you leave a blank line on line 8): if(d6 == 1) { } 5. Next, we need to rotate the servo 180 degrees when movement is detected else return the servo back to the starting position (0 degrees) when no movement is detected. The syntax for moving the servo is cpf.set(socket, angle, delay). Click on line 8 and type in the following: cpf.set( socket d4, 180, 0); } else { cpf.set( socket d4, 0, 0); 6. Finally, we want the program to run until the user ends the program. Click on line 4 and type the following: cpf.repeat(); 7. Run your code. Your finished code should look like this. Try changing the delay and/or angle to see how it affects the servo. Try swapping the PIR sensor for a button. 8 Lesson 18: Room Alarm
5 Extension Students can connect a buzzer to port D5 or RGB LED to port D7 and program the CloudProfessor to warn when the door is opening (see lesson 16). Students could also attach a sound sensor to port A and operate the door with voice commands. Hint: var a = cpf.get("socket a"); if(d5 == 1) { 6 Differentiation To support students, provide step by step guides. To stretch students ask them to create a flowchart / pseudocode of their code first or code their solution using JavaScript. 7 Homework Students to write up a summary of what they ve learned; students to include screenshots and snippets of their code in their summary. Students to explore how automatic doors work and explain the benefits / drawbacks of automated systems. 8 Links How PIRs work: https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/how-pirs-work How automatic doors work: https://www.scienceabc.com/innovation/automatic-sliding-doors-working-motion-detector -pressure-sensor-infrared.html Disclaimer: Use these sites at your own risk. Acer is not responsible for the content of external Internet sites. We recommend that you check the suitability of any recommended websites links before giving them to students. 9 Lesson 18: Room Alarm