{"id":19156850,"url":"https://github.com/bertrandmartel/metec-braille-driver","last_synced_at":"2025-05-07T07:46:23.114Z","repository":{"id":46160101,"uuid":"153853235","full_name":"bertrandmartel/metec-braille-driver","owner":"bertrandmartel","description":":hand: Driver for Metec Braille-line 20 Cell module for Arduino \u0026 Raspberry PI","archived":false,"fork":false,"pushed_at":"2021-11-10T09:07:39.000Z","size":170,"stargazers_count":17,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-19T20:17:27.610Z","etag":null,"topics":["arduino","bash","braille","cmake","cpp","cross-compilation","driver","fritzing","kicad","liblouis","makefile","metec","raspberry-pi","windows-iot","windows-runtime-component","wiringpi"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bertrandmartel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-19T23:50:38.000Z","updated_at":"2024-08-06T13:30:19.000Z","dependencies_parsed_at":"2022-09-03T19:11:54.701Z","dependency_job_id":null,"html_url":"https://github.com/bertrandmartel/metec-braille-driver","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fmetec-braille-driver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fmetec-braille-driver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fmetec-braille-driver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fmetec-braille-driver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bertrandmartel","download_url":"https://codeload.github.com/bertrandmartel/metec-braille-driver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252586758,"owners_count":21772348,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","bash","braille","cmake","cpp","cross-compilation","driver","fritzing","kicad","liblouis","makefile","metec","raspberry-pi","windows-iot","windows-runtime-component","wiringpi"],"created_at":"2024-11-09T08:36:07.600Z","updated_at":"2025-05-07T07:46:23.089Z","avatar_url":"https://github.com/bertrandmartel.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Metec Braille cell driver\n\n[![Build Status](https://travis-ci.org/bertrandmartel/metec-braille-driver.svg?branch=master)](https://travis-ci.org/bertrandmartel/metec-braille-driver)\n[![Build status](https://ci.appveyor.com/api/projects/status/pdviuiomaut1rsml?svg=true)](https://ci.appveyor.com/project/bertrandmartel/metec-braille-driver)\n[![NuGet](https://img.shields.io/nuget/v/MetecDriverLibrary.svg)](https://nuget.org/packages/MetecDriverLibrary)\n[![License](http://img.shields.io/:license-mit-blue.svg)](LICENSE.md)\n\nDriver for [Metec Braille-line 20 Cell standard](http://web.metec-ag.de/downloads/braille-line-20cell.pdf) module for Arduino \u0026 Raspberry PI\n\nThis module is composed of 20 [B11 Metec Braille cells](http://web.metec-ag.de/downloads/b11b12-elektronik-1.pdf) driven by piezo-actuators which also feature one interaction button per cell (eg 20 buttons for this module). The module also needs a [DC/DC converter (5V to 200V)](http://web.metec-ag.de/downloads/dcdc-converter-5to200v.pdf)\n\nThis library is compatible with :\n\n- [x] Arduino (tested on Uno \u0026 Mini)\n- [x] Raspberry PI Linux \u0026 wiringPi library\n- [x] Rapsberry PI Windows IoT core OS\n\nThis repo also includes an example using this driver and [liblouis](https://github.com/liblouis/liblouis) altogether on Raspberry PI (Linux/wiringPi)\n\n## Wiring\n\n### Arduino Uno\n\n![arduino Uno breadboard view](https://user-images.githubusercontent.com/5183022/47248430-a652b600-d40a-11e8-8ced-310bd6c8ae7f.png)\n\n\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://user-images.githubusercontent.com/5183022/47248424-a5ba1f80-d40a-11e8-8e9f-79540d522d15.png\"/\u003e\n\u003c/p\u003e\n\n### Arduino Mini\n\n![arduino Mini breadboard view](https://user-images.githubusercontent.com/5183022/47248429-a652b600-d40a-11e8-9e56-dde1b47eabe3.png)\n\n\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://user-images.githubusercontent.com/5183022/47248423-a5ba1f80-d40a-11e8-9e67-aebf52e5a0e1.png\"/\u003e\n\u003c/p\u003e\n\n### Raspberry PI\n\n![Raspberry PI breadboard view](https://user-images.githubusercontent.com/5183022/47248425-a5ba1f80-d40a-11e8-9ae6-27ba3e887656.png)\n\n\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://user-images.githubusercontent.com/5183022/47248422-a5218900-d40a-11e8-83f3-a8cceafdcf55.png\"/\u003e\n\u003c/p\u003e\n\n## Setup\n\n```bash\ngit clone git@github.com:bertrandmartel/metec-braille-driver.git\ncd metec-braille-driver\ngit submodule update --init --recursive\n```\n\n## Project structure\n\n    .\n    ├── src                              # library source\n    ├── include                          # library includes\n    ├── arduino      \n    │   ├── arduino-makefile             # makefile for arduino (build environment)\n    │   ├── examples                     # examples containing one folder per example\n    │   └── Makefile                     # library Makefile (each sample call this Makefile)\n    ├── raspberry      \n    │   ├── linux-wiringpi               # Linux build with wiringPi library folder\n    │   │   ├── examples                 # examples folder\n    │   │   ├── raspberry-dev            # toolchain \u0026 wiringPi build using cmake\n    │   │   ├── out                      # library output directory\n    │   │   ├── out_liblouis             # liblouis output directory\n    │   │   ├── CmakeList.txt            # cmake config for building MetecDriver and liblouis\n    │   │   ├── liblouis_install.sh      # liblouis table install script (to run on Raspberry PI)\n    │   │   ├── run.sh                   # build script\n    │   │   └── clean.sh                 # clean raspberry pi folder (remove cache, output dir etc...)\n    │   ├── windows-iot                  # Windows IoT core folder\n    │   │   └── MetecDriver \n    │   │       ├── MetecDriverLibrary   # library project compiling C++/CX into Windows Runtime Component\n    │   │       ├── ExampleButtonSimple  # buttons input example in C#\n    │   │       ├── ExampleButtons       # buttons input + write pattern example in C#\n    │   │       ├── ExamplePatternChange # change pattern every x sec example in C++\n    │   │       ├── MultiCellsExample    # write multiple pattern example in C++\n    │   │       └── SingleCellExample    # write single pattern example in C++\n    │   └── liblouis                     # liblouis submodule build folder\n    ├── 8pin-adapter                     # KiCad files for 2.00mm to 2.52mm 8 pin adapter\n    └─── fritzing                        # Fritzing sketch for wiring pictures\n\n## Library Usage\n\n* **[Go to Arduino README](./arduino)**\n* **[Go to Raspberry PI Linux + wiringPi README](./raspberry/linux-wiringpi)**\n* **[Go to Raspberry PI Windows IoT Core README](./raspberry/windows-iot)**\n\n## 8 Pin Adapter \n\nThe 8 pin adapter 2.00mm to 2.54mm was created on [KiCad EDA](http://kicad.org/), files are available under `8pin-adapter` :\n\n![8 Pin Adapter](https://user-images.githubusercontent.com/5183022/47248426-a5ba1f80-d40a-11e8-8a8c-5aa408a3e197.png)\n\n![8 Pin Adapter](https://user-images.githubusercontent.com/5183022/47248427-a5ba1f80-d40a-11e8-8f7b-7ef568995aa7.png)\n\n## Protocol\n\n### Braille pattern\n\n3 signals are used : \n\n* STRB (OUTPUT)\n* CLK (OUTPUT)\n* DIN (OUTPUT)\n\nA shift register is used to write the Braille pattern, the data is written to DIN between each clock transition (data is written on CLK falling edge). All bit are latched on STRB falling edge.\n\nThe bit order for the Braille cell is the following XORed : \n\n![bit order](https://user-images.githubusercontent.com/5183022/47248421-a5218900-d40a-11e8-9b38-fee9b4d3111d.png)\n\nYou can use [this tool](https://bertrandmartel.github.io/braille-dot-converter/) to test values\n\nFor example the following write letter \"V\" aka ⠧ which is [BRAILLE-1236 in unicode](http://www.unicode.org/charts/PDF/U2800.pdf) : \n\n![braille pattern](https://user-images.githubusercontent.com/5183022/47248433-a652b600-d40a-11e8-9e03-e979d0b7086b.png)\n\nexplanation for above : ⠧ gives 11000011 (XORed), bit order is 6/7/2/1/0/5/4/3 so it gives : 11011000, and XORed : 00100111\n\n### Interaction buttons\n\n3 signals are used : \n\n * STRB (OUTPUT)\n * CLK (OUTPUT)\n * DOUT (INPUT)\n\nThe buttons can be read when strobe is high between each clock transtion (falling edge). B11 module can have 2 buttons so we need to read 20 * 2 times each time we check for button state :\n\n![button interaction](https://user-images.githubusercontent.com/5183022/47248432-a652b600-d40a-11e8-94ef-a5eadad55eda.png)\n\nexplanation for above: the 2 last bit read are 01 which means the first button has been pressed \n\n## More resources\n\n* This amazing post on Arduino forum : https://forum.arduino.cc/index.php?topic=236677.0 special thanks to metec_ab\n\n* [dot converter tool](https://bertrandmartel.github.io/braille-dot-converter/) written in React JS is useful to quickly test a Braille pattern\n\n* [liblouis](https://github.com/liblouis/liblouis) the open source Braille translator which can be used on Raspberry PI along with this driver (see Raspberry PI library usage)\n\n* [Raspberry PI cross compile guide](https://medium.com/@au42/the-useful-raspberrypi-cross-compile-guide-ea56054de187)\n\n* [raspberry-dev](https://github.com/bertrandmartel/raspberry-dev) : a quick development environment to develop for Raspberry PI\n\n* [arduino-dev](https://github.com/bertrandmartel/arduino-makefile) for developping Arduino using a single Makefile\n\n* [Fritzing parts](https://github.com/bertrandmartel/fritzing-parts) I've made for README aesthetics\n\n## License\n\nThe MIT License (MIT) Copyright (c) 2018 Bertrand Martel\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertrandmartel%2Fmetec-braille-driver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbertrandmartel%2Fmetec-braille-driver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertrandmartel%2Fmetec-braille-driver/lists"}