# Arduino

Arduino est la marque d'une plateforme de prototypage open-source qui permet aux utilisateurs de créer des objets électroniques interactifs à partir de cartes électroniques matériellement libres sur lesquelles se trouve un microcontrôleur (d'architecture Atmel AVR comme l'Atmega328p, et d'architecture ARM comme le Cortex-M3 pour l'Arduino Due).
Les schémas de ces cartes électroniques sont publiés en licence libre. Cependant, certaines composantes, comme le microcontrôleur par exemple, ne le sont pas.
Le microcontrôleur peut être programmé pour analyser et produire des signaux électriques, de manière à effectuer des tâches très diverses comme la domotique (le contrôle des appareils domestiques — éclairage, chauffage…), le pilotage d'un robot, de l'informatique embarquée, etc.
C'est une plateforme basée sur une interface entrée/sortie simple.
Arduino est un fork de Wiring.
Wiring, inspiré de Processing, est un langage et un environnement de développement pour programmer des microcontrôleurs.
Processing, lui-même inspiré de Design By Numbers, est un langage et un environnement de développement destiné aux artistes.
Arduino peut être utilisé pour construire des objets interactifs indépendants (prototypage rapide), ou bien peut être connecté à un ordinateur pour communiquer avec ses logiciels (ex. : Max/MSP, Usine Hollyhock, Pure Data, SuperCollider). En 2011, les versions vendues sont pré-assemblées. Des informations sont fournies pour ceux qui souhaitent assembler ou construire une carte Arduino eux-mêmes.
Le projet Arduino a reçu un titre honorifique à l'Ars Electronica 2006, dans la catégorie Digital Communities.

## Origine du nom

L'Arduino emprunte son nom au Bar di Re Arduino (en français « bar du roi Arduin »), lieu de réunion des concepteurs de la carte, à Ivrée en Italie du Nord$^,$.

## Description
### Matériel

Un module Arduino est généralement construit autour d'un microcontrôleur Atmel AVR (ATmega328 (en), ATmega32u4 ou ATmega2560 pour les versions récentes, ATmega168, ATmega1280 ou ATmega8 pour les plus anciennes), et de composants complémentaires qui facilitent la programmation et l'interfaçage avec d'autres circuits. Chaque module possède au moins un régulateur linéaire 5 V et un oscillateur à quartz 16 MHz (ou un résonateur céramique dans certains modèles).
Le microcontrôleur est préprogrammé avec un bootloader de façon qu'un programmateur dédié ne soit pas nécessaire.
Les modules sont programmés avec une connexion série TTL, mais les connexions permettant cette programmation diffèrent selon les modèles. Les premiers Arduino possédaient un port série RS-232, puis l'USB est apparu sur les modèles Diecimila, tandis que certains modules destinés à une utilisation portable comme le Lillypad ou le Pro-mini se sont affranchis de l'interface de programmation, relocalisée sur un module USB-série dédié (sous forme de carte ou de câble), cela permettait aussi de réduire leur coût, le convertisseur USB-Série TTL (un FTDI232RL de FTDI) coûtant assez cher.
L'Arduino utilise la plupart des entrées/sorties du microcontrôleur pour l'interfaçage avec les autres circuits. Le modèle Diecimila par exemple, possède quatorze entrées/sorties numériques, dont six peuvent produire des signaux PWM, et 6 entrées analogiques. Les connexions sont établies au travers de connecteurs femelles HE14 situés sur le dessus de la carte, les modules d'extension venant s'empiler sur l'Arduino. Plusieurs sortes d'extensions sont disponibles dans le commerce.
D'autres cartes comme l'Arduino Nano ou le Pro micro utilisent des connecteurs mâles, permettant de les disposer sur une platine d'expérimentation.
La société STMicroelectronics a également travaillé avec Arduino, sur des cartes compatibles. Les cartes STM32 Nucleo, basées sur les processeurs STM32, utilisant l'architecture ARM plutôt que l'architecture Harvard des Atmel AVR. Ces cartes comportent un processeur plus puissant, ARM Cortex-M 32 bits, de M0+ à 32 MHz ou M0 à 48 MHz jusqu'au M4 à 100 MHz, comportant des instructions DSP et un processeur graphique Chrom-ART de STMicroelectronics.

### Logiciel

Le logiciel de programmation des modules Arduino, dont l'interface, appelée Arduino IDE 2, est une application Electron, libre et multi-plateforme basée sur Eclipse Theia (en) servant d'éditeur de code et de compilateur, et qui peut transférer le firmware et le programme au travers de la liaison série (RS-232, Bluetooth ou USB selon le module). Il est également possible de se passer de l'interface Arduino, et de compiler et téléverser les programmes via l'interface en ligne de commande.
Le langage de programmation utilisé est le C++, compilé avec avr-g++, et lié à la bibliothèque de développement Arduino, permettant d'utiliser la carte et ses entrées/sorties. La mise en place de ce langage standard rend aisé le développement de programmes sur les plates-formes Arduino à toute personne maîtrisant le C ou le C++.

