Posts with «software» label

Display Abstraction Layer

"Software never dies", the saying goes. But to help that happen, the software should be as independent as possible from the hardware it uses. Today, we are getting closer to this goal by introducing the Display Abstraction Layer (DAL), a simple framework that allows displaying on any suitable device. The implementation is based on polymorphism: using a virtual class when writing to the display, but instantiating a concrete display class depending on the device being written to. Each device requires its own concrete class that implements a set of functions (defined in the virtual class) used for outputting to the display. Thus every concrete display class becomes a simple “device driver” for the specific display device that was written for.

A class diagram of the DAL framework is shown below.

This is nothing revolutionary, just a simple solution that should have been there (in projects using displays) from the beginning. It provides an easy adaptation between the project functionality and the display, and also reduces the effort of portability to just implementing a class for the new display.

The DAL interface consists of a set of function definitions used to output to the display. This set of functions depends on the project. That means that the DAL interface for WiFiChron will be different from the one for WiseClock. For example, in the case of WiFiChron, there are only 4 functions dealing with the display that need to be implemented:

    void setup();
    void writeDisplay (char* displayBuffer);
    void setBrightness(uint8_t brightness);
    void reset();

WiseClock uses a lot more display functions (currently defined in HT1632.h):

  void setup();
  void clear();
  void setBrightness(byte level);
  void snapshot_shadowram();
  byte get_snapshotram   (coord_t x, int8_t y);
  byte get_shadowram     (coord_t x, int8_t y);
  void clearSnapshot     ();
  void clearSnapshot     (int8_t dispNo = 0);
  void copyToVideo       (byte chipNo, char* vbuffer);
  void overlayWithSnapshotHorizontal(int8_t y);
  void overlayWithSnapshotVertical  (coord_t x);
  void plot         (coord_t x, int8_t y, byte color);
  void line         (coord_t x1, int8_t y1, coord_t x2, int8_t y2, byte val);
  void putChar      (coord_t x, int8_t y, char c, byte color);
  void putTinyChar  (coord_t x, int8_t y, char c, byte color);
  coord_t       putLargeChar (coord_t x, int8_t y, char c, byte color);
  void putBigDigit  (coord_t x, int8_t y, int8_t digit, int8_t fontNbr, byte color, int8_t columns);
  void putFullDigit (coord_t x, int8_t y, uint8_t digit, byte color, byte fontNumber=0);
  void putBitmap    (coord_t x, int8_t y, byte indexBmp, byte color=ORANGE);
  void putString    (coord_t x, int8_t y, const char* str, byte color);
  void putTinyString(coord_t x, int8_t y, const char* str, byte color);
  void displayStaticLine  (char* text, int8_t y, byte color);
  void displayStaticLine_P(const char* text, int8_t y, byte color);

Currently, I have implemented and tested a bunch of display classes for HDSPwise clock (the simpler version of WiFiChron). These include support for HDSP2534, DL1414, OLED (132x64). The common characteristic of these displays, that makes them suitable for the HDSP clock/WiFiChron, is that all of them can display 8 characters that can then be scrolled horizontally.

Wise time with Arduino 11 Aug 16:15

H2gO Keeps Us from Drying Out

The scientific community cannot always agree on how much water a person needs in a day, and since we are not Fremen, we should give it more thought than we do. For many people, remembering to take a sip now and then is all we need and the H2gO is built to remind [Angeliki Beyko] when to reach for the water bottle. A kitchen timer would probably get the job done, but we can assure you, that is not how we do things around here.

A cast silicone droplet lights up to show how much water you have drunk and pressing the center of the device means you have taken a drink. Under the hood, you find a twelve-node NeoPixel ring, a twelve millimeter momentary switch, and an Arduino Pro Mini holding it all together. A GitHub repo is linked in the article where you can find Arduino code, the droplet model, and links to all the parts. I do not think we will need a device to remind us when to use the bathroom after all this water.

Another intrepid hacker seeks to measure a person’s intake while another measures output.

New search engine and Arduino reference!

The Arduino web team has working hard behind the scenes improving our legacy systems. Now, it’s time to work on something more interesting for the team and more useful for our community! From here on out, we will update you every month on the latest and greatest activities…

Today, we are announcing a pair of major features that are only a mere preview of what you can expect to see from an Arduino user’s point of view:

  • The blog has a new search engine that is much faster, more precise, and allows readers to filter results.
  • The Arduino reference is now quicker,  mobile-friendly, and completely open to contributions. You can check out our GitHub reference repo here.

Let’s look at how those two features work and how they are implemented. The search engine is powered by our provider Algolia, offering an impressively fast search engine and enhanced UX. Our goal is to integrate it with each of our websites and finally have a unified search for all Arduino-related content.

We are going to be testing the search engine for a bit on the blog and eventually roll it out to our websites.

Perhaps what we are most proud of, though, is the new reference engine:

  • Arduino users can directly contribute to the reference by creating a pull request here.
  • We are going to support multiple languages. In fact, some users have already helped us in creating French, German, Korean, Italian, Japanese, Portuguese, and Spanish versions.
  • As soon as a new pull request has been merged, the system deploys to our website automatically, and if someone modifies the English version of the reference, all other language repositories are going to be notified as well.

