Make with Ada

Programming Competition   June 20 - September 30, 2016

Competition Entries


Movement Detection using lis3dsh

Using lis3dsh to detect the movement of board, the trace of which may be displayed on a connected computer screen.

Project Lead Gen Zheng     Location Nanjing, China


Parkinson's monitoring unit

PMU is a monitoring unit for people suffering from parkinson's motor disease which causes involuntary hand movement. This unit is connected to cloud over WiFi and the movement activity is logged on to cloud when then can be analyzed by doctor to effective medication. By analyzing the data on cloud patient can be prescribed with medicines optimally.

Project Lead Nitin Bhaskar     Location Udupi, India



EtherScope is a monitoring tool that analyzes the Ethernet traffic. It runs on a STM32F746 board, reads the Ethernet packets, do some realtime analysis and displays the results on the 480x272 touch panel.

The EtherScope interface allows to filter the results at different levels and report various kind of information.

Project Lead Stephane Carrez     Location Issy Les Moulineaux, France


Self balancing two wheel line follower Robot

Two wheel self balancing robot, with line following capability using camera. Line and background color will be configurable. Could also be used as grid following or navigating on grids, given the had codes path.

Project Lead Navin Maheshwari     Location Bengaluru, India


Loop Station

The project aims to realize in Ada a loop station (also known as looper) using a STM32F746G prototyping board. The system features a touch screen, microphones and speaker (connected to jack audio). Using virtual buttons on the touch screen the musician using the loop station can record any sound and reproduce it at desired volume and speed. An Artist using such system with just his voice can compose complex and elaborate music. Technically it will involve DSP, compression algorithms and touch UI to realize a true digital music instrument.

Project Lead Antonio Marullo     Location Rovigo, Italy


Ada Rover

Autonomous Navigation Robot Car With Ada

The Ada Rover is a robot car platform designed and built for experimentation with basic autonomous navigation algorithms written in the Ada programming language.

Key hardware: - STM32F469 Discovery board. - Accelerometer, gyroscope - Camera

Key software: - Shortests path algorithm - PID controller - Extended Kalman Filter for sensor fusion

Some project goals are: - Learn the Ada programming language. - Implement some of the most popular algorithms for autonomous navigation in Ada. - Learn key concepts in software development of safety-critical and high-security applications. - Develop some basic libraries in Ada for matrix algebraic computations and homogeneous transformations.

Project Lead Raul Alvarez Torrico     Location Cochabamba, Bolivia


Emergency Calling System

I plan to implement which will call the emergency system and inform the car accident with the medical record of the patient and the GPS details.

Project Lead mehmet bozdal     Location Gaziantep, Turkey



DrumAda is a dynamic digital drum synthesizer written in Ada. DrumAda's tone changes dynamically as you play and move with the drum.

Project Lead Daryl Posnett     Location Sacramento, USA


Ecg data acquisition and processing

This project aims of a wearable ecg monitor, which can be used to monitor patients health over the air. Now a days, patients who are susceptible to heart attack have to stay in hospitals just to monitor ecg and further advise is given by doctor with the use of ecg. With our project they will be free to go anywhere , as soon as doctor notices the difference in ecg he will inform patient and he can immediately join hospital

Project Lead Swapnil Kashid     Additional Team Prasad Ostwal, Ajinkya Ghude,     Location Pune, India


Power optimized tracking collars for Animals

We are working on a low power consumption Arm(M0+) controller , for a wearable device. Power optimization will be our main criteria as the device is operated with the battery . Tracking of wildlife entities using collars that are attached with gps unit. These collars can obtain an extremely accurate locations of the animals every few hours (day and night). The stored data is updated to the server or sent as an sms on a regular basis. The device is power designed to work for 5 years without replacement or charging of batteries. The project utilizes one of the lowest power consumption smart arm microprocessor.

Project Lead sandhya mohan     Additional Team Archana,     Location bangalore, India



Driving BLDC Motor and controlling the same.

Project Lead Amit Padave     Location Thane, India


IoT Networking Stack for the NXP FRDM-K64F board

This project is about developing an IoT networking stack in Ada 2012 for the NXP FRDM-K64F board. Software for the following connectivity peripherals of this board will be developed: - Wired Ethernet port - RF (wireless) transceiver (add-on board)