## Plateforme
### Matériel officiel

Les modules d'origine des différentes versions de l'Arduino sont fabriqués par la société italienne Smart Projects. Quelques-unes des cartes de marque Arduino ont été conçues par la société américaine SparkFun Electronics.
Dix-sept versions des cartes de type Arduino ont été produites et vendues dans le commerce à ce jour dans l'ordre chronologique ci-dessous :
* Serial Arduino programmé avec une connexion série par connecteur DB9 et utilisant un ATmega8.
* Arduino Extreme, programmable via une connexion USB et utilisant un ATmega8.
* Arduino Mini, une version miniature de l'Arduino utilisant un ATmega168 de type CMS.
* Arduino Nano, une version encore plus petite de l'Arduino alimenté par USB et utilisant un ATmega168 (avant la version 3) ou ATmega328 (à partir de la version 3.0) de type CMS.
* LilyPad Arduino, une conception de type minimaliste pour permettre une application portable utilisant un ATmega168 de type CMS, cette carte se remarque par son vernis violet.
* Arduino NG, programmable via une connexion USB et utilisant un ATmega8.
* Arduino NG plus, programmable via une connexion USB et utilisant un ATmega168.
* Arduino Bluetooth(BT), programmable via une connexion Bluetooth et utilisant un ATmega 328.
* Arduino Diecimila, possède une interface USB et utilise un ATmega168 dans un boitier format DIL28. (16 ko flash, 1 ko SRAM, 0,5 ko EEPROM)
* Arduino Duemilanove (2009) utilise un Atmega168 et est alimenté en électricité par le connecteur USB ou une alimentation externe avec commutation automatique. La nouvelle version est équipée d'un ATmega328 (32 ko de flash, 2 ko de SRAM, et 1 ko d'EEPROM).
* Arduino Mega est équipé d'un ATmega1280 de type CMS pour avoir des Entrées/Sorties supplémentaires et de la mémoire (128 ko flash, 8 ko SRAM, 4 ko EEPROM).
* Arduino Uno utilise un ATmega328 comme les derniers modèles de Duemilanove, mais alors que le Duemilanove utilisait une puce FTDI pour la programmation via un connecteur USB, le Uno utilise une puce ATmega8U2 programmée comme un convertisseur série.
* Arduino Mega2560 est équipé d'un ATmega2560 de type CMS, augmentant la mémoire totale disponible à 256 ko. Il est équipé aussi de la nouvelle puce USB ATmega8U2.
* Arduino Ethernet est une carte Arduino UNO intégrant un chip Wiznet W5100 pour rajouter la connectivité Ethernet intégré.
* Arduino Leonardo est une version bas coût de l'Arduino UNO à base d'un ATmega32U4 et est reconnue par un ordinateur comme étant un périphérique équivalent à une souris ou un clavier. Il est donc idéal pour des projets de contrôleur personnalisé pour des jeux vidéos.
* Arduino DUE est une évolution de l'Arduino Mega2560 avec un micro-contrôleur 32 bits Atmel SAM3X (ARM 32 bits Cortex-M3).
* Arduino Esplora est une carte dérivée de l'Arduino Leonardo. Elle a la forme d'une manette de jeu. Contrairement aux autres Arduino, c'est une carte « tout-en-un » qui comporte de nombreux capteurs (température, accélération, lumière, microphone, potentiomètre…) ainsi que quatre boutons poussoirs, un potentiomètre et un joystick analogique.
* Arduino MKR est une famille de cartes au format réduit, destinée à l'IoT : la carte est déclinée sous plusieurs déclinaisons, disposant chacun d'une fonctionnalité de connectivité IoT différente : Sigfox, LoRa, Wi-Fi, etc.
| Arduino | Micro-contrôleur | Flash ko | EEPROM ko | SRAM ko | Broches d'E/S numériques | …avec PWM | Broches d'entrée analogique | Courant (mA) pour Vin=9V | Type d'interface USB | Dimensions pouces | Dimensions mm |
| Diecimila | ATmega168 | 16 | 0,5 | 1 | 14 | 6 | 6 | | FTDI | 2,7″ × 2,1″ | 68,6 mm × 53,3 mm |
| Duemilanove | ATmega168/328P | 16/32 | 0,5/1 | 1/2 | 14 | 6 | 6 | | FTDI | 2,7″ × 2,1″ | 68,6 mm × 53,3 mm |
| Uno | ATmega328P | 32 | 1 | 2 | 14 | 6 | 6 | 46 | ATmega16U2 | 2,7″ × 2,1″ | 68,6 mm × 53,3 mm |
| Leonardo | ATmega32U4 | 32 | 1 | 2,5 | 20 | 7 | 12 | 42 | ATmega32U4 | 2,7″ × 2,1″ | 68,6 mm × 53,3 mm |
| Mega | ATmega1280 | 128 | 4 | 8 | 54 | 15 | 16 | | FTDI | 4″ × 2,1″ | 101,6 mm × 53,3 mm |
| Mega2560 | ATmega2560 | 256 | 4 | 8 | 54 | 15 | 16 | 58 | ATmega8U2 | 4″ × 2,1″ | 101,6 mm × 53,3 mm |
| Due | Atmel SAM3X8E | 512 | 0 | 96 | 54 | 12 | 12 | | SAM3X8E (USB Host), ATmega16u2 (programmation) | 4″ × 2,1″ | 101,6 mm × 53,3 mm |
| Fio | ATmega328P | 32 | 1 | 2 | 14 | 6 | 8 | | Aucune | 1,6″ × 1,1″ | 40,6 mm × 27,9 mm |
| Nano | ATmega168 ou ATmega328 | 16/32 | 0,5/1 | 1/2 | 14 | 6 | 8 | 24 | FTDI | 1,70″ × 0,73″ | 43 mm × 18 mm |
| LilyPad | ATmega168V ou ATmega328V | 16 | 0,5 | 1 | 14 | 6 | 6 | | Aucune | 2″ ø | 50 mm ø |
| Yun | ATmega32u4 | 32 | 1 | 2,5 | 20 | 7 | 12 | | | | 73 mm × 53 mm |
| Esplora | ATmega32U4 | 32 | 1 | 2,5 | N/A | N/A | N/A | | ATmega32U4 | 6,5″ × 2,4″ | 165,1 mm × 60,96 mm |
| 101 | Intel Curie | 196 | N/A | 24 | 14 | 4 | 6 | | | 2,7″ × 2,1″ | 68,6 mm × 53,4 mm |
| micro | ATmega32U4 | 32 | 1 | 2,5 | 20 | 7 | 12 | 38 | | 1,8″ × 0,7″ | 48 mm × 18 mm |
| zero | ATSAMD21G18, 32-Bit ARM Cortex M0+ | 256 | N/A | 32 | 20 | 18 | 6 | | | 2,6″ × 1,2″ | 68 mm × 30 mm |
| MKR Zero | SAMD21 Cortex-M0+ 32 bit low power ARM MCU | 256 | N/A | 32 | 22 | 12 | 7 | | | | 62 mm × 26 mm |

