Self Reliant Chairs
Create New

Self Reliant Chairs



Self Reliant Chairs
Self Reliant Chairs

Project Rating

Overall Rating
2
0
0
0
0

People with physical disabilities every time find it complicated to navigate through their house or any place without the assistance of someone. In an earlier wheelchair, it requires manual effort and the help of others to move. The manual effort relies on the joystick. But to navigate through one's own home without depending on anyone all time can be handled wirelessly with head and hand gesture methods. Here the gestures act as the transmitter and the wheelchair act as the receiver. The person will be able to control the chair with the use of accelerometer sensors which detects gestures of both head and hand. When the person wants to move, he/she makes head and hand gesture which is being sensed by the accelerometer fixed in the arm of the wheelchair. According to the gesture made by the person, the wheelchair moves forward, reverse, left or right. For example: if the person turns his head to the right, wheelchair turns right. Various head gestures are being programmed using ARDUINO and fixed to the wheelchair.
Wheelchairs are a great way to provide mobility to those who are unable or have a difficult time walking because of illness, injury or disability. They can help people regain independence and move around relatively easily and lead active lifestyles. There are different kinds of wheelchairs on the market to meet the needs of disabled users, like the manual wheelchair, power wheelchair and electric wheelchair. Manual wheelchairs, like the name suggests, are wheelchairs that can be propelled by the user’s hands whereas electric wheelchairs use motors for propulsion. Manual wheelchairs have simpler functions and are much less expensive compared to electric wheelchairs. Manual wheelchairs can be folded and stored in smaller spaces such as a car trunk.

Operating an Electric Wheelchair

Electric wheelchairs are easy to use and operate and can increase the user’s independence and make them less dependent on others. They have better maneuverability and suspension and they absorb the bumps in uneven terrain better than manual wheelchairs. It is always recommended that you try out an electric wheelchair before you make the final purchase. Every disability is different and users should choose a chair with controls that are best suited for their physical disability. Electric wheelchairs are very customizable to almost any physical disability, so the user has an almost endless selection of options.

Power Wheelchairs are Ideal for Assistance

Wheelchair users should have chairs that are accessible, comfortable and easy to move and operate. The power wheelchair has changed the lives of millions of users. They offer the user the freedom to easily go from one location to another without having to depend on anyone else for help. Power wheelchairs are ideal for those who have arm, hand or shoulder disability and find it difficult to operate a manual wheelchair. The user operates a joystick to control the speed and direction of the chair. The user like reclining and tilting and elevating the seat and legs can also operate other functions. With the many advancements in technology, wheelchairs are used for more than just getting from one place to another. Wheelchairs today can now allow users to take part in sports like downhill racing, skiing, basketball, tennis and much more. Each sport has wheelchairs that are specifically designed to suit the needs of the sport, with the main emphasis being on speed and agility.

The Head Gestures are employed for the movement to take place. The gestures act as the transmitter and the wheel chair act as the receiver. Accelerometer integrated with Arduino makes this possible. When the person wants to move, He/She makes a head gesture which is sensed by the accelerometer fixed in the cap of the wheel chair. Accordingly, the wheel chair moves either in forward, reverse, left or right directions. For example: if the person turns his head to the right, wheel chair turns right. Various head gestures are being programmed using ARDUINO and fixed to the wheel chair. The main problem faced is that they could trip and fall. This wheel chair also has ultrasonic sensors to detect the obstacles. These sensors also helps to control the wheel chair automatically. Inspite of this if a person feels dis-comfortable or unable to make gestures Voice control will come into action. This is done by the help of alexa (virtual assistant developed by amazon). 

Initially the manually controlled wheel chair itself was seen as a great invention. But as the technology advances and makes the people more comfortable there is an urge to make it possible for all walks of life. Manual control is no more comfortable and it expects a upgradation. Which can be brought only through gesture control.

Why: Problem statement

Manual control or lever control of the wheelchair doesnt become handy often, what can be the possible solution?

How: Solution description

Wheel Chair controlled by HEAD GESTURE will make the user more comfortable. When the person wants to move, He/She makes head and hand gesture which is sensed by the accelerometer fixed in the arm of the wheelchair. Accordingly, the wheelchair moves either in forward, reverse, left or right directions.

 

The block diagram of the proposed model is shown above. The head gestures made by the user is noted by the accelerometer connected to their head along with Arduino Uno. It takes the three co- ordinate values and compares it with the function defined. It communicates with another Arduino Uno connected to the chair. It provokes the corresponding function and sends the value to motor driver and makes the move. Voice command given to the Alexa is also loaded and the corresponding function is provoked to make the wheel chair run.

