Close
0%
0%

MyoWare Muscle Sensor and Adafruit Feather 43u4

EMG acquired using MyoWare Muscle sensor, if EMG corresponds to clenched fist, send message via Bluetooth from Feather to smart-phones

Similar projects worth following
EMG acquired using MyoWare Muscle sensor, if EMG corresponds to clenched fist, send message via Bluetooth from Feather 43u4 Bluefruit LE to iOS and Android smart-phones. Debug message to Raspberry Pi or other systems. (under construction)

Bluefruit LE Client Apps and Libraries:

https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/software-resources

  • SupBrows example from Adafruit

    Neil K. Sheridan10/24/2017 at 20:14 0 comments


    Ok, so I just wanted to look at this one. The guide is here: https://learn.adafruit.com/heybrows/overview .. It's under an MIT license for the code:
    *********************************************************************
      This is an example for our nRF51822 based Bluefruit LE modules
    
      Pick one up today in the adafruit shop!
    
      Adafruit invests time and resources providing this open source code,
      please support Adafruit and open-source hardware by purchasing
      products from Adafruit!
    
      MIT license, check LICENSE for more information
      All text above, and the splash screen below must be included in
      any redistribution
    *********************************************************************/
    
    #include <Arduino.h>
    #include <SPI.h>
    #if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_)
    #include <SoftwareSerial.h>
    #endif
    
    #include "Adafruit_BLE.h"
    #include "Adafruit_BluefruitLE_SPI.h"
    #include "Adafruit_BluefruitLE_UART.h"
    
    #include "BluefruitConfig.h"
    
    /*=========================================================================
        APPLICATION SETTINGS
    
          FACTORYRESET_ENABLE       Perform a factory reset when running this sketch
         
                                    Enabling this will put your Bluefruit LE module
                                  in a 'known good' state and clear any config
                                  data set in previous sketches or projects, so
                                    running this at least once is a good idea.
         
                                    When deploying your project, however, you will
                                  want to disable factory reset by setting this
                                  value to 0.  If you are making changes to your
                                    Bluefruit LE device via AT commands, and those
                                  changes aren't persisting across resets, this
                                  is the reason why.  Factory reset will erase
                                  the non-volatile memory where config data is
                                  stored, setting it back to factory default
                                  values.
             
                                    Some sketches that require you to bond to a
                                  central device (HID mouse, keyboard, etc.)
                                  won't work at all with this feature enabled
                                  since the factory reset will clear all of the
                                  bonding data stored on the chip, meaning the
                                  central device won't be able to reconnect.
        MINIMUM_FIRMWARE_VERSION  Minimum firmware version to have some new features
        MODE_LED_BEHAVIOUR        LED activity, valid options are
                                  "DISABLE" or "MODE" or "BLEUART" or
                                  "HWUART"  or "SPI"  or "MANUAL"
        -----------------------------------------------------------------------*/
    #define FACTORYRESET_ENABLE         1
    #define MINIMUM_FIRMWARE_VERSION    "0.6.6"
    #define MODE_LED_BEHAVIOUR          "MODE"
    /*=========================================================================*/
    
    // Create the bluefruit object, either software serial...uncomment these lines
    /*
      SoftwareSerial bluefruitSS = SoftwareSerial(BLUEFRUIT_SWUART_TXD_PIN, BLUEFRUIT_SWUART_RXD_PIN);
    
      Adafruit_BluefruitLE_UART ble(bluefruitSS, BLUEFRUIT_UART_MODE_PIN,
                          BLUEFRUIT_UART_CTS_PIN, BLUEFRUIT_UART_RTS_PIN);
    */
    
    /* ...or hardware serial, which does not need the RTS/CTS pins. Uncomment this line */
    //Adafruit_BluefruitLE_UART ble(BLUEFRUIT_HWSERIAL_NAME, BLUEFRUIT_UART_MODE_PIN);
    
    /* ...hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */
    Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);
    
    /* ...software SPI, using SCK/MOSI/MISO user-defined SPI pins and then user selected CS/IRQ/RST */
    //Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_SCK, BLUEFRUIT_SPI_MISO,
    //                             BLUEFRUIT_SPI_MOSI, BLUEFRUIT_SPI_CS,
    //                             BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);
    
    
    // A small helper
    void error(const __FlashStringHelper*err) {
      Serial.println(err);
      while (1);
    }
    
    int threshold = 500;  //change this value to reflect the range of your muscle sensor
    int oldSensorValue = 0;
    
    /**************************************************************************/
    /*!
        @brief  Sets up the HW an the BLE module (this function is called
                automatically on startup)
    */
    /**************************************************************************/
    void setup(void)
    {
      //while (!Serial);  // required for Flora & Micro
      // delay(500);
    
      Serial.begin(115200);
    
     Serial.println(...
    Read more »

  • Setting up circuit (testing with Arduino)

    Neil K. Sheridan10/24/2017 at 19:31 0 comments

    1. First connect MyoWare EMG sensor to Arduino:

    MyoWare "+" to +ve on Arduino
    MyoWare "-" to GND on Arduino
    MyoWare "SIG" to analogue pin on Arduino

    2. Code for printing what we get using the Arduino IDE serial monitor:

    int analogValue = 0;    // variable to hold the analog value
    
    void setup() {
      // open the serial port at 9600 bps:
      Serial.begin(9600);
    }
    
    void loop() {
      // read the analog input on pin 0:
      analogValue = analogRead(0);
    
      // print it out in many formats:
      Serial.println(analogValue);       // print as an ASCII-encoded decimal
      Serial.println(analogValue, DEC);  // print as an ASCII-encoded decimal
      Serial.println(analogValue, HEX);  // print as an ASCII-encoded hexadecimal
      Serial.println(analogValue, OCT);  // print as an ASCII-encoded octal
      Serial.println(analogValue, BIN);  // print as an ASCII-encoded binary
      delay(10)
    }
    

    Code from https://www.arduino.cc/en/Serial/Println

    serial.begin is to set data rate in baud https://www.arduino.cc/en/Serial/Begin

    analogRead(0) analogue read from A0 pin on Arduino - put this in analogValue

    Then go ahead and print the analogValue to the serial monitor

    Next just print it to serial monitor

    Then we can use the serial plotter too! e.g. http://www.instructables.com/id/Ultimate-Guide-to-Adruino-Serial-Plotter/

    Ah ok, so we should get data corresponding to open vs. closed fist from that.

    Ok, so we want to get a  threshold value for closed fist. If it's above that we have closed fist, if it's below we don't have it.

    Set const int closed_fist_threshold = whatever that value is

    So then it's just   if(analogRead(0) > closed_fist_threshold: we have closed fist!

    or else if (analogRead(0) < closed_fist_threshold: we don't have closed fist!

    ** this is all C++

    ----

    It all seems very easy, but this threshold value will be the same for everyone? I think we will have to test this! I don't think it will be!  

    const int closed_fist_threshold = ??? ///// threshold for closed fist. Anything 
    //above is closed fist. Below is not closed fist
    
    void setup() 
    { 
    //start serial monitor, set data rate 9600 Baud
    Serial.begin(9600); 
     
    
    void loop() 
    { 
    //print EMG data to serial monitor for debug
    Serial.println(analogRead(0)); 
    
    //if EMG data greater than threshold, we have a fist
      if(analogRead(0) > closed_fist_threshold) {
        //do something
      }
    
    //if EMG data lower than threshold, we don't have a fist made
      else if (analogRead(0) < closed_fist_threshold) {
        //do something 
      }
    
    } 
    

View all 2 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates