If you are using a touchscreen with your Raspberry Pi, then this guide is for you.
Xstroke (Gesture recognition) is the perfect tool to help you get more out of your touhscreen. I am using a PiScreen
Gesture recognition allows you to draw "strokes" on your touchscreen, which get interpreted as commands or text. Xstroke allows these to be entered anywhere on the screen. In some cases, Xstroke can be used instead of a keyboard.
In this post I demonstrate how to use an infrared remote to control the GPIO on a Raspberry Pi.
Normally a remote would be used to control a TV card or XMBC, however they also provide a good interface to control the GPIO on a Raspberry Pi. Adafruit has a Mini Remote and IR sensor which are perfect for this.
In this example we will use the remote to control a number of LEDs connected to some GPIOs on a Raspberry Pi.
Connect the IR Sensor to the Raspberry Pi
Connecting the IR sensor to a Raspberry Pi is very easy as there are only 3 pins on the sensor, GND, 3v and Output. We will connect the output to GPIO 18. You can choose another pin, just take note of it as you will need to specify this pin when installing LIRC. We will also connected up three LEDs to GPIOs 23, 24 & 25, and a 270Ω on the GND sound of each LED.
This display has ultra-high contrast and any-angle readability. It has the best display I have seen on any LCD.
This LCD uses the HD44780 controller which is present in almost all LCDs. LCDs that use this controller usually have 14 or 16 pins. This LCD has 16, numbered from 0 to 16 as shown below.
Sometimes these pins are present, but not used. Eg, pins 15 & 16 are for back-light and they are not used on this LCD. It depends on the manufacture.
HD44780 pins in Detail
Pin 1
Ground.
Pin 2
Supply Voltage for OLED and logic
Pin 3
Is usually connected to a potentiometer to control the contrast of the display.
Pin 4
The register select signal (RS) determines whether the Data Bit values are interpreted as a command (E.g. clear screen) or data (aka: a character to display).
Pin 5
Is the Read/Write pin. In read mode, this pin is used to get feedback from the LCD to work out if the LCD can accept commands or to indicate it is too busy. We don’t need this function as we can wait the maximum time for a command to be written (200us) before sending the next command. If read is enabled and Pin4 on the LCD is connected to a pin on your Raspberry Pi, there is a chance that you can destroy your Pi. We only ever want to write to the LCD, we never want to read from it. So this should always be connected to ground.
Pin 6
The enable pin (E)functions as the command/data latching signal for the LCD. The LCD will latch in whatever is on the Data Bits and process it on the falling edge of the E signal Meaning, when this pin goes low, the LCD will take the input from the data pins at this time.
Pins 7 to 14
Are the data pins. In 4 pin mode, only pins 11 to 14 are used.
Pins 15 & 16
Are used for the backlight if present.
Wiring the LCD up
Below shows how to wire up the LCD to the Raspberry Pi. We will be using 4 pin mode, so there is no need to connect pins 7 to 10. This LCD doesn't use the backlight pins, pins 15 and 16. It also doesn't use the contrast pin, pin 3.
If you want to control the brightness of a LED, the speed of a DC motor or the direction of a servo, you will need PWM.
The video shows PWM being used to control the brightness of some LEDs.
Pulse-width modulation (PWM) is used to control the amount of power supplied to electrical devices, especially to DC motors, servos and LEDs.
PWM is able to achieve this by quickly turning off and on the power to the device. The measurement for this is duty cycle.
Duty cycles describes the proportion of 'on'; a low duty cycle corresponds to low power, because the power is off for most of the time. A high duty cycle corresponds to high power, because the power is on most of the time.
Duty cycle is expressed in percent, 50% is when the power is on half the time and 100% being fully on.
I was fortunate enough to get access to a prototype of Pi-Pan from www.mindsensors.com during their kickstarter. The kickstarter has finished and they reached their goal. However they will be selling Pi-Pan from www.mindsensors.com at a future date.
Pi-Pan provides Pan and tilt movements for your Raspberry Pi Camera. Pi-Pan can pan 180 degrees (from left to right) and tilt 110 degrees (top to bottom).
Pi-Pan comes with two servos, a controller board, screws, a mount and instructions. It also comes with some python code that shows how the device can be operated.
(The controller board in the image below is a prototype and the production board will be a lot smaller.)
To accept input from a touchscreen we have to use the event interface of the Linux input system. We use the ioctl capabilities of the event interface, in addition to the normal read and write calls to get information from the touchscreen. This blog post explains how to use the touchscreen within your own programs using C as well as writing directly to the framebuffer.
Below I will outline how to automatically log into your Raspberry Pi from a Windows PC using Putty. This requires the setup of SSH keys, which is very easy to do.
1. Create SSH keys. Download Puttygen from here and run it. Once open, click on Generate and move your mouse around to generate your SSH keys.
2. Copy and past the public key, which is shown at the top of Puttygen into notepad, we will use this later.
3. Now click Save Private Key and save the key to your local drive
If you getting a warning about saving the key without a passprase, just click yes.
4. log into your Raspberry Pi and create the authorization file,
5. Copy in the text we placed into notepad earlier. If you already have a key in there, just paste the new one onto a new line. Then ALT-X to exit and save.
6. Open up Putty and add in the IP address for your Raspberry Pi and make sure that SSH is selected.
7. Within Putty, on the left hand side, expand connection and SSH and select Auth. In the path for Private Key for authentication select the the private key we saved earlier.
8. We now need to add the user name to log in with. On the left hand side, select connection and then Data. Enter pi as the username.
9. Go back to the main screen and save the session.
10. Now select Open to log into your Rasspberry Pi automatically. No need to enter username or password. The first time you log in you will be asked to accept the key.
I have had success with getting PiBBOT to balance.
When I saw my first two wheel balancing robot I was very fascinated. And after receiving my Raspberry Pi, I decided to build one myself. PiBBOT (PiBalancing roBOT) is my first successful balancing robot. And it has room for improvement and extra functionality. When building PiBBOT, I had a few roadblocks I needed to overcome;
I originally had the Anker as the power source for both Pi and the motors, however the amperage was too low.
Original H-Bridge not powerful enough for my motors
Gyro calculation off by 15 degrees
The TFT displays the angles from the accelerometer, gyro, complementary filter and power to the motors. The buttons are to turn the motors on and off and to reset the gyro.
What next?
Incorporate the wheel encoders for better balance
Build a sturdier frame
Implement direction control
The able to self right itself after falling over
Room mapping
Retrieve a can of beer from the fridge
PiBBOT consists of these components; Adafruit: TFT; 2.2" 18-bit color TFT LCD display RF Receiver :RF M4 Receiver - 315MHz
Pololu; Motors; 9.7:1 Metal Gearmotor 25Dx48L mm with 48 CPR Encoder Wheels; Pololu Wheel 90x10mm IMU; MinIMU-9 v2 Gyro, Accelerometer, and Compass (L3GD20 and LSM303DLHC). Anker; Battery; Anker® Astro3 10000mAh 5V / 9V / 12V 2A Dual USB Output External Battery
Tenergy; Battery; 7.2V Tenergy 3800mAh Flat NiMH High Power