Matrix - Ball Rolling Switch

From FriendlyARM WiKi
Jump to: navigation, search

查看中文

Introduction

BAll Rolling Switch
  • The Matrix-Ball_Rolling_Switch module is a ball switch. Its electrical characteristics are very similar to a mercury switch's however a mercury switch is easily broken, oxidized, leaking and not environment-friendly. This ball switch prevents all these issues.
  • The switch is free to move any angle and if that angle is between 15 degrees and 45 degrees a signal will be generated and used as an input to a Schmitt trigger.

Features

  • GPIO
  • Small
  • 2.54 mm spacing pin header
  • PCB Dimension(mm):16 x 16

BAll Rolling Switch-01.PCB

  • Pin Description:
Pin Description
S Digital GPIO
V Supply Voltage 5V
G Ground

Basic Device Operation

Please connect Pin V to a power supply, Pin G grounded and Pin S to a digital output. When you move the switch pushing the internal metal ball to connect the trigger point a high level signal will be generated and output to a Schmitt trigger which reverses this signal to output a low level signal. When you move the switch pushing the internal metal ball away from the trigger point a low level signal will be generated and output to a Schmitt trigger which reverses this signal to output a high level signal.

Applications

Connect to NanoPi M1

Refer to the following connection diagram to connect the module to the NanoPi M1:
matrix-BAll_Rolling_Switch_nanopi_m1

Connection Details:

Matrix-Ball_Rolling_Switch NanoPi M1
S Pin7
V Pin4
G Pin6

Connect to NanoPi 2

Refer to the following connection diagram to connect the module to the NanoPi 2:
matrix-BAll Rolling Switch_nanopi2

Connection Details:

Matrix-Ball_Rolling_Switch NanoPi 2
S Pin7
V Pin4
G Pin6

Connect to NanoPi M2 / NanoPi 2 Fire

Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire.
Matrix-Ball_Rolling_Switch_nanopi_m2

Connection Details:

Matrix-Ball_Rolling_Switch NanoPi M2
S Pin7
V Pin4
G Pin6

Connect to NanoPC-T2

Refer to the following connection diagram to connect the module to the NanoPC-T2:
Matrix-Ball_Rolling_Switch_NanoPC-T2

Connection Details:

Matrix-Ball_Rolling_Switch NanoPC-T2
S Pin15
V Pin29
G Pin30

Compile & Run Test Program

Boot your ARM board with Debian and copy the matrix code:

$ apt-get update && apt-get install git
$ git clone https://github.com/friendlyarm/matrix.git

If your cloning is done successfully a "matrix" directory will be generated.

Compile and install Matrix:

$ cd matrix
$ make && make install

Run test program:

$ matrix-gpio_int

Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.
Here is what you should observe:

Waiting event...
Device[0] value is 1

When you tilt the module, roll the ball and make it touch the trigger point you will see an event is detected.

Code Sample

This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-gpio_int". Here is its source code:

int main(int argc, char ** argv)
{
    int i, board;
    int retSize = -1;
    char value[ARRAY_SIZE(dev)];
 
    if ((board = boardInit()) < 0)
        printf("Fail to init board\n");
 
    if (argc == 2) {
        dev[0].pin = atoi(argv[1]);
    }
    printf("Using GPIO_PIN(%d)\n", dev[0].pin);
    system("modprobe "DRIVER_MODULE);
    signal(SIGINT, intHandler);
    if (board == BOARD_NANOPI_T2)
        dev[0].pin = GPIO_PIN(15);
    if ((devFD =sensorInit(dev, ARRAY_SIZE(dev))) == -1) {
        printf("Fail to init sensor\n");
        return -1;
    }
    printf("Waiting event...\n");
    if ((retSize = sensorRead(devFD, value, ARRAY_SIZE(dev))) == -1) {
        printf("Fail to read sensors\n");
    }
    if (retSize > 0) {
        i = 0;
        for (i=0; i<retSize; i++) {
            printf("dev[%d] value: %d\n", i, value[i]);
        }
    }
    sensorDeinit(devFD);
    system("rmmod "DRIVER_MODULE);
    return 0;
}

For more details about this APIs called in this code sample refer to Matrix API reference manual

Resources


Update Log

Feb-24-2016

  • Added the driver's source code location in Section 5.2

June-17-2016

  • Re-organized and simplified wiki