This is just the beginning with much more to come. Stay tuned!

Arduino Blog 14 Dec 16:28

Arduino Create comes to Chrome OS devices!

Arduino Create is now available to everyone on Chrome OS devices, with $0.99 per month subscription. An Arduino account and Google ID is all you need to use it, just follow the Create Getting Started guide on your Chrome OS device. We are actively working on specific licensing and pricing for schools, so stay tuned.

The new Arduino Create Chrome App enables students and other users to write code, access tutorials, configure boards, and share projects. Designed to provide a continuous workflow from inspiration to implementation, Makers can easily manage every aspect of their project right from a single dashboard.

Developed with the classroom in mind: The Arduino Chrome App allows you to teach and tinker with Arduino electronics and programming in a collaborative, always-up-to-date environment.

Built for Chrome OS: Code online, save your sketches in the cloud, and upload them to any Arduino connected to your Chrome OS device, without having to install anything locally. All the contributed libraries are automatically included.

The following Arduinos are currently supported: Uno, 101, Mega, Esplora, Nano (ATmega328), Micro, Zero, MKR1000, MKR Zero, MKR Fox 1200, Pro and Pro Mini (ATmega328). We are actively working with the Chromium team to restore support for the Arduino Leonardo in a future Chrome OS release.

The launch of this app would not have been possible without the following open source components:

As usual if you encounter any bugs, issues, or have an idea on how we can improve the Chrome app, please open a discussion thread on this Forum page.
Please note that this app will work only on Chrome OS, if you click on the Google Store link on any other OS you will not be able to install it.

Web Editor updates: Import your sketchbook and more


Some useful updates on the Arduino Web Editor!

Are you sticking to the desktop Arduino IDE because all your work is saved locally? That’s no longer a problem! Our brand new import tool enables you to upload your entire sketchbook with just a few clicks on the Arduino Web Editor. It is particularly handy because it lets you move all your sketches and libraries to the cloud in a single flow.

Once your sketches and libraries are online, they will be available on any device and backed up. For details on how to migrate all your code online, check out this tutorial.

Sadly, Codebender is shutting down. You can use the import feature also to easily migrate to the Web Editor. (More details here.)

If you have a big sketchbook, you may want to clean up or categorize things once in awhile. With our bulk action tool, you can delete, move, or download multiple sketches at the same time. Go to the Sketchbook panel, hover on the sketch icon, and select all the files you want to act on. Doubts on how this will work? Learn more in this guide.

What’s coming next?

We are currently working on a super streamlined way to edit your libraries within the Web Editor, and looking for the best way to implement the Chromebook plugin. Stay tuned!

3 simple filtering techniques to eliminate noise

Increasing accuracy in the collection of data coming from sensors is a need that, sooner or later, Makers need to face. Paul Martinsen from MegunoLink created a tutorial to eliminate noise from sensor readings on Arduino with three simple filtering techniques.

The Averaging and Running Average techniques are easy to implement as they work by adding a number of measurements together, then dividing the total by the number of measurements. In both cases, the downside is that it can use a lot of memory.

The Exponential filter is a better solution for several reasons: it doesn’t require much memory, you can control how much filtering is applied with a single parameter, and it saves battery power because you don’t need to make many measurements at once. For this solution, they developed an Arduino filter library so you don’t need to go mad with math!

Interested? You can find the tutorial and explore the code on MegunoLing’s blog post here.

Arduino Blog 05 Sep 13:39

Download the new Arduino IDE 1.6.10!

Great news, Makers! We’re excited to announce the immediate availability of the Arduino IDE 1.6.10, AVR core 1.6.12 and SAM core 1.6.9.

The most notable feature of this release is the introduction of an up-to-date bundled toolchain for AVR containing the latest goodies from Atmel, GCC and AVRDUDE devs.

Thanks to LTO (Link Time Optimization), making your sketches smaller and faster is now only a push of the “Compile” button away.

The AVRDUDE update brings out-of-the-box support for a wide range of microcontrollers and debuggers, making it is as simple as possible to deploy. (For example, problems with Gatekeeper on Mac and dependencies on Linux are a thing of the past.)

Likewise, the builder has received the love it deserves and some of its shortcomings are gone forever. You’ll never have to worry again about encountering weird errors if you need to use C++ advanced libraries like .

All these improvements have been shared with Arduino Create, our cloud-based IDE. Check it out if you’ve never tried it, or test out these enhancements if you’re already an active user!

Of course, we also fixed some corner cases for user experience, so now we have a better error reporting when the upload fails and a [nicer] way to include libraries containing lots of header files.

What’s more, we have gone ahead and developed a new firmware and certificate updater for MKR1000 / WiFi101 Shield users–it’s bundled with the IDE and available as a plugin for older installations.

Our community effort continue to grow well with tons of bugfixing, proposals, and libraries added to the Library Manager. As you can imagine, this makes us extremely happy–thank you all for the contributions!

