Outra coisa que você deve considerar é se você realmente precisa mudar de nível. Muitos chips possuem pinos de entrada tolerantes a 5V, mesmo quando operando a uma tensão mais baixa, como 3.3. A CPU atmega também interpreta qualquer coisa acima de 0,6 * Vcc ou 3V para um arduino como uma lógica alta, de modo que um sinal de 3,3V pode acionar diretamente um pino de arduino sem alteração de nível.
Supondo que você esteja usando um arduino de 5V e precise conversar com uma parte de 3,3V, se a parte tiver entradas tolerantes a 5V (muitas fazem hoje em dia), basta conectá-las e ele funcionará. Se a sua linha bidirecional for um design de coletor aberto, como o i2c, onde os dispositivos puxam apenas a linha para baixo, basta conectar os resistores de pull up a 3,3V em vez de 5V e tudo funcionará.
Caso contrário, tudo o que você precisa fazer é garantir que a linha não ultrapasse os 3,3V, você pode fazer isso com um resistor e um zener, colocar um resistor na linha do arduino e depois um zener para fixar a tensão em 3,3V. (fonte: repetae.net )
Você pode ficar tentado a viver perigosamente e apenas usar o resistor de 10k e nada mais. A razão pela qual isso (às vezes!) Funciona é que existe um diodo de aperto dentro do chip de recebimento que desvia o excesso de tensão para vcc ou 3,3V. Esse diodo queimará se você tentar puxar toda a linha de 3,3V até 5V (além de qualquer dano causado ao puxar essa linha para 5V), no entanto, com o resistor, muita corrente não fluirá e assumindo sua linha de 3,3V possui uma carga não trivial, não altera substancialmente o nível da sua linha de energia, mas há muitas ressalvas. Portanto, em geral, não faça isso a menos que você tenha um barramento local isolado de 3,3V e realmente não possa poupar os dois centavos extras para o zener. Eu apenas mencionei isso porque você o verá nos esquemas de painéis baratos baratos que você pega no ebay e pode ficar tentado a copiá-lo, apenas não deixe que ela passe pela tábua de pão em um design de produção. :)
O Edit acabou de notar que você estava usando o arduino 3.3V mais recente, portanto, basta inverter o que eu disse acima, o truque do resistor zener ainda funcionará, embora aparentemente algumas das linhas de E / S no devido possam ser tolerantes a 5V, parece haver algum desacordo nos fóruns. O teensy 3.1 também é uma pequena placa ARM que possui todos os pinos tolerantes a 5V e é menos da metade do custo do IMHO devido e melhor projetado http://www.pjrc.com/store/teensy31.html