For Ethernet connectivity, a zero-copy UDP/IP stack will be developed, from the Ethernet device driver to the UDP application interface. The UDP/IP stack will enable a FRDM-K64F to communicate with any host in the Internet. On top of this networking stack the "Constrained Application Protocol" (CoAP) will be implemented.

For RF connectivity, an RF communication stack will be developed. The RF stack will enable two FRDM-K64F boards communicate wirelessly over RF.

The IoT networking stack will be architected in three layers: - Layer 3: Device-independent layer. This layer will contain the platform- independent components of the UDP/IP/CoAP stack. Layer 3 sits on top of Layer 2 and Layer 1. - Layer 2: Embedded software building blocks layer for the NXP FRDM-K64F. This is an infrastructure layer of reusable software abstractions for embedded software development, that provide a board-independent interface or HAL (hardware abstraction layer). It is meant to be application independent, and thus reusable for any bare-metal software project in Ada 2012 targeted for the FRDM-K64F board. Even further, this layer is designed to be easily portable to different boards that have a Cortex-M-based microcontroller and similar peripherals. Layer 2 sits on top of Layer 1. - Layer 1: Port of the "Small Foot Print Ravenscar" gnat runtime library for the NXP Kinetis K64F microcontroller.

Project Lead German Rivera     Location Austin, United States



A robot using laser, solar and so on that can autonomous avoid collision

Project Lead wenlong xie     Location Shenzhen, China



Use the Ada programming langauge and the STM32 family of micro-controllers to make a piece of electronic test equipment. We propose using a source measurement unit (SMU) as a good initial project. SMU's are very flexible and broadly useful pieces of equipment for electronics engineering, but have traditionally only been available from major test equipment vendors and at a cost that excludes most hobbyists. In recent years many low cost or "homebrew" solutions for test equipment have been documented on the internet, but to our knowledge very few home made SMU's have been built. Our current goals for the project are:

1) Learn Ada and document the process 2) Demonstrate Ada's applicability to the test equipment domain 3) Contribute an open source SMU design to the community 4) Explore the use of Ada's safety critical and hard realtime features for the control loops and multi-slope analog to digital conversions used in the SMU 5) Implement an LXI compliant interface, which could be reused by other open source bench equipment projects 6) Produce a multi-chemistry battery charging application on top of the SMU hardware, and use this to further demonstrate the safety critical features of Ada

Project Lead Lawrence May     Additional Team William Gerig,     Location Fairfax, United States


Framework to develop control software for the NXP cup race car

This project is about developing a framework in Ada 2012 for developing the control software for the NXP cup race car. The NXP cup race car, officially known as "TFC-KIT: The NXP Cup Intelligent Car Development System", is a "toy size" race car chassis coupled with a FRDM-KL25Z board and a TFC-shield board. The car kit also includes two DC motors for the rear wheels, a steering servo for the front wheels and a line scan camera. The car runs on a white track that has turns, intersections, hills and wavy (slalom) segments, and must detect the finish line to stop. The control software for the car is stored in the flash memory of the FRDM-KL25Z board's microcontroller. The microcontroller is an NXP Kinetis KL25Z chip, with Cortex-M0+ core, 128KB of NOR flash and 16KB of SRAM. The software runs out of flash and can only use the SRAM in the micrcocontroller, to store program variables. This constraint makes the KL25Z micrcontroller an interesting platform to demonstrate that Ada 2012 and the gnat compiler can be used successfully to build embedded software for such small devices.

The control software consists of a control loop that reads frames from the line-scan camera, analyzes each frame to decide where to steer the car, and sends commands to the steering servo and rear wheel motors. The goal of the control algorithm is to keep the car inside track at all times while traversing it as fast as possible.

The main deliverable of this project is a software framework for developing the control software for the NXP cup race car. This framework will enable students and hobbyists alike to use Ada 2012 to develop their own control software for the little car, and to experiment with different image processing algorithms to analyze camera frames as well as with different control algorithms for autonomous driving of the car. They will be able to concentrate on the core problems, without having to write the whole software stack for the car, from scratch.

