Click here to Skip to main content
15,880,543 members
Articles / Internet of Things
Article

Cool Head: Intel Edison Smart Helmet with Climate Control, Automatic Indication and Accident Notification

,
Rate me:
Please Sign up or sign in to vote.
5.00/5 (5 votes)
7 Aug 2016CPOL13 min read 18.4K   33   1   1
Novel Intel Edison smart helmet with portable air conditioner that can notify the relatives when a rider meets an accident, can automatically trigger the indicators based on head movement.

A Intel Edison based smart helmet that:

  • Changes In-Helmet temperature using Peltier based cooling system
  • The cooling is based on temperature sensing
  • Triggers indicator automatically when user moves his head in left or right direction
  • Detects accident and notifies about the accident using Gmail and over Mqtt
  • Completely battery driven and working prototype

Motivation

In many places, like Kalaburagi in INDIA, people tend to avoid helmets due to excessive heat and severe irritation and discomfort, resulting from the heat. The country also suffers from rash driving & negligence. Many a time, such negligence by the riders for not using dippers and indicators results in road mishaps. Further, we do not have a great accident support system. Hence many a times, a rider loses his life because he remains unattended for a long time even after the accident. The major motivation for the work is to address a solution that can keep riders' head cool, trigger the indicators automatically when he turns and notify any authority or relative when rider meets with an accident. Our main goal is to save millions of lives that have been lost every year, due to not using the helmet or not using the indicators.

Introduction

Street car/bike accidents take the lives of about 1.3 million consistently and harm 20-50 million more on the planet. Refusal to utilize legitimate cruiser protective caps is among the fundamental variable adding to pass from street crashes - WHO said this in its report on 'Decade of Action for Road Safety '2010-2011'. All the more exasperatingly, an extensive number of passing from street mischances are borne by helpless Street clients, for example, people on foot, cyclists and motorcyclists.

Around 13% of the casualties from street related passing are people on foot in India when contrasted with 15% of mischances from traveller cars, autos and taxis and 27% from riders of mechanized two-or-three wheelers. So in the event that it can be made required to make the general people wear the protective cap when they ride the bike, the rates of these mishaps can be relied upon to fall. Overall, most governments have officially made stringent laws with respect to wear the protective cap. In any case, regardless of the laws, such cases are still on an ascent due to the absence of legitimate execution. As of recently, just the laws have been shaped, however no mechanical work has been done in such a manner.

This is a circumstance we see in our everyday life, considering discovering some answer for determination of this issue, we concocted this thought of giving the data about the mishap at the earliest opportunity and in TIME….!! Because after record-breaking matters a great deal, if everything is done in time, at any rate, we can spare a large portion of the lives that are lost because of bike mischances.

Considering three main considerations for keeping away from the mishap causes, for example:

  1. Make wearing the protective cap mandatory.
  2. Avoid drinking and driving.
  3. If an individual is met with a mischance and if nobody is there to help him. Rather than basically leaving or overlooking the individual, he may bite the dust (die). In such circumstance, advising to an emergency vehicle or relatives through smart phone to safeguard him to a degree.

In this work, we exhibit the configuration of the model we redesigned the head protector cap with Peltier module and GPS. With stock incorporated into head protector, agreeable temperature can be kept up in the cap by utilizing the Peltier module which deals with the premise of thermoelectric impact. In the event of street mishaps, the exact area of the rider can be followed out utilizing GPS framework and gives the message to crisis vehicle. Also, if any draining of blood happens, it can be coagulated by the thermoelectric module with the goal that individual can be safeguarded from basic conditions.

Problem

Few of the past works have proposed various embedded based solutions for helmets. Most of the past solutions adapt GPRS for generating the notification. One of the major problems with SMS (GSM) and web (GPRS) based notification is that the messaging is costly and secondly the web protocol is multitudes of times slower in comparison to M2M protocols being offered by IoT. Also, most of the past works are based on microcontroller architecture which has a serious limitation as far as parallel programming is concerned. Therefore, parallel monitoring and controlling of the temperature, accident and indicators becomes very slow in the context of real time scenario. This problem can be addressed by replacing GPRS with IoT gateway, microcontroller with powerful microprocessors and using low latency sensors over conventional sensors.