The ultrasonic sensor connected to the Arduino Uno present in the chair senses the obstacles present in the way and switches on the buzzer when needed to alert the user. The Alexa is connected through node MCU which is a Wi-Fi enabled device.

The values from the accelerometer is taken and sent to the Arduino Uno which is programmed with specified function. The values obtained is compared with the threshold values corresponding to the motion and the functions are executed. When the three co-ordinates namely X, Y, Z matches with the values corresponding to the left motion, the chair will move left accordingly, right and forward motion is executed. When none of the value matches, the chair will stop. The same procedure is followed but instead of accelerometer, voice command is used in the alternate way. Thereby, the self-reliant chair using accelerometer and Alexa is designed, constructed and implemented successfully using Arduino IDE. The chair is tested by moving in the particular direction either when the head gestures is made or when the voice command is given. Projects like this can be considered as a major step by moving towards the smart Nation.

With a fast paced development and the rapid growth in the technology one can enhance all the devices present in the world. This has a lot of commercial value as it is more convenient to guide the person in their way. A manually controlled chair has many limitations in the real world, but the self- reliant chair eases the way and lessens the burden of the people.

 

How is it different from competition

Companies that produce high cost wheel chairs controlled by other mediums.

Who are your customers

People with Physical disabilities and old age people.

People who cant afford high cost sophisticated chairs.

Project Phases and Schedule

  • Ideation
  • Design
  • Hardware implementation
  • Working
  • Final Output 

Resources Required

  • Arduino UNO
  • Accelerometer
  • Motor Driver
  • ZIgbee
  • Ultrasonic Sensor

Download:
Project Code Code copy
/* Your file Name : voice.ino */
/* Your coding Language : arduino */
/* Your code snippet start here */
/*
 Version 0.4 - April 26 2019
*/ 

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <WebSocketsClient.h> //  https://github.com/kakopappa/sinric/wiki/How-to-add-dependency-libraries
#include <ArduinoJson.h> // https://github.com/kakopappa/sinric/wiki/How-to-add-dependency-libraries (use the correct version)
#include <StreamString.h>

ESP8266WiFiMulti WiFiMulti;
WebSocketsClient webSocket;
WiFiClient client;

#define MyApiKey "269fef5a-6da1-4a25-8d6f-ea9559cd1609" // TODO: Change to your sinric API Key. Your API Key is displayed on sinric.com dashboard
#define MySSID "gu junpyo" // TODO: Change to your Wifi network SSID
#define MyWifiPassword "wonder woman" // TODO: Change to your Wifi network password

#define HEARTBEAT_INTERVAL 300000 // 5 Minutes 

uint64_t heartbeatTimestamp = 0;
bool isConnected = false;


// deviceId is the ID assgined to your smart-home-device in sinric.com dashboard. Copy it from dashboard and paste it here

void turnOn(String deviceId) {
  if (deviceId == "5d67bf431bddb66e363d3381") // Device ID of first device
  {  
    Serial.print("Turn on device id: ");
    Serial.println(deviceId);
    Serial.println("FORWARD");
    digitalWrite(5,HIGH);
    digitalWrite(4,LOW);
    digitalWrite(0,HIGH);
    digitalWrite(2,LOW);
        analogWrite(14,950);
  analogWrite(12,950);
  } 
  else if (deviceId == "5d67ca9a1bddb66e363d36ff") // Device ID of first device
  {  
    Serial.print("Turn on device id: ");
    Serial.println(deviceId);
    digitalWrite(5,HIGH);
    digitalWrite(4,LOW);
    digitalWrite(0,LOW);
    digitalWrite(2,HIGH);
                analogWrite(12,800);
        analogWrite(14,1023);

  } 
   else  if (deviceId == "5d67cb061bddb66e363d3722") // Device ID of first device
  {  
    Serial.print("Turn on device id: ");
    Serial.println(deviceId);
    digitalWrite(5,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(0,HIGH);
    digitalWrite(2,LOW);
                analogWrite(12,1023);
        analogWrite(14,800);

  } 
     else  if (deviceId == "5d67cb681bddb66e363d3740") // Device ID of first device
  {  
    Serial.print("Turn on device id: ");
    Serial.println(deviceId);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);
    digitalWrite(0,LOW);
    digitalWrite(2,LOW);
                analogWrite(12,800);
        analogWrite(14,800);

  } 
  
  else if (deviceId == "5d6a06a11bddb66e363dd2fe") // Device ID of second device
  { 
    Serial.print("Turn on device id: ");
    Serial.println(deviceId);
        digitalWrite(5,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(0,LOW);
    digitalWrite(2,HIGH);
                analogWrite(12,800);
        analogWrite(14,800);
  }
  else {
    Serial.print("Turn on for unknown device id: ");
    Serial.println(deviceId);    
  }     
}

void turnOff(String deviceId) {
   if (deviceId == "5d67bf431bddb66e363d3381") // Device ID of first device
   {  
     Serial.print("Turn off Device ID: ");
     Serial.println(deviceId);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);
    digitalWrite(0,LOW);
    digitalWrite(2,LOW);
    analogWrite(14,230);
    analogWrite(12,230);     
   }
   else if (deviceId == "5axxxxxxxxxxxxxxxxxxx") // Device ID of second device
   { 
     Serial.print("Turn off Device ID: ");
     Serial.println(deviceId);
  }
  else {
     Serial.print("Turn off for unknown device id: ");
     Serial.println(deviceId);    
  }
}

