As primeiras versões Arduino eram equipadas com o microcontrolador ATmega328P de 8 bits e interface serial RS-232C para conexão com um PC. Tudo montado em uma pequena placa de circuito impresso de 68×53 mm; nas bordas laterais, duas fileiras de conectores do tipo borne com pinos que podem se comportar ou como entrada digital TTL (aceita 5 volts como nível lógico 1, e terra como 0), ou como saída digital (comuta 5 volts ou terra). Outros pinos são entradas que podem receber sinais analógicos dentro da faixa de 0 a 5 volts. Esses mesmos pinos podem ser reprogramados para se comportar como portas de outras interfaces padronizadas.
Atualmente existem diferentes versões de Arduino com processadores de 8, 16 e 32 bits com interfaces USB, I2C, CAN e até bluetooth e wi-fi. Mas, diferente dos primeiros circuitos digitais, essas placas computadorizadas não funcionam logo que são alimentadas. Elas precisam de uma orientação sobre o que fazer. Sem essa orientação esses circuitos mais complexos ficam ligados, mas parados, não processam e nem controlam nada. É preciso carregar em algum lugar da memória deles uma lista com instruções sobre o que queremos que eles façam.
No Arduino, por exemplo, se queremos acender um LED vermelho com um resistor conectado entre um de seus pinos digitais e o terra, uma linha nessa lista de instruções deveria dizer ao seu processador:
digitalWrite(0, HIGH)
Ou seja: coloque 5 volts no pino digital 0. Para apagar esse LED trocamos na linha de instrução HIGH por LOW (colocar terra). Se queremos ler a saída de um sensor de temperatura conectado ao pino analógico A3 escrevemos:
sensor_t = analogRead(A3)
A variável sensor_t vai dizer onde o valor lido no pino A3, depois de digitalizado, está guardado na memória do Arduino.
Quando alimentamos um desses computadores em uma placa, a primeira coisa que o seu processador faz, depois de realizar uma auto checagem, é procurar na memória pela lista de instruções. A lista de instruções é o conhecido programa de computador, que deve ser escrito de forma que seja inteligível tanto por humanos quanto pela máquina, o processador.
A uma lista ordenada de coisas que devam ser feitas para resolver um determinado problema damos o nome de algoritmo. Feito o algoritmo, normalmente um fluxograma, devemos agora transformá-lo numa lista de instruções que deve ser escrita numa linguagem, que, como dissemos acima, seja entendida pelo computador. Assim como existem muitas linguagens e dialetos falados entre os povos, existem muitas linguagens de programação para se falar com (e entre) as máquinas. Os primeiros computadores pessoais, como o Apple II e o CP-500 (TRS-80), eram programados inicialmente numa linguagem chamada BASIC. As novas plataformas podem ser programadas em linguagens mais robustas, como C e Python.