The car control software framework will be architected in three layers: - Layer 3: Platform-independent car control application layer. This layer is the framework itself. It will sit on top of the "Embedded Software building blocks" layer and the "Small Foot Print Ravenscar" gnat runtime library. Layer 3 sits on top of Layer 2 and Layer 1. - Layer 2: Embedded software building blocks layer for the NXP FRDM-KL25Z. This is an infrastructure layer of reusable software abstractions for embedded software development, that provide a board-independent interface or HAL (hardware abstraction layer). It is meant to be application independent, and thus reusable for any bare-metal software project in Ada 2012 targeted for the FRDM-KL25Z board. Even further, this layer is designed to be easily portable to different boards that have a Cortex-M-based microcontroller and similar peripherals. Layer 2 sits on top of Layer 1. - Port of the "Small Foot Print Ravenscar" gnat runtime library for the NXP Kinetis KL25Z microcontroller.

Project Lead German Rivera     Location Austin, United States


Explorer and mapper robot

The explorer and mapper robot will be a robot with four wheels which will evolute in a room. Thanks to some ultrasonic ranging modules and AHRS, it will take some positions and send and/or record them. With those data, we can plotted the shape of the room and the object. I will use an Nucleo board, and perhaps add an hardware abstraction layer to suport also Arduino board in the robot. For the plotting application, I will use a computer or a Raspberry or a STM32F4 board with a screen. And of course, all will be make with Ada.

Project Lead Sébastien BARDOT     Location Angoulême, France


Six Degrees of Freedom

Optimal coupling between ROTO and TRASLO movements of a base platform

Project Lead Nicolo' Carbi     Location Trieste, ITALY


Bluetooth Beacons

Having created an initial RTS for the NRF51822, I want to play with the 2.4GHz radio. Initial low hanging fruit is iBeacon, followed by Eddystone-EID.

Project Lead Shawn Nock     Location London, Canada



Develop ARM base MCU that use Ada for Internet of Things, Automation with smart devices for embedded systems, home automation and machine learning.

Project will use ARM cortex MCU running Ada software that could connect to the cloud, M2M and data analytics. Various sensors will be used to demo and showcase real-world case studies and scenario like draught/water shortage, farming, waste control, remote logging, tracking, home-automation, etc...

The project could customise and embedded into curriculum to teach at schools/colleges e.g. Robotics, Mechatronics, Automation, Programming in Ada, etc...

Project Lead Sanyaade Adekoya     Additional Team Nagendra Bojanapu, Troston Fernadez , Kalyan Bojanapu,     Location London, United Kingdom


Controlling the STM32F469 discovery IC through Wifi

The goal of this project is to control the STM32F469 IC through Wifi using an ESP8266 Wifi Module i.e. sending messages or pictures from a desktop application and having them presented on the screen of the STM32F469 discovery IC. There is a C library for parsing AT commands when using an ESP8266. Maybe there is a need of something similar in Ada/SPARK?

Project Lead Joakim Strandberg     Location Stockholm, Stockholm


Airborne Science Aircraft Tracker

Stand-alone device to provide power on and power off notifications for the assorted Airborne Science Program aircraft including NASA, NOAA Hurricane Hunters, and USAF Hurricane Hunters.

Project Lead Mike Delaney     Location Lancaster, USA



I really like drawbots, and have been looking at Dan Royer's (Marginally Clever- Makelangelo ( for a long time.