void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
  switch(type) {
    case WStype_DISCONNECTED:
      isConnected = false;    
      Serial.printf("[WSc] Webservice disconnected from sinric.com!\n");
      break;
    case WStype_CONNECTED: {
      isConnected = true;
      Serial.printf("[WSc] Service connected to sinric.com at url: %s\n", payload);
      Serial.printf("Waiting for commands from sinric.com ...\n");        
      }
      break;
    case WStype_TEXT: {
        Serial.printf("[WSc] get text: %s\n", payload);
        // Example payloads

        // For Switch or Light device types
        // {"deviceId": xxxx, "action": "setPowerState", value: "ON"} // https://developer.amazon.com/docs/device-apis/alexa-powercontroller.html

        // For Light device type
        // Look at the light example in github
          
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject((char*)payload); 
        String deviceId = json ["deviceId"];     
        String action = json ["action"];
        
        if(action == "setPowerState") { // Switch or Light
            String value = json ["value"];
            if(value == "ON") {
                turnOn(deviceId);
            } else {
                turnOff(deviceId);
            }
        }
        else if (action == "SetTargetTemperature") {
            String deviceId = json ["deviceId"];     
            String action = json ["action"];
            String value = json ["value"];
        }
        else if (action == "test") {
            Serial.println("[WSc] received test command from sinric.com");
        }
      }
      break;
    case WStype_BIN:
      Serial.printf("[WSc] get binary length: %u\n", length);
      break;
  }
}

void setup() {
  Serial.begin(115200);
  pinMode(5,OUTPUT);
    pinMode(4,OUTPUT);
      pinMode(0,OUTPUT);
        pinMode(2,OUTPUT);
        pinMode(12,OUTPUT);
        pinMode(14,OUTPUT);

  
  WiFiMulti.addAP(MySSID, MyWifiPassword);
  Serial.println();
  Serial.print("Connecting to Wifi: ");
  Serial.println(MySSID);  

  // Waiting for Wifi connect
  while(WiFiMulti.run() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if(WiFiMulti.run() == WL_CONNECTED) {
    Serial.println("");
    Serial.print("WiFi connected. ");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  }

  // server address, port and URL
  webSocket.begin("iot.sinric.com", 80, "/");

  // event handler
  webSocket.onEvent(webSocketEvent);
  webSocket.setAuthorization("apikey", MyApiKey);
  
  // try again every 5000ms if connection has failed
  webSocket.setReconnectInterval(5000);   // If you see 'class WebSocketsClient' has no member named 'setReconnectInterval' error update arduinoWebSockets
}

void loop() {
  webSocket.loop();
  
  if(isConnected) {
      uint64_t now = millis();
      
      // Send heartbeat in order to avoid disconnections during ISP resetting IPs over night. Thanks @MacSass
      if((now - heartbeatTimestamp) > HEARTBEAT_INTERVAL) {
          heartbeatTimestamp = now;
          webSocket.sendTXT("H");          
      }
  }   
}

// If you want a push button: https://github.com/kakopappa/sinric/blob/master/arduino_examples/switch_with_push_button.ino  

Comments

Leave a Comment

Post a Comment

About This Project

Project period

08/13/2019 - 11/27/2019

Views

85

Courses

Get trained in Learny Technologies and develop your own applications.

New batch starts from Nov 13th.