diff --git a/docs/design-engineering.md b/docs/design-engineering.md index 2c206c8f..3dfe0268 100644 --- a/docs/design-engineering.md +++ b/docs/design-engineering.md @@ -20,9 +20,9 @@ }, { "name": "Make a System that Communicates", - "description": "TBD", - "imageUrl": "/static/lessons/make-a-system.png", - "url": "/design-engineering/make-it-move", + "description": "A robot that tells you what it is doing.", + "imageUrl": "/static/lessons/make-it-communicate.png", + "url": "/design-engineering/make-it-communicate", "cardType": "side" } ] diff --git a/docs/design-engineering/make-it-communicate.md b/docs/design-engineering/make-it-communicate.md new file mode 100644 index 00000000..b7e944b3 --- /dev/null +++ b/docs/design-engineering/make-it-communicate.md @@ -0,0 +1,164 @@ +# Make A System That Communicates + +## Connect + +### Design Brief + +Design, build and program a robotic system that follows a path and communicates its position at least twice along the way. + +https://www.youtube.com/watch?v=6piMI1JPDQc + +* Robotic systems are built from smaller, related subsystems. Look at the automobile system shown in the video. What subsystems can you see? +* What kinds of robots follow a path? +* What kind of system do you want to make? + +### Brainstorm + +Discuss different solutions to the design brief. + +Think about: +* What kind of motorized mechanism can be used to control the movements of a robot? +* How can the robot sense where it is along the path? +* How can the robot communicate its position? + + ![EV3 + LEGO Bricks](/static/lessons/make-it-communicate/hero.png) + +## Construct + +### Build + +You can start by tinkering with the LEGO elements in the picture and then build on. + +More building ideas: +* [EV3 Frames](https://le-www-live-s.legocdn.com/sc/media/files/support/mindstorms%20ev3/building-instructions/design%20engineering%20projects/ev3%20frames-5054ee378e624fb4cb31158d2fc8e5cf.pdf) + +* [Tracks](https://le-www-live-s.legocdn.com/sc/media/files/support/mindstorms%20ev3/building-instructions/design%20engineering%20projects/tracks-32d7554813af3f25cf5012d54a4bad2b.pdf) + +* [Color Sensor 2](https://le-www-live-s.legocdn.com/sc/media/files/support/mindstorms%20ev3/building-instructions/design%20engineering%20projects/color%20sensor_v2-e7fd54b6fa3cdfe36f414c1d2510f9cb.pdf) + + +Build a path for your robot to follow. You can use electrical tape on a floor, or marker on paper. You can use objects as milestones to indicate a path that can be detected by either the Touch Sensor, Color Sensor, or Ultrasonic Sensor. + +## Program + +Before you program, think about: + +* How will you program the robot to follow a path? +* How will you program the robot to communicate its position? +* Which programming blocks will you use? + +### ~ hint + +Explore the different Motor and Sensor blocks in the programming menu. + +### ~ + +### Sample Solution + +[Video: EV3 Track Rover](/static/lessons/make-it-communicate/trackrover.mp4) + +The Track Rover follows a path using the color sensor. It identifies two locations by color. + +[Building Instructions](https://le-www-live-s.legocdn.com/sc/media/lessons/mindstorms-ev3/ev3-dep/building%20instructions/track-rover-bi-6aadb1b053df0c58a0dea108b5ce0eea.pdf) + +### Sample Program Solution + +This program works with the Track Rover. If you create a different robot, adjust the program to fit your solution. + +#### Program summary: + +* If the Color Sensor sees black, Motor B runs at -50 power and Motor C turns off. +* If the Color Sensor sees white, Motor B turns off and Motor C runs at -50 power. +* If the Color Sensor sees green, all motors stop and the green sound plays. +* The robot waits one second, then motors move forward. +* If the Color Sensor sees red, all motors stop, and the red sound plays. +* The robot waits one second, then motors move forward. +* Loops unlimited. + +```blocks +forever(function () { + if (sensors.color3.color() == ColorSensorColor.Black) { + motors.largeB.run(-50) + motors.largeC.run(0) + } else if (sensors.color3.color() == ColorSensorColor.White) { + motors.largeC.run(-50) + motors.largeB.run(0) + } else if (sensors.color3.color() == ColorSensorColor.Green) { + motors.stopAll() + music.playSoundEffectUntilDone(sounds.colorsGreen) + motors.largeBC.run(-50) + } else if (sensors.color3.color() == ColorSensorColor.Red) { + motors.stopAll() + music.playSoundEffectUntilDone(sounds.colorsRed) + motors.largeBC.run(-50) + } else { + + } +}) +``` + +```blocks +sensors.color3.onColorDetected(ColorSensorColor.Black, function () { + motors.largeB.run(-50) + motors.largeC.run(0) +}) +sensors.color3.onColorDetected(ColorSensorColor.White, function () { + motors.largeB.run(0) + motors.largeC.run(-50) +}) +sensors.color3.onColorDetected(ColorSensorColor.Green, function () { + motors.stopAll() + music.playSoundEffect(sounds.colorsGreen) + pause(1000) + motors.largeBC.run(-50) +}) +sensors.color3.onColorDetected(ColorSensorColor.Red, function () { + motors.stopAll() + music.playSoundEffect(sounds.colorsRed) + pause(1000) + motors.largeBC.run(-50) +}) +``` + +### Download and test + +Click Download and follow the instructions to get your code onto your EV3 Brick. Press the center button on the EV3 Brick to run the program. + +## Contemplate + +### Test and Analyze + +As you work on your solution: +1. Describe one part of your design that worked especially well. +2. Describe one design change that you had to make. +3. What will you try next? + + +### Review and Revise +Take a moment to reflect on your robot solution. + +### Think about: +* Can the robot’s movement be more accurate? +* What are some ways that others have solved the problem? + +Describe two ways you could improve your robot. + +## Continue + +### Personalize your project +* Add/remove LEGO elements to improve the way your robot moves. +* Click on the JavaScript tab and experiment with changing the values in the code. +* Add a custom image or sounds by adding blocks from the Brick or Music menus. + +## Communicate + +Here are some ideas: +* Create a video of your project, especially your final presentation and your robot’s performance. +* Explain some important features of your software program. +* Produce a building guide for your model by taking a series of photographs as you deconstruct it. +* Include an image of your program with comments. +* Add a team photograph! + +Congratulations! What will you design next? + + diff --git a/docs/static/lessons/make-it-communicate.png b/docs/static/lessons/make-it-communicate.png new file mode 100644 index 00000000..561c31fa Binary files /dev/null and b/docs/static/lessons/make-it-communicate.png differ diff --git a/docs/static/lessons/make-it-communicate/hero.png b/docs/static/lessons/make-it-communicate/hero.png new file mode 100644 index 00000000..561c31fa Binary files /dev/null and b/docs/static/lessons/make-it-communicate/hero.png differ diff --git a/docs/static/lessons/make-it-communicate/trackrover.mp4 b/docs/static/lessons/make-it-communicate/trackrover.mp4 new file mode 100644 index 00000000..76c8e213 Binary files /dev/null and b/docs/static/lessons/make-it-communicate/trackrover.mp4 differ diff --git a/libs/color-sensor/color.ts b/libs/color-sensor/color.ts index e657a47d..bf78c58a 100644 --- a/libs/color-sensor/color.ts +++ b/libs/color-sensor/color.ts @@ -19,21 +19,21 @@ enum LightIntensityMode { } const enum ColorSensorColor { - //% block="none" jres=colors.none + //% block="none" jres=colors.none blockIdentity=sensors.color None, - //% block="black" jres=colors.black + //% block="black" jres=colors.black blockIdentity=sensors.color Black, - //% block="blue" jres=colors.blue + //% block="blue" jres=colors.blue blockIdentity=sensors.color Blue, - //% block="green" jres=colors.green + //% block="green" jres=colors.green blockIdentity=sensors.color Green, - //% block="yellow" jres=colors.yellow + //% block="yellow" jres=colors.yellow blockIdentity=sensors.color Yellow, - //% block="red" jres=colors.red + //% block="red" jres=colors.red blockIdentity=sensors.color Red, - //% block="white" jres=colors.white + //% block="white" jres=colors.white blockIdentity=sensors.color White, - //% block="brown" jres=colors.brown + //% block="brown" jres=colors.brown blockIdentity=sensors.color Brown } @@ -318,6 +318,11 @@ namespace sensors { //% blockId=colorSensorColor block="color %color" //% group="Color Sensor" //% weight=97 + //% color.fieldEditor="gridpicker" + //% color.fieldOptions.columns=4 + //% color.fieldOptions.tooltips=true + //% color.fieldOptions.hideRect=true + //% color.fieldOptions.width=268 export function color(color: ColorSensorColor): ColorSensorColor { return color; }