Author Archives: Arduino Team

Detect problems with your Arduino projects

via Arduino Blog

This article was written by Per Tillisch, Tooling Team SW Engineer at Arduino.

The Arduino team created a tool to check Arduino projects for common problems. Arduino Lint runs over 175 checks on your sketches, libraries, and boards platforms which cover specification compliance, Library Manager submission requirements, and best practices.

Arduino Lint

Arduino Lint is an easy to use, yet powerful, command line tool. Its focus is on the structure, metadata, and configuration of Arduino projects, rather than the code.

Getting started

Follow the installation instructions to get ready to use Arduino Lint: https://arduino.github.io/arduino-lint/latest/installation/

Now you only need to open a terminal at your project folder and run the command: arduino-lint

This will automatically detect the project type and check it against the relevant rules.

The default configuration of Arduino Lint provides for the most common use cases, while offering the option to change settings via command line flags.

Configuration

Compliance setting

The --compliance flag allows you to configure the strictness of the applied rules. The three compliance level values accepted by this flag are:

  • permissive – failure will occur only when severe rule violations are found. Although a project that passes at the permissive setting will work with the current Arduino development software versions, it may not be fully specification-compliant, risking incompatibility or a poor experience for the users.
  • specification –  the default setting, enforces compliance with the official Arduino project specifications (sketch, library, platform).
  • strict – enforces best practices, above and beyond the minimum requirements for specification compliance. Use this setting to ensure the best experience for the users of the project.

Library Manager setting

Arduino Library Manager is the best way to provide installation and updates of Arduino libraries. In order to be accepted for inclusion in Library Manager, a library is required to meet some requirements.

Arduino Lint provides checks for these requirements as well, controlled by the --library-manager flag.

The Library Manager submission-specific rules are enabled via --library-manager submit.

Even if your library isn’t yet ready to be added to Library Manager, it’s a good idea to use this setting to ensure no incompatibilities are introduced.

Once your library is in the Library Manager index, each release is automatically picked up and made available to the Arduino community. Releases are also subject to special rules. The command arduino-lint --library-manager update will tell you whether your library is compliant with these rules.

Integration

The --format flag configures the format of arduino-lint‘s output. The default --format text setting provides human readable output. For automation or integration with other tools, the machine readable output provided by --format json may be more convenient. This setting exposes every detail of the rules that were applied.

The --report-file flag causes arduino-lint to write the JSON output to the specified file.

Continuous integration

Arduino Lint would be a great addition to your continuous integration system. Running the tool after each change to the project can allow you to identify any problems that were introduced.

This is easily done by using the arduino/arduino-lint-action GitHub Actions action: https://github.com/arduino/arduino-lint-action

Add a simple workflow file to the repository of your Arduino project and GitHub will automatically run Arduino Lint on every pull request and push.

Give it a try!

Will your project get a passing grade from Arduino Lint? There’s only one way to find out…

Support and feedback

You can discuss or get assistance with using Arduino Lint on the Arduino Forum.

Feedback is welcome! Please submit feature requests or bug reports to the issue trackers:

Arduino-powered puzzle boxes help pop the question

via Arduino Blog

As a creative way to “pop the question,” Redditor lmjd14 proposed to his girlfriend using a sequence of Arduino-based puzzle boxes.

As seen here, the first box opens when one inputs a series of codes on a keypad, which relate to important relationship dates, while the second responds to holding down the correct buttons. The third involves a set of colored coins, and the fourth is activated with some RFID-enabled statues from the other boxes.

The final box was unlocked with lmjd14’s now-fiance’s thumbprint, using a GPS module that allows it to be opened only in the correct location. As she said yes, it’s a hack that they will both certainly cherish, and something that will be a great story to tell others in the future!

This 3D-printed UFO lamp will leave you amoosed!

via Arduino Blog

As we all know, when aliens descend from outer space, they often beam bovine up for testing and observation. While you might not have the privilege of seeing this process in action, “OneldMONstr” has created the next best thing: a miniature model of a cow being beamed up, complete with smoke and lighting effects.

The device features an Arduino Nano for control along with WS2812B LEDs. The lucky and/or unfortunate cow is spun using a small DC motor via an L293D driver, and a coil produces smoke with haze fluid.” (Though OneldMONstr notes the next version will implement an ultrasonic hazer.) A DFPlayer Mini MP3 module is embedded in the base for sound, while a half dozen LEDs illuminate from the bottom. More details on the project can be found here.

Fighting smartphone addiction with Arduino

via Arduino Blog

How many times a day do you grab your phone for trivial purposes, such as scrolling through social media? Nick O’Hara found that his number was around 100 times during the workday, which sounds like a lot, but is likely pretty typical. To combat these micro-distractions, he built an Arduino-based device that senses when a phone is placed on top of it using a microswitch.

When the phone is lifted, it connects to the network via a WiFi module, and donates money to charity. What O’Hara discovered was that his usage went down significantly when he automatically donated $1 per pickup, settling on about 10 checks, or $10 each day. As he increased donation/pickup level, his daily usage still came out to about $10, which would seem to be an interesting psychological experiment.

FISHBOT reels in fish under smartphone control

via Arduino Blog

As reported by Hackaday, fishing is generally considered to be a fun and relaxing activity, but it isn’t accessible for those without a certain amount of strength and dexterity. To help more people to be able to enjoy this sport, Ozgur Ozcan has been working on what he calls the “FISHBOT.”

This auto-fishing device is controlled by an Arduino Mega, along with an IBT_2 PWM driver to actuate a 400 watt DC motor for reeling duties. An HM-10 Bluetooth module enables smartphone connectivity, opening up the possibility for fingertip activation, or even via the internal gyroscope.

The setup also features a load cell, which could be used to release the line when it’s in danger of being snapped, or to weigh the fish automatically when landed.

Create a Nano 33 IoT-based filtration and flame detection system for your 3D printer

via Arduino Blog

After welcoming a new child into the world, Mike Buss decided that his 3D printer needed a few safety enhancements. To address this issue, he added a clear chamber on top of his Ultimaker S3 with a fan and filter to remove volatile organic chemicals (VOCs), controlled by an Arduino Nano 33 IoT.

The Nano 33 IoT interfaces with the printer over WiFi to automatically detect when it’s in use, and switches the fan on via a relay. Speed can be modified through PWM.

Sensors are implemented to measure temperature, humidity, and VOC levels. This data is wirelessly sent to a server running on a network-attached storage device. A flame sensor is also placed above the Ultimaker, which allows it to sound an audible alarm and cut off power if burning is detected.

More details on the filtration system can be found in Buss’ blog post.