Advanced User Control setups
Posted: 15 Oct 2010, 01:16
AUCs, a term I just made up, is a topic that's been on my mind lately.
What do I mean, you might ask?
Well, the NXT comes with 6 forms of input (in no particular order):
1) Sound Sensors,
2) Touch Sensors,
3) built-in Buttons,
4) Rotation Sensors,
5) UltraSonic Sensors,
and 6) Light/Color Sensors.
The Buttons, Tough Sensors, and US Sensor allow for some basic input, while the Light Sensors and Rotation Sensors provide means for some less-than-simple forms of input (see an example of using the LS here). This is because the Rotation Sensor, UltraSonic Sensor, and the Light/Color Sensors give numerical values instead of yes/no. This allows for greater control.
I have some ideas that could, in theory, provide some newer, more intuitive ways of input.
1. Touchscreen/Touchpad
Yes, I know that someone else has made a 'touchscreen' of sorts: by mounting US Sensors and EOPD Sensors (NOT included with the set) around the screen, you got some low-res coordinates that could be interpreted for different uses. But I have a different idea (I came up with this on my own). What if, instead of using real distance sensors, we 'faked' the distance by using something else?
Please allow me explain. The motors can be used as simply rotation sensors. So, what if we did two things to them: 1) we added a spring to the motor so that after turning so far, the spring's resistance would become so great that the motor wouldn't turn much. This would cause it to 'return to zero' when the rotational force was released, and the motor would go back to its original position.
Once we got that working, we could 2) wind some string around an axle protruding from the motor's center. Now, what would happen if we start pulling (in one dimension) on the string? it will cause the motor to unwind, but the farther we go, the harder it will be to pull. then, when we let go, it will start reeling it back in (but not too fast).
Now, let's imagine we have one of these set up on a sliding bar (with the bar's slide measured in the same way), but with them perpendicular to each other. We now have two degrees of registered movement: X and Y. (See where I'm going with this?) We could, in theory, build such a setup so as to attach the tip of the string to a 'stylus' of some sorts, and then place it over the NXT's screen: then, we have X-Y coordinates of our stylus' point going to the NXT, but not whether we are touching anything.
This is where we can incorporate something like a Touch Sensor. If we put a Touch Sensor in the tip of the stylus, we now have X-coordinates, Y-coordinates, and a logic value for whether the screen is touched or not. Once this is accomplished, this method of input can become very useful. Let's imagine that we have 2 feet of string wound around our motors. (It's a very thin string, it takes up almost no space. ) Then, instead of building the setup to fit over the NXT's screen, we just build an open unit that operates the same (just larger). Now you can instantly turn any large, flat surface into a touchpad for your NXT. This could be used for many things.
2. Better Joysticks
There are currently a few great NXT joysticks out there, but I have some ideas for different kinds. (Philo, I think no-one can ever make on as great as yours, but here's my salute to you.)
Most current NXT joysticks use either accelerometers or motors. That's great, especially because motors are easy to code for (at least in NXT-G) and they come with the set (as opposed to accelerometers). But you can build a different kind of joystick, one that doesn't take up much space, as opposed to the motor-based joystick, and is mostly built with components that come with the set, as opposed to the accelerometer-based joystick. The only exceptions are that you have to cut out a piece of white paper, because that doesn't come with the set, and you need a universal joint. While it's not that hard to build one, it seems everyone these days has one (or two, or more).
The best thing (imho) about my first joystick idea, aside from the relatively small size and availability of pieces, is that you operate it like a gaming system's joystick: you move it around with your finger, rather than grasping it with one hand.
The construction of this device is simple, at least in theory. (Not having an NXT set makes it hard to build NXT stuff )
Just have one axle pointing in the Z-dimension (you'd better make it a long one). Sticking off, in the X- and Y-dimensions, should be two short arms that hold light sensors pointing up (Z-dimension). They should both be the same height at the tip, but that' not hard to do.
At this point, you should make sure the tips of the Light Sensors are about 3 Z-levels above the tip of the center piece. Then attach a universal joint to this, and a short axle to the other end (maybe a 2- or 3-rod, as I call them). Then, poke a hole in the middle of your piece of your paper and push it onto the axle, and secure it.
The end result should be like this: you have a light sensor, and a piece of paper directly over it. There should be about 2-3 Z-levels (I guess) of separation. This way, you can tilt the paper forward by pushing forward gently on the place where you secured the paper (in the middle). Assuming you have you Light Sensor's LEDs turned on, you should be increasing your value in one of them while the other stays the same. Since you have two Light Sensors perpendicular to each other, you can use one Sensor's values for the X-plane and the other Sensor's values for the Y-plane (similar in concept to the way you read the data from my touchscreen idea). A similar concept can be seen here.
Another Joystick idea of mine, really a copy of Philippe "Philo" Hurbain's joystick, has an extra trick up its sleeve. This baby has haptic feedback. Oh yeah. The farther you push on the joystick, the more resistance it pushes back with. Why is this helpful, you might wonder? As my good friend sqiddster put it, "this ... means that you will have a really cool 'return to neutral' function."
Or, yet another use for haptic feedback: let's say we're driving Philo's Spy Rover, and we don't want to run into any walls. We could have the Joystick configured so that the closer the rover got to a wall (or other object), the more resistance you get. There are many other uses, the list just goes on and on.
3. D-Pads
When one examines a good gaming device, they usually find some generic features: a screen, some sort of directional controls, specific function buttons (Like A-B-X-Y and Δ-[]-O-X, or L-R/L1-L2-R1-R2), and sound control. Well, The NXT has most of that, and my joystick/touchpad ideas complete the list--except for the D-pads. So I came up with a design for a D-pad. While still very basic (It uses all four touch sensors, and thus takes up all four sensor ports ), it should work. In fact, it could be programmed in such a way so as to recognize more than one button-press at a time. Also, it can easily be programmed so that it continues to continue 'reading' the last button that was pressed, even if it has been released already.
I hope I didn't bore you too much, and I'm glad that you read all the way to the end. My mind is so full of ideas, it seems ready to burst. I have nothing to do but write them down, since I can't really build them yet. I just recently downloaded LDraw, so I've started some preliminary manifestations of the ideas in my head (notably the D-Pad). They are still quite crude, however, as manipulating flat images of Legos on a slow computer is not the best way to let my creativity flow.
Anyways, I hope you enjoyed this short article. If you have any suggestions, or additional theories of your own, please feel free to share them. Thanks again, Mr. Hurbain, for your wonderful Joystick design!
- Stryker
What do I mean, you might ask?
Well, the NXT comes with 6 forms of input (in no particular order):
1) Sound Sensors,
2) Touch Sensors,
3) built-in Buttons,
4) Rotation Sensors,
5) UltraSonic Sensors,
and 6) Light/Color Sensors.
The Buttons, Tough Sensors, and US Sensor allow for some basic input, while the Light Sensors and Rotation Sensors provide means for some less-than-simple forms of input (see an example of using the LS here). This is because the Rotation Sensor, UltraSonic Sensor, and the Light/Color Sensors give numerical values instead of yes/no. This allows for greater control.
I have some ideas that could, in theory, provide some newer, more intuitive ways of input.
1. Touchscreen/Touchpad
Yes, I know that someone else has made a 'touchscreen' of sorts: by mounting US Sensors and EOPD Sensors (NOT included with the set) around the screen, you got some low-res coordinates that could be interpreted for different uses. But I have a different idea (I came up with this on my own). What if, instead of using real distance sensors, we 'faked' the distance by using something else?
Please allow me explain. The motors can be used as simply rotation sensors. So, what if we did two things to them: 1) we added a spring to the motor so that after turning so far, the spring's resistance would become so great that the motor wouldn't turn much. This would cause it to 'return to zero' when the rotational force was released, and the motor would go back to its original position.
Once we got that working, we could 2) wind some string around an axle protruding from the motor's center. Now, what would happen if we start pulling (in one dimension) on the string? it will cause the motor to unwind, but the farther we go, the harder it will be to pull. then, when we let go, it will start reeling it back in (but not too fast).
Now, let's imagine we have one of these set up on a sliding bar (with the bar's slide measured in the same way), but with them perpendicular to each other. We now have two degrees of registered movement: X and Y. (See where I'm going with this?) We could, in theory, build such a setup so as to attach the tip of the string to a 'stylus' of some sorts, and then place it over the NXT's screen: then, we have X-Y coordinates of our stylus' point going to the NXT, but not whether we are touching anything.
This is where we can incorporate something like a Touch Sensor. If we put a Touch Sensor in the tip of the stylus, we now have X-coordinates, Y-coordinates, and a logic value for whether the screen is touched or not. Once this is accomplished, this method of input can become very useful. Let's imagine that we have 2 feet of string wound around our motors. (It's a very thin string, it takes up almost no space. ) Then, instead of building the setup to fit over the NXT's screen, we just build an open unit that operates the same (just larger). Now you can instantly turn any large, flat surface into a touchpad for your NXT. This could be used for many things.
2. Better Joysticks
There are currently a few great NXT joysticks out there, but I have some ideas for different kinds. (Philo, I think no-one can ever make on as great as yours, but here's my salute to you.)
Most current NXT joysticks use either accelerometers or motors. That's great, especially because motors are easy to code for (at least in NXT-G) and they come with the set (as opposed to accelerometers). But you can build a different kind of joystick, one that doesn't take up much space, as opposed to the motor-based joystick, and is mostly built with components that come with the set, as opposed to the accelerometer-based joystick. The only exceptions are that you have to cut out a piece of white paper, because that doesn't come with the set, and you need a universal joint. While it's not that hard to build one, it seems everyone these days has one (or two, or more).
The best thing (imho) about my first joystick idea, aside from the relatively small size and availability of pieces, is that you operate it like a gaming system's joystick: you move it around with your finger, rather than grasping it with one hand.
The construction of this device is simple, at least in theory. (Not having an NXT set makes it hard to build NXT stuff )
Just have one axle pointing in the Z-dimension (you'd better make it a long one). Sticking off, in the X- and Y-dimensions, should be two short arms that hold light sensors pointing up (Z-dimension). They should both be the same height at the tip, but that' not hard to do.
At this point, you should make sure the tips of the Light Sensors are about 3 Z-levels above the tip of the center piece. Then attach a universal joint to this, and a short axle to the other end (maybe a 2- or 3-rod, as I call them). Then, poke a hole in the middle of your piece of your paper and push it onto the axle, and secure it.
The end result should be like this: you have a light sensor, and a piece of paper directly over it. There should be about 2-3 Z-levels (I guess) of separation. This way, you can tilt the paper forward by pushing forward gently on the place where you secured the paper (in the middle). Assuming you have you Light Sensor's LEDs turned on, you should be increasing your value in one of them while the other stays the same. Since you have two Light Sensors perpendicular to each other, you can use one Sensor's values for the X-plane and the other Sensor's values for the Y-plane (similar in concept to the way you read the data from my touchscreen idea). A similar concept can be seen here.
Another Joystick idea of mine, really a copy of Philippe "Philo" Hurbain's joystick, has an extra trick up its sleeve. This baby has haptic feedback. Oh yeah. The farther you push on the joystick, the more resistance it pushes back with. Why is this helpful, you might wonder? As my good friend sqiddster put it, "this ... means that you will have a really cool 'return to neutral' function."
Or, yet another use for haptic feedback: let's say we're driving Philo's Spy Rover, and we don't want to run into any walls. We could have the Joystick configured so that the closer the rover got to a wall (or other object), the more resistance you get. There are many other uses, the list just goes on and on.
3. D-Pads
When one examines a good gaming device, they usually find some generic features: a screen, some sort of directional controls, specific function buttons (Like A-B-X-Y and Δ-[]-O-X, or L-R/L1-L2-R1-R2), and sound control. Well, The NXT has most of that, and my joystick/touchpad ideas complete the list--except for the D-pads. So I came up with a design for a D-pad. While still very basic (It uses all four touch sensors, and thus takes up all four sensor ports ), it should work. In fact, it could be programmed in such a way so as to recognize more than one button-press at a time. Also, it can easily be programmed so that it continues to continue 'reading' the last button that was pressed, even if it has been released already.
I hope I didn't bore you too much, and I'm glad that you read all the way to the end. My mind is so full of ideas, it seems ready to burst. I have nothing to do but write them down, since I can't really build them yet. I just recently downloaded LDraw, so I've started some preliminary manifestations of the ideas in my head (notably the D-Pad). They are still quite crude, however, as manipulating flat images of Legos on a slow computer is not the best way to let my creativity flow.
Anyways, I hope you enjoyed this short article. If you have any suggestions, or additional theories of your own, please feel free to share them. Thanks again, Mr. Hurbain, for your wonderful Joystick design!
- Stryker