The challenge of fast communication, scalable messaging, channelling of the messages and alarm and better event trigger is solved by the proposed solution. We use Intel Edison with Arduino compatible extension board to increase the speed of prototyping. We used Wi-fi connectivity to connect the IoT board with internet. We have used I2C based Accelerometer sensor, which has got significant performance improvement over serial communication based on conventional Accelerometers. The notification system puts the data into Google cloud through which it can be channelled to other platforms like Facebook, Twitter through IFTTT’s cloud based event and message routing. We have also used MQTT protocol which betters the response time of both web services and http. As MQTT from core offers QOAS support, the delivery of every packet with optimal latency is guaranteed. The detailed architecture of the proposed system is explained in detail in the methodology section.

Highlights

The objective of the work is to offer cutting edge near real time solution for road safety, head comfort, riding assistance to a rider through a smart helmet powered by new generation IoT processors and protocol structures. The overall objective can be summarized into below specifics.

  1. Maintaining a comfortable temperature for the rider and in case of head injury due to an accident, to accelerate the blood clotting process by rapidly reducing the temperature of the Peltier module.
  2. Besides this locating the precise location (civic address) of the rider in case of an accident and at the same time intimating it to a preset mobile number and also since the data is collected through the cloud via MQTT, the real time civic address will be broadcasted to social media applications like Facebook, Twitter, Gmail, etc. via an IFTTT application to address it to the family members.
  3. Based on the movement of the head of a rider for certain duration, this device actuates indicators placed on helmet sensed by the Groove accelerometer sensor.

Specifications

  • Hardware Specifications

    1. Intel Edison
    2. Arduino Compatible Breakout board for Intel Edison
    3. Sensors (Vibration, Accelerometer)
    4. Peltier module with Heat Sink
    5. 12v External power supply/ Mobile Power Bank
    6. Internet Connectivity (Wi-Fi), 3G
    7. Android Mobile (Android version 4.0 and above)
    8. SeedStudio Groove Kit
  • Software Specifications

    1. Linux Yocto Operating System for Edison
    2. Node.js
    3. IDE: Intel XDK IoT edition
    4. Language: JavaScript ( Node.js)
    5. PuTTY
    6. IP Gateway: IFTTT
    7. protocols: MQTT.SMTP
    8. Client IDE: Android Studio

Components

In this section, we will elaborate about the sensors and other components being used in this project:

In my work, the use of Grove relay is to switch on the Peltier module or the fan when the value of the temperature rises above some threshold value set. It will be triggered by the MCU.

Following are the specifications of the sensor:

