arduino:what-makes-an-arduino
Differences
This shows you the differences between two versions of the page.
Previous revision | |||
— | arduino:what-makes-an-arduino [2024/11/22 12:02] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== What really makes an Arduino? ====== | ||
+ | |||
+ | ===== Introduction ===== | ||
+ | |||
+ | Everybody loves [[https:// | ||
+ | |||
+ | But along with the spread of knowledge, comes a " | ||
+ | |||
+ | The target audience is not only engineers. Sales and Marketing people, all sorts of Managers, as well as Legal Counsellors may find issues to help them gain an understanding of the usually complex thinking of their fellow engineers. | ||
+ | |||
+ | So, what really makes an Arduino? | ||
+ | |||
+ | ===== Parts of the platform ===== | ||
+ | |||
+ | According to the [[https:// | ||
+ | |||
+ | > Arduino is an open-source electronics platform based on easy-to-use hardware and software. Arduino boards are able to read inputs - light on a sensor, a finger on a button, or a Twitter message - and turn it into an output - activating a motor, turning on an LED, publishing something online. You can tell your board what to do by sending a set of instructions to the microcontroller on the board. To do so you use the Arduino programming language (based on Wiring), and the Arduino Software (IDE), based on Processing. | ||
+ | |||
+ | When the word **" | ||
+ | |||
+ | - Arduino Boards | ||
+ | - Arduino programming language | ||
+ | - Arduino Software (IDE) | ||
+ | |||
+ | But is that all? Is this an all-inclusive definition? Are parts interchangeable? | ||
+ | |||
+ | So let's have a look on my approach of "what really makes and Arduino" | ||
+ | |||
+ | ==== Arduino boards ==== | ||
+ | |||
+ | The official Arduino boards are presented [[https:// | ||
+ | |||
+ | It is really important to identify that the Arduino boards are **general-purpose** devices. This means that they are not designed to accomplish a specific task, such as " | ||
+ | |||
+ | Is the composite board an " | ||
+ | |||
+ | Are there cases where the composite board **cannot** be called an " | ||
+ | |||
+ | In contrast, if the functionality of the board largely relies on an Arduino library (e.g. an algorithmn to control the temperature of the kiln), then, it could be called " | ||
+ | |||
+ | And what if the composite board contains functionality in several features, without identifying one or more as critical or essential or nice-to-have? | ||
+ | |||
+ | The original Arduino UNO was designed around Atmel' | ||
+ | |||
+ | You may ask what is the point of raising such an issue. Technology people need to be precise. Marketing people should know what they are advertising. Sales people should know what they are selling. But above all, Legal should know precisely whose Intellectual Property is every part of a composite board. Arduino is an open-source platform, published under a specific license scheme. Open-source libraries contain software that is made public under other licensing schemes (such as MIT, Apache, GNU GPL). Some libraries may contain pieces of code produced by others, and therefore their licensing scheme is mixed. Legal Counsellors and Engineers should work very closely to identify whether they can integrate such open-source components in a commercial product. | ||
+ | ===== Peripherals ===== | ||
+ | |||
+ | Several peripheral boards, such as containing relays, sensors etc claim to be " | ||
+ | |||
+ | Most peripherals provide a more-or-less standard interface. If for example a peripheral supports SPI or I2C and provided that there exist an Arduino library, there are good chances that you can use it in your application. A certain amount of effort is required to learn the features and usage of the library. Sometimes, libraries are built to support so many platforms, architectures and features that it may be easier to built a custom one. An additional drawback of libraries found on the internet is that sometimes they are so packed with features, that consume a lot of the limited space of an MCU. I have found myself in several occasions with libraries so big, that it was not possible to write any code at all. Such an example is the graphics libraries for OLED displays. In such cases, you may consider (not in precise order): | ||
+ | |||
+ | - branching the library code and delete unnecessary features | ||
+ | - not using the library and built project specific custom code | ||
+ | - writing a custom library, in case re-usability in various projects is required | ||
+ | - select a peripheral component with a less resource hungry library | ||
+ | - use an MCU with more resources | ||
+ | |||
+ | Note that **having a peripheral being compliant with a protocol, does not necessarily mean that it is suitable for your application**. For example, I was testing an SD memory module which supported SPI very well, but only when it was the **one and only, single** module wired to the SPI bus. Adding an additional SPI module, such as an Ethernet module, created electrical short-circuiting of the bus. You can see the whole article on [[arduino: | ||
+ | |||
+ | Can those peripheral boards operate with non-Arduino boards? Mostly yes, unless one relies on a particular Arduino feature, or the cost of modifying the peripheral to work with another platform is so high (such as building a library from scratch) that does not justify the effort. | ||
+ | |||
+ | **Finally, one critical concern concerning life-threatening issues**. The Internet-of-Things (IoT) and the massive use of controllers in home automation is driving people without any knowledge of handling electricity to experiment with turning lamps on and off and similar projects. I cannot stress enough the lethal dangers associated with such projects. Education is mandatory, not only to explain **what to do**, but also to understand **what not do** without the supervision of a certified professional. **Parental supervision is totally worthless, unless the parent is a certified electrical engineer**. Several of us had been hobbyists from a small age. Staying alive means that we have been careful enough to gradually build our knowledge, before we did something dangerous. Young people should not be discouraged but rather educated in maintaining their safety. **In any case, project builders should understand and comply to the safety and security issues associated with their projects, as well as the local laws, regulations and certifications for designing, building, testing, operating, owning and interfacing any form of apparatus.** | ||
+ | |||
+ | ==== Arduino IDE ==== | ||
+ | |||
+ | This is the environment used to write programs, which in Arduino language are called " | ||
+ | |||
+ | > promoted software literacy within the visual arts and visual literacy within technology | ||
+ | |||
+ | I have used Processing in the past to construct visually appealing user interfaces and, although it is built on Java, it is much easier to program than Java and also allows to create very fast-updating graphics. | ||
+ | |||
+ | From my point of view, the Arduino IDE is the component which carries the larger amount of weight of the Arduino name. It allows to write programs, compile and link, as well as upload to boards. It may use third party tools (avr-gcc, avrdude etc) to accomplish such functions, but it integrates all in the same environment, | ||
+ | |||
+ | Can the Arduino IDE be used to write programs for non-Arduino boards? | ||
+ | |||
+ | ==== Arduino language ==== | ||
+ | |||
+ | You can use the [[https:// | ||
+ | |||
+ | > Wiring is an open-source programming framework for microcontrollers. | ||
+ | > Wiring allows writing cross-platform software to control devices attached to a wide range of microcontroller boards to create all kinds of creative coding, interactive objects, spaces or physical experiences. | ||
+ | |||
+ | Anyone with a knowledge of C can start writing simple programs with the Arduino language very quickly. Good knowledge of C++ is required to understand how libraries work and even more, to start writing more complex programs and libraries. Additional effort in the knowledge-building process is required in understanding electronics related issues, such as using the pins for inputs, outputs, motor control etc. | ||
+ | |||
+ | ==== Arduino libraries ==== | ||
+ | |||
+ | Libraries are extending the Arduino environment, | ||
+ | |||
+ | Finally, libraries allow communication with the world outside the confines of the MCU, such as libraries to talk with Ethernet boards, SD cards, mobile cards, motors etc. Such libraries utilize communication protocols, either standard (I2C, SPI, serial etc) or proprietary for the purpose of interfacing the MCU to the peripheral device. Please refer to section [[what-makes-an-arduino# | ||
+ | |||
+ | Arduino platform provides [[https:// | ||
+ | |||
+ | ==== Bootloader ==== | ||
+ | |||
+ | The bootloader is the program that allows uploading user programs, such as sketches, | ||
+ | |||
+ | Yet, the process of writing sketches in the Arduino IDE, compiling and uploading using the serial interface which in turn communicates with the bootloader to store the code in the MCU flash memory, makes the bootloader an indispensable part of the Arduino toolset. | ||
+ | |||
+ | Note also that the Arduino IDE allows burning a bootloader code, which is a file residing in the IDE folder structure, to the board of choice. | ||
+ | |||
+ | ===== User software ===== | ||
+ | |||
+ | The final part of this chain is the software developed by the user. Such software may be written to run on several Arduino as well as non-Arduino platforms. If such software relies on specific Arduino intricacies, | ||
+ | |||
+ | If the user decides to publish the code under an open-source license, it can also be made available to other users around the world. | ||
+ | | ||
+ | ===== Summary ===== | ||
+ | |||
+ | I have tried to explain in a relative detail the parts that comprise the Arduino platform. I have also tried to show that although Arduino made the world of automation broader, simper and cheaper, it is definitely not a plug-and-play, | ||
+ | - electronics engineering, | ||
+ | - software engineering, | ||
+ | - mathematics, | ||
+ | - systems integration, | ||
+ | - industrial manufacturing | ||
+ | |||
+ | and perhaps other disciplines, | ||
+ | |||
+ | ~~DISQUS~~ | ||