One of my sons got interested after the recent Vancouver Makerfaire and found a really nice hanger/pully/bracket set on Thingiverse (

And we just happen to have enough spare parts (NEMA 17 steppers, Arduino's, motor shields) to make one each.

One of the great things about the Makelangelo is that all the software is open source (thanks Dan!)

I was lucky enough to win an STM32 dev board thanks to the Embedded FM podcast ( and AdaCore give-away. But I've never used Ada or an STM/Arm board... what to do?

AHA! Rewrite the Makelangeo firmware in Ada! I know that the code works, so I can focus on learning about Ada and the STM boards. And given my background in software QA, it's also a great chance to explore SPARK.

And if time permits, I'll extend the firmware to read files from the SD card and do something nice with the Screen- possibly a preview of the image and some sort of overlay with what has been drawn.

Project Lead Julian Rendell     Location Richmond, Canada


Closed loop CNC axis control

Too long have hobby 3D printers paid premium for stepper motors for use with open loop control schemes. In this project I hope to create a G-code interpreter (at least, a sub-set of G-code) that lets me use a DC motor + optical encoder set-up such as that found in most desktop printers and other consumer products.

Project Lead Jonathan Whitaker     Location Cape Town, South Africa


Bird's WeatherStation

To monitor various atmospheric conditions, and alerts as necessary.

Project Lead Paul Bird     Location Folkestone, UK


Bicycle Theft Detector

I plan on creating a bike theft detection system that will send a message if the bike is moved in a way that would indicate theft or tampering

Project Lead Brian Lavender     Location Sacramento, USA


Audio games for the electric Guitar

The project aims to implement a small learn game for the electric guitar. The main objective is to improve the musician timming and perception. The project implement real time atack and note classification to analyse the musicians performance.

Project Lead Euripedes Rocha     Location Campinas, Brazil


Community wide energy management system

Fuel poverty in the UK is caused by a mix of both poverty and a lack of understanding of heating controls. Kushtibot not just saves energy by "zoning the House" but also by connecting members of the community so someone who is cleverer with heating controls can set your controls and schedule.

Project Lead Tony Gair     Location SOUTH SHIELDS, United Kingdom


USB video card

USB video card on 32F469IDISCOVERY and driver for Linux

Project Lead Alexsander Tikchonyik     Location Bila Tserkva , Ukraine


Ada Event Framework

The goal of my project is to test the feasibility of using event-driven programming concepts ( with Ada on smaller (cheaper, lower power, less memory) microcontrollers than those used in Adacore's demo.

The steps of the project are:

  • Implement an event framework in Ada
  • Port the Ada runtime to smaller microcontrollers (probably the STM32F303 or the ATSAMD21G18)
  • Program a demo to test the framework. The demo should be something like measuring the orientation of a board and transferring the measures wirelessly to another board displaying them.

Project Lead Jasmin St-Laurent     Location Montréal, Canada



Simple CNC milling machine

Project Lead Sergey "Jamshoot" Gorshkov     Location Samara, Russia


Ada Transport Level Security (TLS) firewall

Please let me know if any of this is not clear, and I'll rewrite it. If the diagram I mention would be useful, please let me know, and I'll supply it.

My intention is to write a proof of concept application, that provides a bare-bones implementation of the larger project that I am hoping to find funding for. The documentation for that project is here:

For the competition, my requirements would be based on a device that:

  1. Accepts external connection request using http protocol
  2. Negotiates a session key using a SSL Web Server Certificate - just as in TLS 1.2
  3. Uses this key to enable an end-to-end encrypted session with the web server (using cleartext http protocol)

This would be implemented as an 'ethernet' connection that an 802.3 interface, either:

  1. Using the on-board Ethernet connection
  2. Using 2 x USB connectors with USB <-> Ethernet adapters
  3. Using the Ethernet connection + 1 x USB <-> Ethernet adapters
  4. Using a USB <-> wi-fi device

[If time permits, the ideal will be to enable it to work on all the above 4 - if the interfacing through USB, or Wi-Fi, proves too time-consuming, then just the on-board Ethernet connection will be used]

For the proof of concept, I would not attempt a full implementation of TLS or SSL. Rather, I'd use this design:

[[START]] End User Browser <- http -> Internet <- {clear text}

Session set-up: [ARM A] <- {negotiate session key} -> Ethenet <- Internet -> Ethernet <- {negotiate session key} -> [ARM B]

Session data: [ARM A] <- {encrypted} -> Ethernet <- Internet -> Ethernet <- {encrypted} -> [ARM B]

<- http {clear text} -> Web Server [[END]]

ARM A & B = - Embedded Gnat system on 32F746G processor board

[The above will look better in a proper diagram that I can supply]

Design requirements:

  1. The high-level design will be general (not linked to ARM, or to TLS).
  2. Board/Chip level tasks separate from higher-level tasks (so it is easy to port)
  3. Session set up and data encryption routines written as general containers, so it is easy to change protocols and cyphers
  4. Plug-and-play: The boxes ARM-A and ARM-B should be easy to plug in between the external internet and the router to the internal network with minimal (or no) configuration.
  5. The boxes will [in the proof of concept] pass all traffic, apart from http traffic, straight through
  6. The boxes will validate that the remote box is legitimate [if possible using a block-chain, maybe not for the proof of concept] using a check of the revision, and the binary code (so a box that maliciously claims to be an Ada TLS box at a given release can be identified as bogus)
  7. The boxes will negotiate the session key using standard certificates (possibly hard-coded for the proof-of-concept)
  8. Event handling will be defined in the design
  9. The code will be produced to be clear and easy to understand
  10. The code will be designed so that it can be:
    • ported to another OS (linux say), where it can connect to the same API as OpenSSL uses
    • ported to browsers, where it can replace the existing https / TLS / SSL logic
    • easily changed so that it can translate other protocols than html ( SMTP, ftp, ssh etc.)
    • can provide an easy (ideally standard) API for application developers so it can be embedded in any code (eg S.W.I.F.T)
  11. All types and variables (apart from, of course, unnamed loop counters, and similar) will be described in a data dictionary, which defines their scope, so an XREF of the code can detect any unusual or unauthorised use of types or variables.
  12. Though it is not necessary for the embedded version, since no other code can be running on the device, nevertheless, the code will dispose of all variable data safely, so that it would be available to, say, crash dump analysis, for the minimum period of time. Once a packed has been sent, the variables that contained any of the data will be overwritten specifically.
  13. A simple, stripped-down, configuration interface will be implemented. This will probably consist of an XML configuration file being sent to a particular port, and log-files to be dumped through ftp (not something that would be secure in a real environment, of course!). This would allow testing of the logic used to decide on the cypher, declare malicious addresses, and similar.
  14. If easy to implement, events sent to another device will be implemented, probably using SNMP.
  15. In parallel to the design and development, the test-suite will be designed, and developed.

The proof-of-concept may use a simple cypher (perhaps an XOR with the session key), however, it will attempt to achieve Application Level ssecurity, rather than Transport or Session level security, as in TLS / SSL. This will be achieved by detecting the sensitive data in the html stream and encrypting that, rather than encrypting the html tags themselves. The aim, as in all good cryptography, being to reduce the size of the sample of encrypted data available to 3rd-party interceptors to a minimum. The process would be:

  1. Detect tags in the stream and replace them with tokens.
  2. Detect constant fields (form labels etc) and leave them unencrypted.
  3. Detect variable fields - customer name, data in fields, numbers in forms etc - and encrypt these

The above encryption would be strong encryption from the session key.

When the packet is ready, with all the sensitive fields encrypted, the entire packet is then encrypted and padded with nonce data, using a separate, possibly weaker, encryption.

This higher level encryption will only be an option. Straight-forward TLS-style encryption will be the default.

Since the proof of concept will involve two devices ARM-A and ARM-B connected directly, the encryption does not need to be compatible with existing browser or server-side protocols, and can use this double-encryption.

This design will be achieved by a clear task structure that separates interfacing / low-level routines from the session key negotiation and the encryption.

Project Lead Peter Brooks     Location Cape Town, South Africa


On-Board Computer Demonstrator

The project aims to develope an On-board Computer SW demonstrator, where part of the inputs (as sensors, actuators, etc.) is just simulated. The main goal is to implement the logic behind the processing including some failure detection and recovery, mode transition, etc.

Project Lead Tomas Cinert     Location Praha 6, Czech republic



cloud security and fire alarm system with BLE

Project Lead Dmitry Korshavin     Additional Team Talabaev Sergey,     Location Zarechny, Penza region, Russia


PID Food Dehydrator

I add PID control to a twenty dollar food dehydrator to see if I can get it to compete with the more expensive brands.

Project Lead Gerrit Coetzee     Location Bellingham, USA


Rapid Prototyping from Simulink through Ada

This project aims to develop an automatic Ada code generator for the teensy3.1 ARM cortex-m4 from Simulink. This allows rapid prototyping and fast access to the production of real-time applications as well as testing multiple control algorithms.

Examples for DC motor control will be given in details.

Project Lead DELLA KRACHAI Mohamed     Location ORAN, Algeria


Serial to SPI Stepper Motors Drive

Project will implement a G-Code Interpreter and will drive 8 motors over SPI interface

Project Lead Daniel Dumitru     Location Bucuresti, Romania


Ada Buggy

This will be an all GNAT Ada control of a MikroElektronika Buggy using the STM32F407 based MikroElektronika Clicker 2 board as the controller.It will have four custom click boards make by me with the following components: 1. A 128x128 OLED Adafruit display board with my Ada drivers. 2. A buzzer board with a piezo buzzer foe music and sound effects. 3. A Sharp IR sensor board. Uses a GP2Y0D810Z0F sensor. 4. A board with a servo mounted LIDAR-Lite sensor from Pulsed Light, Inc.

Project Lead Jerry Petrey     Location Tucson, USA


Internet of Things Gossiping Queue

A Gossiping Distributed Queue designed for the Internet of Things

Project Lead Dan Kozlowski     Location Glen Mills, USA