### Explication du fonctionnement

Les différentes versions des Arduino fonctionnent sous le même principe général :
* A : ce sont les broches dites numériques 1 ou 0 (HIGH ou LOW en anglais) et (tout ou rien en français) ; elles offrent en sortie du 5 V et acceptent en entrée du 5 V sur le même principe.
** fonctionsdigitalWrite et digitalRead
et pour les ports PWM analogWrite.
* B : ce sont les broches dites analogiques, valeur entre 0 V et 5 V
** fonctionanalogRead
* C : les différentes broches d'alimentation :
** Rouge : sortie 5 V (+)
** Orange : sortie 3,3 V (+)
** Noire : les masses (−)
** Jaune : entrée reliée à l'alimentation (7 V-12 V)
Il y a des variations entre les différentes cartes (par exemple : UNO, la patte 13 est équipée d'une résistance)

### Matériels et logiciels dérivés

Plusieurs cartes compatibles Arduino ont été produites par d'autres fabricants.
Plusieurs logiciels ont été développés pour faciliter la programmation des cartes Arduino. On retrouve entre autres les solutions graphiques Ardublock, BitBloq et MiniBloq, ainsi que le pseudo-langage EDU qui permet d'utiliser des mots-clés simplifiés.
Il existe aussi des cartes Arduino ou compatible modifiées pour un usage spécifique : par exemple, des cartes de contrôle pour imprimantes 3D RepRap, des systèmes de pilote automatique pour drones comme les systèmes ArduPilot, APM:Plane et APM:Copter, ou les cartes FlyDuino, enfin des puces Wi-Fi tierces comme l'ESP8266 compatibles avec l'environnement Arduino.
Certain logiciels musicaux, comme le logiciel Usine Hollyhock, proposent grâce à leur module série une intégration de l'Arduino dans le processus de création musicale.

## Exemples de projets utilisant Arduino

En codant une carte Arduino, il est possible de mener à bien un grand nombre de projets tels que de la domotique ou de l'acquisition. Il est par exemple possible de faire une station météo.

## Matériel libre et logiciel libre

Le design matériel de l'Arduino est distribué sous licence Creative Commons Attribution Share-Alike 2.5 et est disponible sur le site d'Arduino. Les schémas ainsi que les typons de circuits sont également disponibles. Le code source de l'environnement de programmation et les bibliothèques embarquées sont disponibles sous licence LGPL.
De nombreuses informations sont disponibles au sujet des circuits intégrés présents sur les cartes Arduino (micro-contrôleurs Atmega par exemple) même s'ils restent très fermés du fait des fabricants. Seul le nom « Arduino » est protégé et ne doit pas être utilisé pour le matériel non officiel, ce qui a permis l’apparition de marques telles que funduino, arduiboy, etc.

### Restrictions du nom Arduino et apparition de clones

Bien que le design matériel et logiciel soit sous licence copyleft, les développeurs ont exprimé le désir que le nom Arduino et ses dérivés soient exclusivement réservés aux modules officiels, et qu'ils ne soient pas utilisés pour des projets non autorisés.
La politique d'usage du nom Arduino insiste sur le fait que les projets officiels sont ouverts à la collaboration.
En réponse à cette restriction, des utilisateurs ont développé une cinquantaine de modules équivalents, nommés Freeduino, Sanguino, Seeduino, Uduino, Diduino, Elegoo, etc. Ces modules, totalement compatibles avec le logiciel Arduino, et parfois avec les blasons Arduino, sont généralement moins chers que les cartes Arduino originales. La plupart offrent également des fonctions additionnelles.
On trouve par ailleurs des contrefaçons, ornées de sérigraphies qui mentent sur l'identité du constructeur et sur le lieu de fabrication, et qui se reconnaissent notamment à leur prix nettement inférieur à celui des cartes officielles.
Certains clones ont aussi contenu des convertisseurs USB-Série (FTDI-232) contrefaits qui ne fonctionnaient pas avec le pilote original utilisé par les systèmes Windows car le constructeur FTDI avait intégré un système de détection et de blocage de ces puces, les utilisateurs de ces cartes ont ainsi eu à installer un pilote non officiel compatible avec leur convertisseur USB-Série, ces clones semblent disparaître du marché, la puce contrefaite ayant tendance à être remplacée par une autre moins chère : la CH-340G.
On reconnaît en général les clones par leur prix bas, voire très bas, par l’absence sur le circuit du nom Arduino voire de nom tout court et par la couleur du vernis du circuit. Ils ne sont pas forcément bas de gamme et peuvent permettre à certains d'avoir accès au développement de projets utilisant des cartes Arduino sans avoir à investir de grosses sommes en achetant des cartes officielles. Il faut cependant noter que les développeurs du projet ne bénéficient pas des retombées financières de ces ventes malgré leur travail.
Le nom Arduino étant déposé en Italie par un des créateurs par ailleurs propriétaire de l'usine qui fabrique les cartes dans ce pays, quand le reste de l'équipe a voulu protéger le nom de manière internationale en 2008, il fut impossible de le faire en Europe. Le nom Arduino fut donc associé en Europe à la production faite dans les usines de Gianluca Martino alors que dans le reste du monde il fut aussi associé à la production faite aux États-Unis initiée par le reste de l'équipe d'origine. Cette production américaine fut commercialisée en Europe sous le nom Genuino. Cette seconde appellation fut arrêtée en 2017 lorsque l'entreprise italienne détentrice des marques déposées Arduino en Italie a été rachetée par la branche Américaine du projet.

## Internet des Objets

Arduino a lancé le 28 septembre 2016 une campagne Kickstarter pour financer le développement et la commercialisation de la collection de modules IoT (Internet of Things - Internet des Objets) ESOLV. Le financement a été annulé le 26 octobre 2016 par l'entreprise car l'objectif n'a pas été atteint selon les prévisions avec la promesse que la solution continuera.
En avril 2017, Arduino lance ainsi une nouvelle gamme de cartes de développement, Arduino MKR, au format réduit, destiné à l'IoT. Ces cartes, fabriquées sous de multiples déclinaisons, disposent chacune de fonctionnalités de connectivité spécifiques telles que Sigfox, Lora, Wi-Fi, etc.

## L'équipe de développement

Le cœur de l'équipe des développeurs du projet Arduino est composé de Massimo Banzi (it) (Italie), David Cuartielles (Espagne), Tom Igoe (États-Unis), Gianluca Martino (Italie), David Mellis (États-Unis) et Nicholas Zambetti (Italie).