Image 1

  • Grove Peizo Vibration Sensor - For Accident detection

    You can learn more about the sensor in this wiki link.

    Image 2

    Image 3

  • Grove temperature Sensor - For temperature detection and triggering cooling unit

    Grove temperature sensor is an electronic grove device that is basically used to sense the temperature changes in the surrounding.

    The Grove-Temperature Sensor utilizes a thermistor to identify the encompassing temperature. The resistance of a thermistor will be increment when the encompassing temperature diminishes. It's this trademark we use to compute the surrounding temperature. The recognizable scope of this sensor is -40 - 125ºc, and the precision is ±1.5ºc

    1. Voltage: 3.3 ~ 5v
    2. Max power rating at 25 ºc:300mW
    3. Zero power resistance: 10KΩ
    4. Operating temperature range:-40 to 125 ºc
  • 3-Axis Accelerometer - For Head movement detection and automatic indication

    The 3-axis Accelerometer grove device basically uses a MMA7660FC and Digital Output I2C. This Grove device is basically applied for sensing the changes in the data, production direction and motion recognition via an interrupt pin (INT). This module uses less power and has a lower profile capacitive MEMS sensing element.

    Following are the features of the 3-axis accelerometer sensor:

    1. Grove compatible interface
    2. Axis motion/orientation sensing
    3. Digital Output (I2C)
    4. 10,000g shock survival
    5. RoHS/WEEE lead-free compliant
    6. 5V DC input

      Image 4

    Image 5

  • Grove Relay - For switching the Peltier module, the Grove-Relay module is a computerized typically open switch. Through it, we can control circuit of high voltage with low voltage, say 5V on the controller. There is a pointer LED on the board, which will illuminate when the controlled terminals get shut.
     
  • Specifications
    1. Operating voltage: 3.3V~5V
    2. Operating current:100mA
    3. Relay Life:100,000 Cycle
    4. Max switching voltage:250VAC/30VDC
    5. Max switching current:5A

    Image 6

  • Grove RGB LCD Backlight - For display (Ok, IoT device doesn't look good without a display. :) )

    This Grove empowers you to set the shading to whatever you like by means of the basic and compact Grove interface. It takes I2C as specialized strategy for the microcontroller. So the number of pins required for information trade and backdrop illumination control contracts from ~10 to 2, diminishing IOs for other testing errands. Moreover, Grove - LCD RGB Backlight underpins user characterized characters.

    In my work, it is basically used to display the live temperature information with the green colour and once when the temperature rises above the threshold value, it changes its colour to red and starts blinking. Similarly, it displays the state of the rider. In case the rider meets with an accident, it changes its colour to red and starts blinking.

  • Specifications

    1. Vcc Voltage: 5V
    2. I/O Voltage: 3.3/5V
    3. Operating Current<60mA
    4. CGROM: 10880 bit
    5. CGRAM: 64*8 bit
    6. Colorful RGB Backlight
    7. Built-in English and Japanese fonts
    8. I2C communication, uses only two IOs
    9. Automatic power-on reset

    Image 7

  • Peltier Module

    Peltier is a thermoelectric effect (TEE) device where thermal properties can be controlled using electrical signal.

  • Basically, there are two effects - they are:
    1. Peltier effect
    2. Seebeck effect

    TE coolers, TE heaters and heat pumpers are all the devices that work on TEE and all these devices are referred to as the Peltier Effect. Peltier device is not a heat absorber. Rather, it’s a heat driver. The heat that is driven out from the cooler side is accumulated on the hotter side of the device and it has to be debauched in one or the other way. Otherwise, the device may tend to stop working and it may tend to increase the temperature at the cooler side which is practically not feasible.[Wiki]

    Image 8Image 9

Heat Sink

The heat dropper has to be taken as an essential part of the pettier device for cooling purpose. All its performance distinctiveness of the Peltier module change as the utility of the heat dropper temperature. Hence, the ultimate heat droppers should have a capability of sponging in unlimited quantity of heat exclusive of increasing the device temperature. In general, we need to consider a heat dropper that can soak up the entire residual heat of the device and help in not increasing the temperature above the acceptable point. Hence in practice, we can use a heat dropper that can increase the temperature of the device in the series of 5 to 15 ºC higher than the bearable temperature that is sensible.

  • Operating Voltage: Utmost 13.5V
  • Voltage can be in both the directions. The only change is that the face that will rise in temperature or cool in temperature.
  • Rating: Utmost 4.4 amps
  • Power: Utmost 36 watts
  • Temperature change: Utmost 59ºC at the normal temperature of 30ºC and with no stack.
  • Number of p-n junctions: 127
  • Footprint: 4 cm x 4 cm
  • Thickness: 4mm
  • Weight: 28 grams
  • Module Factory Number: TEC1-12704
  • The ground of the Peltier module is connected to one contact of the relay. When the temperature sensor reaches the threshold value set say 30ºC, then the sensor will trigger the MCU to supply power to the grove relay switch and hence completing the circuit and allowing the base current to flow and hence switching the Peltier module to start cooling inside the helmet and hence providing the comfortable temperature for the rider.

Design

Block Diagram

Image 10

  • Intel Edison will be connected with a pelting module through transistor as a switch.
  • Peter is a temperature cooling solution that is driven by a 12v power supply. The supply will be given by a 12v battery pack. The ground of the poultice will be connected to one of the input of the grove relay. When the MCU provides supply to the relay and triggers it. This will activate pettier and trigger cooling.
  • MCU will keep monitoring temperature through Grove temperature measurement sensor. When the inside temperature is high, the poultice will be activated using the method mentioned in step2.
  • MCU will be integrated with Cloud through MQTT IoT gateway. Rider’s mobility will be integrated with the cloud using MQTT gateway. The mobile will keep on tracking the GPS data which will be sent back to Google cloud to obtain Civic Address for the latitude, longitude GPS data.
  • MCU will keep tracking of the impact through Grove vibration sensor. In case of an accident, the sensor will generate a signal which will trigger a notification.GPS civic address with this notification will be pushed to the cloud. This can then mitigate the notification to Facebook/Twitter or any other channel through IFTTT gateway.
  • Accelerometer will monitor the movement of the head. When the rider is looking at right/left for a long time, in helmet indicator can be triggered.

Circuit Schematic

Image 11

Sequence Diagram

Image 12

Algorithm

    Actor Edison
participant Vibration
            loop
 (Till Ride Completes)
Vibration -> Edison: Vibration Value
participant MqTT
Activate MqTT
alt Vibration Value gt 1000
 Edison -> LCD : RED
 Edison -> Buzzer : ON
 Edison -> MqTT: Accident Message
else Normal
 Edison -> Edison: Keep Monitoring
end
Deactivate MqTT
Accelerometer -> Edison : (x,y,z)
alt x gt +5
 Edison -> Buzzer : ON
 Edison -> LeftIndicator: ON
else 
alt x lt -5
 Edison -> RightIndicator: ON
Edison -> Buzzer : ON
Else    Edison->RightIndicator: OFF
   Edison -> Buzzer : OFF
    end
 Edison -> LeftIndicator : OFF
 Edison -> Buzzer : OFF
 end
 TemperatureSensor -> Edison : Temparature
alt Temperature gt 40
Edison -> LCD : RED
Edison -> Relay_Peltier: ON
 Edison -> Buzzer : ON
else Normal
 Edison -> LCD : GREEN
 Edison -> Relay_Peltier: OFF
 Edison -> Buzzer: OFF
end
Edison -> LCD : Display Temperature
end    

Using the Code

Having understood the entire concept of design and the components, it is finally time to code our Intel Edison board. Recall that we need to develop code for:

  • Accident Detection Using Vibration Sensor
  • Generate a Gmail Notification on Accident
  • Detect Left and Right Movement of the Head using Accelerometer
  • Trigger Left and Right Indicator using based on the accelerometer data
  • Measure temperature
  • Swicth on the Peltier when temperature crosses threshold
  • Turn off Peltier when temperature comes to normalcy
  • Display the data in LCD
  • Trigger a buzzer for certain interval upon an even occurrence

Let us first look at the entire code which is divided into segments:

JavaScript
  //////////////////////////// 1. Accelerometer for Indication/////////
var digitalAccelerometer = require('jsupm_mma7660');

// Instantiate an MMA7660 on I2C bus 0
var myDigitalAccelerometer = new digitalAccelerometer.MMA7660(
          digitalAccelerometer.MMA7660_I2C_BUS, 
          digitalAccelerometer.MMA7660_DEFAULT_I2C_ADDR);

// place device in standby mode so we can write registers
myDigitalAccelerometer.setModeStandby();

// enable 64 samples per second
myDigitalAccelerometer.setSampleRate(digitalAccelerometer.MMA7660.AUTOSLEEP_64);

// place device into active mode
myDigitalAccelerometer.setModeActive();

var x, y, z;
x = digitalAccelerometer.new_intp();
y = digitalAccelerometer.new_intp();
z = digitalAccelerometer.new_intp();

var ax, ay, az;
ax = digitalAccelerometer.new_floatp();
ay = digitalAccelerometer.new_floatp();
az = digitalAccelerometer.new_floatp();

var outputStr;

var myInterval = setInterval(function()
{
  myDigitalAccelerometer.getRawValues(x, y, z);

  outputStr = "Raw values: x = " + digitalAccelerometer.intp_value(x) +
  " y = " + digitalAccelerometer.intp_value(y) +
  " z = " + digitalAccelerometer.intp_value(z);

 //-------------------- LEFT AND RIGHT For INDICATION-----------------------//
var X= digitalAccelerometer.intp_value(x);

if(X<0) //<- Left Condition
  {
    if(Math.abs(X)>5)
    {
     buzzPin.write(1);
     console.log("LEFT.................");
     lPin.write(1);    // Left Indicator On
     rPin.write(0);    // Right Indicator Off
    }
    else
    {
     buzzPin.write(0); // When Head is in left position but becoming straight, 
                       // switch off the indicator
     lPin.write(0);
    }
  }
  if(X>0) // <- Right Condition
  {
    if(X>5)
    {
    rPin.write(1);
    lPin.write(0);
    buzzPin.write(1);
    console.log("RIGHT..........");
    }
    else
    {
   rPin.write(0);
  buzzPin.write(0);
    }  
  }
}, 500); //<- Keep Measuring accelerometer in every 500ms
//--------------------------- Accelerometer Processing Ends Here----------------/

// round off output to match C example, which has 6 decimal places
function roundNum(num, decimalPlaces)
{
  var extraNum = (1 / (Math.pow(10, decimalPlaces) * 1000));
  return (Math.round((num + extraNum) 
    * (Math.pow(10, decimalPlaces))) / Math.pow(10, decimalPlaces));
}
//////////////////2. Mqtt Initialization  ////////////////////////////
var mraa=require('mraa');
var nodemailer = require('nodemailer');

//////////3.  Setting Gmail for package nodemailer/////////////

//var transporter = nodemailer.createTransport('smtps://gmail.com');
var smtpConfig = {
    host: 'smtp.gmail.com',
    port: 465,
    secure: true, // use SSL
    auth: {
        user: 'yourmailId@gmail.com',

        pass: 'your_gamil_password'
    }
};
var transporter = nodemailer.createTransport(smtpConfig);

var mailOptions = {
    from: '"Your Name"<yournames@gmail.com>',                // sender address
    to: 'receiver1smail@gmail.com','receiver2smail@gmail.com'// list of receivers
                                                             // ( your friend/relative)
    subject: 'Helmet Project Accident Notification',         // Subject line
    text: 'Accident Happened ',                              // plaintext body
    html: '<b>Accident </b>'                                 // html body
};

//////////////////////4. Sensors and Pin Initialization////////////////////////////////////////
var vibSensor=new mraa.Aio(1);
var tempPin = new mraa.Aio(0);
var buzzPin=new mraa.Gpio(7);
buzzPin.dir(mraa.DIR_OUT);
var fanPin=new mraa.Gpio(6);
fanPin.dir(mraa.DIR_OUT);
var lPin=new mraa.Gpio(4);
var rPin=new mraa.Gpio(2);
rPin.dir(mraa.DIR_OUT);
lPin.dir(mraa.DIR_OUT);

fanPin.write(0);//Peltier Relay
//////////////////////////////////////////////////////////////////////

var at=0; //accident timer;
var mqtt    = require('mqtt');
var client  = mqtt.connect('mqtt://iot.eclipse.org');

var LCD = require('jsupm_i2clcd');
var myLCD = new LCD.Jhd1313m1(6, 0x3E, 0x62);
var B=3975;   

Loop();
var avgTemp=0;
var n=1;
function Loop()//<--- This function continuesly runs, detects accident notifies
{

//------------------------- 5. Read Temperature-----------------------------

var tempValue=tempPin.read();
var resistance=(1023.0-tempValue)*10000.0/tempValue; //get the resistance of the sensor;
var temperature=1/(Math.log(resistance/10000.0)/B+1/298.15)-273.15;//convert to temperature 
                                                                   //via datasheet
temperature=Math.floor((temperature )* 100) / 100;
//console.log(temperature);
avgTemp=avgTemp+temperature;
n=n+1;
//----------------------------------------------------------------

//---------------------- 6. Vibration sensor for Accident detection----------------
var vibVal=vibSensor.read();

//console.log("\n==========\nAccident Trigger: "+vibVal+"\n==========\n");
if(vibVal>800 ) // <- Threshold for Accident
{
console.log("\n==========\nAccident Trigger: "+vibVal+"\n==========\n");
myLCD.setColor(255,0,0);
myLCD.setCursor(1,0);
myLCD.write("Accident");
buzzPin.write(1);
at=10;
client.publish('rupam/Accident', 'Accident Happened....'); //<- Mqtt notification on Accident

transporter.sendMail(mailOptions, function(error, info){
    if(error){
        return console.log(error);
    }
    console.log('Message sent: ' + info.response);
}); //<-- Gmail Notification on Accident
myLCD.setColor(0,255,0);
}

//--------------------------- End of Accident Module--------------------------------
if(n>=10)
{
myLCD.clear();
 myLCD.setCursor(0,0);
myLCD.write("Temp: ");
//console.log(at);
if(at==0)
{
buzzPin.write(0);
myLCD.setColor(0,255,0);
}
else
{
if(at>0)
{
myLCD.setColor(255,0,0);
at--;
}
}
myLCD.setCursor(0,6);

//myLCD.write(""+avgTemp);
//myLCD.setCursor(1,0);

avgTemp=avgTemp/n;
avgTemp=Math.floor((avgTemp )* 100) / 100;
myLCD.write(""+avgTemp);
myLCD.setCursor(1,0);

//-------------------------- 7. Controlling Peltier--------------------------------
//console.log("Pwm Duty cycle="+roundNum(fanSpeed*100,2));

if(avgTemp>=30) // <- Above 30'c cooling will start
{
at=10; // at will be decremented at every Loop call. When it is 0, the buzzer is Off. 
       // So buzzer doesn't go on for ever. Only a short 2 sec buzzing

fanPin.write(1);
myLCD.setCursor(1,0);
myLCD.setColor(255,0,0);
myLCD.write("HOT");
}
else
{
fanPin.write(0); //<-- Cooling stops once temperature is Normal
myLCD.setColor(0,255,0);
myLCD.setCursor(1,0);
myLCD.write("Normal");
}
//---------------------------------- End of Peltier Control Part--------------------------

n=1;
console.log("Temperature="+avgTemp+" 'C");
avgTemp=0;
}
setTimeout(Loop,1000);
} 
//-------------------- End of Loop--------------------------------

Results

Vibration Sensor

Image 13Image 14

Temperature Sensor

Image 15Image 16

LED Indication for Temperature

Image 17 Image 18
Hot
Normal

Accelerometer Based Indicator Trigger

Image 19 Image 20
Left Indicator
Right Indicator

Co-Author Wearing the Smart Helmet

Image 21

Conclusion

This is our effort towards creating better and smarter helmets that are connected to cloud. The helmet can be improved with better battery and power unit design to make it more sleek. We can add a GPS sensor or can use an Android companion app to collect corrent GPS address to notify the relative about an accident scenario along with the exact address of the accident. We plan to continue to develop this project. Do let us know about your thoughts and valuable suggestions.

History

  • 7th August, 2016: Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
CEO Integrated Ideas
India India
gasshopper.iics is a group of like minded programmers and learners in codeproject. The basic objective is to keep in touch and be notified while a member contributes an article, to check out with technology and share what we know. We are the "students" of codeproject.

This group is managed by Rupam Das, an active author here. Other Notable members include Ranjan who extends his helping hands to invaluable number of authors in their articles and writes some great articles himself.

Rupam Das is mentor of Grasshopper Network,founder and CEO of Integrated Ideas Consultancy Services, a research consultancy firm in India. He has been part of projects in several technologies including Matlab, C#, Android, OpenCV, Drupal, Omnet++, legacy C, vb, gcc, NS-2, Arduino, Raspberry-PI. Off late he has made peace with the fact that he loves C# more than anything else but is still struck in legacy style of coding.
Rupam loves algorithm and prefers Image processing, Artificial Intelligence and Bio-medical Engineering over other technologies.

He is frustrated with his poor writing and "grammer" skills but happy that coding polishes these frustrations.
This is a Organisation

115 members

Written By
Software Developer
India India
I am into software Development for less than a year and i have participated in 2 contests here at Codeproject:-Intel App Innovation Contest 2012 and Windows Azure Developer Challenge and been finalist at App Innovation contest App Submission award winner as well won two spot prizes for Azure Developer Challenge.I am also a finalist at Intel Perceptual Challenge Stage 2 with 6 entries nominated.I also won 2nd prize for Ultrabook article contest from CodeProject
Link:-
http://www.codeproject.com/Articles/523105/Ultrabook-Development-My-Way

Microsoft MVA Fast Track Challenge Global Winner.
Ocutag App Challenge 2013 Finalist.

My work at Intel AppUp Store:-

UltraSensors:-
http://www.appup.com/app-details/ultrasensors
UltraKnowHow:-
http://www.appup.com/app-details/ultraknowhow

Comments and Discussions

 
GeneralMy Vote 5 Pin
Chrris Dale7-Aug-16 13:24
Chrris Dale7-Aug-16 13:24 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.