As usual, be sure to check the entire changelog for a complete list of changes and credits. Don’t forget to report any issue you may find, either on GitHub or on the Arduino Forum–your help is very much appreciated.

Go ahead and download IDE 1.6.10! Happy hacking!

Arduino Blog 27 Jul 09:35

WiFiChron with ATmega1284

The WiFiChron code, with support for ESP8266, nearly reached the program memory limit of ATmega328, yet still missing a few features, the most important being the much needed debugging capability.

Naturally, the next step in WiFiChron's evolution was to upgrade to Atmega644P/1284P. Since there was no room on the board for the 40-pin DIP package, we settled for the SMD version.

The schematic is shown below.

Although functional, the board I designed is far from perfect:
  • requires pull-up resistors for buttons; I relied on software pull-up, but that does not work in the current Sanguino library;
  • requires a couple of more decoupling capacitors;
(I soldered all these extra parts on the bottom side of the PCB, as shown in the next photo. The 595 shift-register is soldered on the bottom by design. The next revision will have the currently missing parts in the SMD package.)

I burned the bootloader using the on-board ICSP header.

Thanks again to MikeM, who contributed the code (Arduino 1.6.7 - compatible), featuring:
- proverb display;
- moon phases;
- a few new menu options for user settings;
- improved support for ESP8266;
- integrated support for GPS module.

Wise time with Arduino 19 Jul 02:50
software  wifi  

IDE 1.6.9 just released with Yún Shield support and more!

Today, we’re releasing a shiny new version of the Arduino IDE, with the usual plethora of features and bug fixes.

The new Yún Shield allows you to upload a sketch over the air on any supported board so, as you can guess, our official cores were updated to support this feature. 

Simply select the YunShield entry from the Network port menu, the base board from the Board menu, press upload and voilà!

You can update the cores via Board Manager to get the latest version (1.6.11 for AVR, 1.6.8 for SAM and 1.6.6 for SAMD) but don’t miss the chance to update the IDE itself.

This release fixes a bunch of long-standing issues:

  • the update popup is no longer always on top, error reporting on multitab sketches now works correctly, and compiling/uploading flows have been revisited
  • the problem with FTDI serial ports on Windows introduced with IDE 1.6.8 has been fixed as well
  • the AVR core now recognizes if a new bootloader is present and uses a safe RAM location to trigger programming (this is particularly important for large sketches, like the ones produced by our friends at Arduboy)
  • the builder has been patched, and is now faster and easier to hack

Release after release the community effort continues to get stronger and that makes us extremely happy! As usual, be sure to check the whole changelog for a complete list of changes and credits.

Don’t forget to report any issue you may find, either on GitHub or on the Arduino forum: your help is very much appreciated — even if you’re not a tech specialist. And please consider supporting the Arduino Software by contributing to its development!

Download IDE 1.6.9 now and happy coding! (You can also read all about the new Yún Shield here.)

Arduino Blog 10 May 11:49

Machine learning for the maker community

At Arduino Day, I talked about a project I and my collaborators have been working on to bring machine learning to the maker community. Machine learning is a technique for teaching software to recognize patterns using data, e.g. for recognizing spam emails or recommending related products. Our ESP (Example-based Sensor Predictions) software recognizes patterns in real-time sensor data, like gestures made with an accelerometer or sounds recorded by a microphone. The machine learning algorithms that power this pattern recognition are specified in Arduino-like code, while the recording and tuning of example sensor data is done in an interactive graphical interface. We’re working on building up a library of code examples for different applications so that Arduino users can easily apply machine learning to a broad range of problems.

The project is a part of my research at the University of California, Berkeley and is being done in collaboration with Ben Zhang, Audrey Leung, and my advisor Björn Hartmann. We’re building on the Gesture Recognition Toolkit (GRT) and openFrameworks. The software is still rough (and Mac only for now) but we’d welcome your feedback. Installations instructions are on our GitHub project page. Please report issues on GitHub.

Our project is part of a broader wave of projects aimed at helping electronics hobbyists make more sophisticated use of sensors in their interactive projects. Also building on the GRT is ml-lib, a machine learning toolkit for Max and Pure Data. Another project in a similar vein is the Wekinator, which is featured in a free online course on machine learning for musicians and artists. Rebecca Fiebrink, the creator of Wekinator, recently participated in a panel on machine learning in the arts and taught a workshop (with Phoenix Perry) at Resonate ’16. For non-real time applications, many people use scikit-learn, a set of Python tools. There’s also a wide range of related research from the academic community, which we survey on our project wiki.

For a high-level overview, check out this visual introduction to machine learning. For a thorough introduction, there are courses on machine learning from coursera and from udacity, among others. If you’re interested in a more arts- and design-focused approach, check out alt-AI, happening in NYC next month.

If you’d like to start experimenting with machine learning and sensors, an excellent place to get started is the built-in accelerometer and gyroscope on the Arduino or Genuino 101. With our ESP system, you can use these sensors to detect gestures and incorporate them into your interactive projects!