ガイド · 読了まで20分

Raspberry PiとArduinoの違い:主な違いとどちらを選ぶべきか

Raspberry PiとArduinoを比較します。Linuxコンピューターとマイコンの違いを、起動時間、消費電力、GPIO、アナログ入力、言語、価格で比べ、プロジェクト別のおすすめとコードも紹介します。

Raspberry PiとArduinoの違いは一文で言えます。Raspberry PiはLinuxのOSが動くクレジットカードサイズのコンピューターで、Arduinoは書き込んだ1つのプログラムをひたすら繰り返し実行するマイコンボードです。Piにはキーボード、マウス、モニターをつないで、Webを見たり、Pythonでカメラの画像を処理したり、自宅で小さなサーバーを動かしたりできます。Arduinoは電源を入れた瞬間に動き始め、マイクロ秒単位の精度でセンサーを読み取り、一度も途切れることなくモーターやLEDを動かし、電池で何日も動作できます。

まとめると、カメラ、画像処理、グラフィカルな画面、ネットワークサービスが必要なプロジェクトにはRaspberry Piが向いていて、センサー、モーター、正確なタイミング、低消費電力が必要ならArduinoが有利です。このガイドでは、起動時間、消費電力、GPIOとアナログ入力、プログラミング言語、リアルタイム性、価格について、実際の数値で2つのプラットフォームを比べます。さらに、どのプロジェクトにどちらを選ぶかを表で示し、USBケーブルで両方を連携させるサンプルコードを紹介し、Raspberry Pi Picoの位置付けも説明します。Picoは名前とは裏腹に、Arduinoにずっと近い存在だからです。

Arduino Uno R3のマイコンボード
Arduino Uno R3:OSは載っていません。16 MHzのATmega328Pが、電源が入るとすぐに書き込まれた1つのプログラムを実行します。

Raspberry Piとは?Arduinoとは?

Raspberry Piは、イギリスのRaspberry Pi財団が開発したシングルボードコンピューター(SBC)です。Raspberry Pi 5は、4コア2.4 GHzのArm Cortex-A76プロセッサ、1〜16 GBのRAM、4K対応のHDMI出力2つ、USB 3.0、ギガビットイーサネット、Wi-Fi、Bluetoothを備えています。ハードディスクの代わりにmicroSDカード(または拡張ボード経由のNVMe SSD)を使い、DebianベースのRaspberry Pi OSが動きます。つまり、デスクトップパソコンの小さくて安い兄弟のようなものです。違いは、縁に沿って並んだ40ピンのGPIOヘッダーだけで、ここにLED、ボタン、センサーを直接つなげます。

一方のArduinoは、イタリアで生まれたオープンソースのマイコンプラットフォームです。いちばん普及しているボードのArduino Uno R3は、16 MHzで動く8ビットのATmega328Pを中心に作られていて、プロセッサ、2 KBのRAM、32 KBのプログラムメモリ、A/Dコンバーターがすべて1つの小さなチップに収まっています。OSもファイルシステムも映像出力もありません。パソコンのArduino IDEで書いたコードはコンパイルされてボードのフラッシュメモリに保存され、ボードの電源が入るたびにsetup()が一度実行され、その後loop()がずっと実行されます。プラットフォームについてもっと知りたい場合は、Arduinoとは?を読んでみてください。

すぐわかる答え:どんな場合にどちらを選ぶ?

状況おすすめ理由
電子工作が初めてArduino Unoシンプルで丈夫、5 Vのモジュールがそのまま使える
カメラ、顔や物体の認識Raspberry Pi処理能力、RAM、OpenCVとカメラに対応
ロボットカー、サーボ、ステッピングモーターArduino途切れない正確なタイミング
Webサーバー、データベース、スマートホームのハブRaspberry PiLinux、ネットワークサービス、ストレージ
電池で何日も動くセンサーArduinoかPico消費電力がワットではなくミリワット単位
画面、キーボード、マウスをつないで使う機器Raspberry Piデスクトップ、ブラウザー、HDMI
Pythonを学びながらハードウェアを制御したいRaspberry Pi PicoかRaspberry PiMicroPythonか通常のPython
画像処理とモーター制御を両方行うRaspberry Pi + ArduinoPiが判断し、Arduinoが実行する

比較表:Raspberry Pi 5、Arduino Uno、Raspberry Pi Pico

項目Raspberry Pi 5Arduino Uno R3Raspberry Pi Pico
種類シングルボードコンピューターマイコンボードマイコンボード
プロセッサBCM2712、4コアCortex-A76、2.4 GHzATmega328P、8ビット、16 MHzRP2040、2コアCortex-M0+、133 MHz
RAM1、2、4、8、16 GB2 KB264 KB
ストレージmicroSDカードまたはNVMe SSD32 KBのフラッシュ2 MBのフラッシュ
OSRaspberry Pi OS(Linux)なしなし
起動時間約15〜40秒1秒未満1秒未満
消費電力アイドル時約3 W、高負荷時7〜8 W約0.25 W(50 mA)約0.1 W(20〜25 mA)
電源USB-C、5 V 5 A推奨USB 5 Vまたは7〜12 VのDCジャックUSB 5 VまたはVSYSに1.8〜5.5 V
ロジック電圧3.3 V(5 V非対応)5 V3.3 V(5 V非対応)
GPIO40ピンヘッダーにGPIO 28本20本(デジタル14本+アナログ6本)26
アナログ入力(ADC)なし(外付けADCが必要)6チャンネル、10ビット3チャンネル、12ビット
ハードウェアPWM4本のピン(GPIO 12、13、18、19)6本のピン全GPIO、16チャンネル
無線Wi-Fi 5 + Bluetooth 5.0なしなし(Pico WはWi-Fi + Bluetooth搭載)
映像と音声4K HDMI ×2、カメラコネクター ×2なしなし
プログラミングPython、C/C++、Node.jsなど、Linuxで動くほぼすべての言語Arduino C/C++MicroPython、C/C++ SDK、Arduino
リアルタイム性なし(Linuxのスケジューリング)あり、マイクロ秒単位あり、PIOを使えばさらに細かい
突然の電源断SDカードが壊れることがある問題なし問題なし
定価(2026年10月時点)45ドル(1 GB)から300ドル超(16 GB)まで純正品は約25〜30ドル、互換品は5〜10ドル4ドル(Pico Wは6ドル、Pico 2は5ドル)

価格について少し補足します。Raspberry Pi 4と5に使われているLPDDR4メモリチップの価格が、AIデータセンターの需要で高騰したため、Raspberry Piは2025年12月から何度か値上げしています。2026年10月時点で、2 GBのPi 5の定価は77.50ドルです。古いメモリを使っているPi Zero 2 Wは15ドルのままです。さらにPiには、microSDカード、27 WのUSB-C電源、できればクーラーも必要で、合計でさらに20〜30ドルかかります。Arduino UnoやPicoに必要なのはUSBケーブルだけです。

Linuxコンピューターとマイコンの根本的な違い

Raspberry Piでは、書いたPythonのプログラムは、Linuxが同時に管理している何百ものプロセスの一つにすぎません。カーネルはプロセッサを、ネットワーク接続、画面、USB機器、バックグラウンドのサービス、そして自分のプログラムへと順番に割り当てます。これはとても強力な仕組みで、ファイルへの記録、Webサーバー、カメラのストリーミングを同時に動かしたり、別の部屋からSSHでコードを編集したりできます。Arduinoでは、プロセッサで動いているのは自分のコードだけです。間にOSがないので、digitalWriteを呼び出すと数マイクロ秒以内にピンが変わり、その時間は毎回同じです。実際には、この違いは次のような形で現れます。

  • マルチタスク:Piはブラウザー、Pythonスクリプト、データベースを同時に動かせます。Arduinoが実行するのは1つのloop()だけで、複数の処理はmillis()を使って自分でスケジュールします。
  • ストレージ:Piには何GBもの写真、ログ、データベースを保存できます。Unoでは、プログラムを32 KBに、変数を2 KBのRAMに収める必要があります。
  • ネットワーク:Piは買ってすぐWi-Fiやイーサネットでインターネットにつながります。Unoにはネットワーク接続がないので、ESP32か追加のモジュールが必要です。
  • メンテナンス:Piはコンピューターなので、アップデート、ユーザーのパスワード、ある程度のセキュリティ対策が必要です。Arduinoはコードを一度書き込めば、何年でも同じように動き続けます。
  • トラブルが起きたとき:Piでプログラムがクラッシュしてもシステムは動き続け、エラーメッセージを読めます。Arduinoでコードが固まるとボードは黙って止まりますが、ウォッチドッグタイマーを使えば自動でリセットできます。

起動時間と突然の電源断

Arduinoは電源を入れると1秒もかからずにプログラムが始まり、リセットボタンを押してもブートローダーが待つのはほんの一瞬です。Raspberry Piはまずブートローダーを読み込み、次にLinuxのカーネルとサービスを読み込むので、モデルやSDカードの速度によって、デスクトップが表示されるまで15〜40秒かかります。これは、ドアホン、警報器、水やりシステムのように停電のあとすぐに動かなければならない機器では重要です。シャットダウンはさらに重要です。LinuxはSDカードに絶えず書き込んでいて、書き込みの途中で電源が切れるとファイルシステムが壊れ、Piが二度と起動しなくなることがあります。Arduinoのプログラムはフラッシュメモリに変わらず置かれているので、いつでもプラグを抜いてかまいません。

Raspberry Piはプラグを抜いてシャットダウンしないでください。まずsudo poweroffを実行するか、デスクトップからシャットダウンを選び、数秒待ちます。頻繁に電源を抜く機器を作るなら、raspi-configのPerformance OptionsにあるOverlay File System(オーバーレイファイルシステム)でシステムを読み取り専用にできます。Pi 5には5 V 5 A(27 W)のUSB-C電源を使ってください。電源が弱いと低電圧の警告が出て、vcgencmd get_throttledが0x0以外の値を返し、負荷がかかったときにボードが再起動することがあります。

消費電力と電池での動作

消費電力の差は10〜30倍です。Raspberry Pi 5はアイドル時に約3 W、CPUがフル稼働すると7〜8 Wを使い、USBドライブやカメラをつなげばさらに増えます。Arduino Unoの消費電流は約50 mA、5 Vで0.25 Wほどで、Picoは0.1 W前後です。下の表は、10,000 mAhのモバイルバッテリーでのおおよその動作時間です。計算は次のとおりです。ラベルの10,000 mAhは3.7 Vのセルの値で、およそ37 Whにあたります。5 Vに変換するときのロスを引くと、使えるのは約30 Whです。これをボードの消費電力(W)で割ります。自分の回路については電池寿命計算ツールを使ってください。

ボード一般的な消費電力10,000 mAhのモバイルバッテリーで
Raspberry Pi 5(アイドル時)約3 W約10時間
Raspberry Pi 5(高負荷時)7〜8 W約4時間
Raspberry Pi Zero 2 W約0.6 W約2日
Arduino Uno R3約0.25 W約5日
Raspberry Pi Pico約0.1 W約12日(モバイルバッテリーが切れなければ)
スリープ中のArduino Pro Mini(LEDとレギュレーターを除去)マイクロアンペア単位電池直結で数か月
多くのモバイルバッテリーは、電流が50〜100 mAを下回ると自動で電源が切れるので、PicoやArduinoで作った低消費電力の機器は数秒で止まってしまうことがあります。こうしたプロジェクトでは、電池を直接使うか、18650セル、または「常時出力」モードのあるモバイルバッテリーを使ってください。電池で何か月も動かす必要のあるワイヤレスセンサーには、ESP32のディープスリープもよい選択肢です。

GPIOピンとアナログ入力

Raspberry Piの40ピンヘッダーにはGPIOが28本あります。GPIO 0と1はHATボードのID EEPROM用に予約されているので、普通は使いません。これらのピンは3.3 Vで動作し、5 Vには対応しておらず、1本あたり数ミリアンペア(最大でも約16 mA)しか流せません。直列抵抗を通してLEDを点灯させることはできますが、リレーのコイルやモーターを直接動かしてはいけません。いちばん大きな弱点はアナログ入力がないことです。PiにはanalogReadに相当する機能がないので、ポテンショメーター、LDR、土壌水分センサーのようなアナログセンサーを読むには、外付けのADCチップが必要です。Arduino Unoにはアナログ入力が6本あり、5 Vのセンサーならほぼすべて直接つなげます。

項目Raspberry PiArduino UnoRaspberry Pi Pico
ロジックレベル3.3 V5 V3.3 V
1ピンあたりの電流数mA、最大でも約16 mA推奨20 mA、絶対最大40 mA初期設定4 mA、最大12 mAまで設定可能
アナログ読み取りなし。MCP3008かADS1115が必要analogRead()、0〜1023ADC(26).read_u16()、0〜65535
PWM4本はハードウェア、残りはソフトウェア6本のピンでanalogWrite()全ピンでハードウェアPWM
ピン番号GPIO番号と物理ピン番号が異なる(GPIO17=11番ピン)ボードに印刷された番号GP番号(GP15=20番ピン)
HC-SR04などの5 Vモジュール分圧回路が必要直接つなげる分圧回路が必要

Piにアナログセンサーをつなぐ方法は2つあります。1つ目は、SPI接続の8チャンネル10ビットのMCP3008や、I2C接続の4チャンネル16ビットのADS1115のようなADCモジュールを使う方法です。gpiozeroライブラリは最初からMCP3008に対応しています。2つ目は、センサーをArduinoやPicoにつなぎ、読み取った値をUSB経由でPiに送る方法で、そのためのコードはこのあと紹介します。アナログ読み取りの仕組みはADCとは?で、各ボードのピンの配置はピン配置ツールで確認できます。

プログラミング言語と開発環境

Arduinoは、C/C++をベースにしたArduinoの言語でプログラミングします。パソコンのArduino IDEでコードを書くと、コンパイルされてUSB経由でボードに書き込まれます。Raspberry Piでは、コードをPi自体の上で書いて実行するので、書き込みという別の手順はありません。いちばん人気のある言語はPythonで、Raspberry Pi OSにはThonnyエディタとgpiozeroライブラリが最初から入っています。C、C++、Node.js、Go、JavaなどLinuxで動く言語なら何でも使えます。Piで「ボタンを押している間LEDを点灯させる」プログラムをPythonで書くと、次のようになります。

Python
1from gpiozero import LED, Button
2from signal import pause
3
4led = LED(17)       # GPIO17 = fiziksel pin 11 / GPIO17 = physical pin 11
5buton = Button(27)  # GPIO27 = fiziksel pin 13, dahili pull-up açık / physical pin 13, internal pull-up on
6
7buton.when_pressed = led.on    # Basınca LED yanar / LED on when pressed
8buton.when_released = led.off  # Bırakınca söner / LED off when released
9
10pause()  # Programı açık tut, olayları bekle / keep running and wait for events

ボタンはGPIO27とGNDの間に、LEDは220 Ωの抵抗を通してGPIO17につなぎます。Buttonクラスが内部プルアップを自動でオンにします。ファイルをbuton_led.pyという名前で保存し、ターミナルでpython3 buton_led.pyと入力して実行します。注意:Raspberry Pi 5ではGPIOを新しいRP1チップが担当しているので、古いRPi.GPIOライブラリは動かず、「RuntimeError: Cannot determine SOC peripheral base address」(SoCの周辺機器のベースアドレスを特定できない)というエラーで止まります。新しいプロジェクトにはgpiozeroを使ってください。最新のRaspberry Pi OSでpip installが「externally-managed-environment」(外部で管理されている環境)というエラーで失敗する場合は、sudo apt install python3-...でパッケージをインストールするか、仮想環境(venv)を作ってください。Raspberry Pi Picoでは、同じPythonの知識をMicroPythonで活かせます。

リアルタイム性:モーターやセンサーにArduinoが向いている理由

Linuxはプロセッサを複数のプログラムで分け合うので、Pythonのコードがときどき数ミリ秒止まることがあり、それがいつ起きるかは予測できません。Webページなら問題になりませんが、タイミングに依存するハードウェアにとっては深刻な問題です。具体的な例をいくつか挙げます。

  • HC-SR04距離センサー:音は距離1 cmあたり往復で約58 µsかかります。エコーの時間を測っている間に100 µsの遅れが入ると、読み取り値は1.7 cmずれます。Piでは、この程度のずれはよくあります。
  • サーボモーター:サーボは50 Hzの信号の中の1〜2 msのパルスで角度が決まり、1度はおよそ5.5 µsに相当します。PiのソフトウェアPWMで動かしたサーボは小刻みに震えますが、Arduinoならぴたりと止まります。
  • WS2812B LEDテープ:1ビットは1.25 µsで、タイミングには0.15 µsの精度が必要です。PiではSPIかPWMのハードウェアとDMAを組み合わせなければ扱えませんが、ArduinoやPicoなら直接駆動できます。
  • ステッピングモーターとエンコーダー:1秒間に何千回ものステップパルスや速いエンコーダーの信号も、Arduinoなら割り込みを使って取りこぼしなく捉えられます。
Piでどうしても正確なタイミングが必要なら、ハードウェアPWMのピン(GPIO 12、13、18、19)か、16チャンネルのPCA9685サーボドライバボードを使ってください。よりすっきりした解決策は、タイミングはArduinoやPicoに任せ、Piとは命令のやり取りだけをすることです。PicoのPIOブロックは、まさにこのために設計されています(PicoのPIOとデュアルコアを参照)。

どのプロジェクトにどちらを使う?

プロジェクト最適なボード理由
顔や物体を認識するカメラRaspberry Pi 5OpenCV、Picamera2、AIアクセラレーター
写真を送るWi-Fi防犯カメラESP32-CAMかRaspberry Pi Zero 2 W簡単な撮影ならESP32-CAMで十分、配信や録画ならPi
障害物を避けるロボット、ライントレースロボットArduinoセンサーとモーターのための正確で途切れないループ
カメラで進路を判断するロボットRaspberry Pi + ArduinoPiが見て判断し、Arduinoがモーターを動かす
植物の自動水やりArduinoかESP32アナログの水分センサー、低消費電力、すぐに起動
スマートホームのハブ(Home Assistant)Raspberry Pi常時稼働のサーバー、データベース、Webの画面
気象観測ステーションESP32かPico WWi-Fiと低消費電力を両立
レトロゲーム機、メディアプレーヤーRaspberry PiHDMI、音声、USBゲームパッド
電池で動くデータロガーArduino Pro MiniかPicoスリープモードでの消費電力がとても少ない
電子工作の授業、初めての回路Arduino Uno5 V、丈夫なピン、豊富なサンプル

カメラと画像処理は、Raspberry Piがいちばん力を発揮する分野です。12 MPのオートフォーカス付きCamera Module 3は、フラットケーブルでボードのカメラコネクターにつなぎます。rpicam-still -o photo.jpgで写真を撮れるほか、Picamera2とOpenCVのライブラリを使って、Pythonで動き検知、色の追跡、QRコードの読み取り、顔認識ができます。より重いAIモデルには、AI HAT+のようなアクセラレーターボードを追加するか、カメラの中で画像を処理するAI Cameraを使えます。Raspberry Pi 5のカメラコネクターは古いモデルより小さい(22ピン)ので、古いカメラには対応する変換ケーブルが必要です。Arduino Unoの2 KBのRAMでは小さな写真1枚すら入りません。写真を撮ってTelegramに送りたいだけなら、安価なESP32-CAMがちょうどよい中間の選択肢です。

ところが、センサーとモーターとなると、Arduinoには事実上ライバルがいません。5 Vで動作するので、HC-SR04、リレーモジュール、L298Nモータードライバ、キャラクタLCDなど、市販のモジュールのほとんどを追加の回路なしでつなげます。モータードライバ、リレー、センサーのシールドもボードの上にそのまま挿せます。ロボットカーでは、Arduinoが距離センサーを1秒間に何十回も読み、障害物を見つけた瞬間にモーターを止めます。この反応時間がOSの忙しさに左右されることはありません。サーボモーターやステッピングモーターがArduinoでなめらかに動くのも同じ理由です。

HC-SR04
HC-SR04
SG90サーボ
SG90サーボ
L298N
L298N
DHT11
DHT11

両方を組み合わせる:Raspberry Pi + Arduino

本格的なプロジェクトの多くでは、両方を使うのがいちばんの解決策です。人の体にたとえるとわかりやすいでしょう。Raspberry Piは脳で、カメラの映像を処理し、インターネットにつながり、記録を残し、判断を下します。Arduinoは脊髄と筋肉で、センサーを読み、モーターを動かし、緊急時にはPiにたずねず反射的に反応します。たとえばカメラ付きのロボットカーなら、Piが画像の中からラインを見つけて「左に曲がれ」という命令を送り、Arduinoがそれをモーターの速度に変換し、障害物が現れたら自分の判断で止まります。2つのボードをつなぐ一般的な方法は次のとおりです。

接続方法やり方注意点
USBシリアル(いちばん簡単)ArduinoをPiのUSBポートに挿すと、/dev/ttyACM0か/dev/ttyUSB0として認識されるPiがArduinoへの給電も兼ね、レベル変換は不要
UART(GPIO 14と15)PiのTX → ArduinoのRX、ArduinoのTX → PiのRX、GNDは共通Arduinoの5 VのTX信号には分圧回路が必要
I2CPiをマスター、Arduinoを0x08などのアドレスのスレーブにするレベル変換モジュールの使用を推奨
Wi-Fi / MQTTESP32が読み取り値をネットワーク経由でPi上のMQTTブローカーに送るケーブル不要だが、ネットワークの遅延がある
  1. 下のArduinoのコードを、パソコンからボードに書き込みます(arduino-cliを使えばPiから書き込むこともできます)。
  2. ArduinoをUSBケーブルでPiにつなぎ、ターミナルでls /dev/ttyACM* /dev/ttyUSB*と入力してポート名を確認します。純正品のUnoは普通/dev/ttyACM0、CH340チップを使った互換品は/dev/ttyUSB0として表示されます。
  3. pyserialライブラリが入っていなければ、sudo apt install python3-serialでインストールします。
  4. ユーザーがシリアルポートにアクセスできない場合は、sudo usermod -a -G dialout $USERと入力し、いったんログアウトしてからログインし直します。
  5. Pythonのコードをpi_arduino.pyという名前で保存し、python3 pi_arduino.pyで実行します。Arduino IDEのシリアルモニタを開いている場合は、先に閉じてください。
C++ (Arduino IDE)
1// Arduino Uno: A0 değerini Pi'ye gönderir, Pi'den gelen komutla LED'i yönetir
2// Arduino Uno: sends the A0 reading to the Pi and drives the LED on the Pi's command
3const int SENSOR_PIN = A0;      // LDR ya da potansiyometre / LDR or potentiometer
4const int LED_PIN = 13;         // Dahili LED / built-in LED
5unsigned long sonGonderim = 0;  // Son gönderim zamanı / time of the last send
6
7void setup() {
8  Serial.begin(115200);         // Pi tarafıyla aynı hız / same baud rate as the Pi
9  pinMode(LED_PIN, OUTPUT);
10}
11
12void loop() {
13  // Pi'den komut geldi mi? / has a command arrived from the Pi?
14  if (Serial.available()) {
15    String komut = Serial.readStringUntil('\n');  // Satır sonuna kadar oku / read up to the newline
16    komut.trim();                                  // Boşluk ve \r karakterlerini sil / strip spaces and \r
17    if (komut == "LED1") digitalWrite(LED_PIN, HIGH);
18    else if (komut == "LED0") digitalWrite(LED_PIN, LOW);
19  }
20
21  // 500 ms'de bir ölçüm gönder, loop'u bekletmeden / send a reading every 500 ms without blocking
22  if (millis() - sonGonderim >= 500) {
23    sonGonderim = millis();
24    int deger = analogRead(SENSOR_PIN);  // 0-1023
25    Serial.print("A0:");
26    Serial.println(deger);               // Örnek: A0:512 / example: A0:512
27  }
28}
Python
1import time
2import serial  # sudo apt install python3-serial
3
4# Orijinal Uno: /dev/ttyACM0, CH340'lı klon: /dev/ttyUSB0 / genuine Uno: /dev/ttyACM0, CH340 clone: /dev/ttyUSB0
5ser = serial.Serial("/dev/ttyACM0", 115200, timeout=1)
6time.sleep(2)             # Port açılınca Arduino yeniden başlar / opening the port resets the Arduino
7ser.reset_input_buffer()  # Eski verileri temizle / drop stale data
8
9ESIK = 300                # Karanlık eşiği, sensörüne göre ayarla / darkness threshold, tune it for your sensor
10led_durum = None
11
12while True:
13    satir = ser.readline().decode("utf-8", errors="ignore").strip()
14    if not satir.startswith("A0:") or not satir[3:].isdigit():
15        continue          # Boş ya da yarım satırı atla / skip empty or partial lines
16    deger = int(satir[3:])
17    print("Sensor:", deger)
18
19    yeni = "LED1" if deger < ESIK else "LED0"  # Karanlıkta LED'i yak / LED on in the dark
20    if yeni != led_durum:                      # Yalnız değişince gönder / send only on change
21        ser.write((yeni + "\n").encode())
22        led_durum = yeni

Arduinoは500 msごとに「A0:512」のような行を送り、改行で終わる「LED1」や「LED0」の命令を待ち受けます。millis()を使っているので、命令を待つことで測定が遅れることはありません。Python側では、time.sleep(2)の行が重要です。Piがシリアルポートを開くとArduinoは自動でリセットされ、最初の2秒間に送ったものは失われるからです。しきい値の300は自分のセンサーに合わせて調整してください。LDRをどちら向きに配線したかによって、暗くなると値が上がることも下がることもあります。シリアル通信についてもっと知りたい場合は、ArduinoとPythonのシリアル通信とUARTとは?を参照してください。

USBの代わりにArduinoをPiのGPIO 14(TX)とGPIO 15(RX)のピンにつなぐと、ArduinoのTXラインは5 Vを出力するので、PiのRXピンを壊すおそれがあります。間に分圧回路を入れてください。ArduinoのTXから直列に1 kΩ、PiのRXとGNDの間に2 kΩを入れると、5 × 2 / (1 + 2) = 3.33 Vになります。PiのTXの3.3 V信号は、Arduinoでも普通は正しく読み取れます。I2CとSPIにはレベル変換モジュールを使ってください。

Raspberry Pi Picoの位置付け:名前はRaspberry Pi、中身はマイコン

ここがいちばん混乱しやすい点です。Raspberry Piが作っているとはいえ、Raspberry Pi Picoはコンピューターではなく、Arduinoと同じマイコンボードです。OSはなく、すぐに起動し、消費電力は約0.1 Wで、リアルタイムに動作します。中心にあるのは、Raspberry Piが自ら設計したデュアルコアのRP2040チップです(Pico 2は150 MHzのRP2350を使います)。Arduino Unoと比べるとRAMがはるかに多く(264 KB)、12ビットのADCと、タイミングが重要な処理のためのPIOブロックを備え、MicroPython、C/C++、Arduino IDEでプログラミングできます。4ドルとArduino Unoより安いですが、3.3 Vで動作するので5 Vのモジュールには注意が必要です。詳しくはRaspberry Pi Picoとは?を読んでみてください。

Raspberry Pi Picoのマイコンボード
Raspberry Pi Pico:Raspberry Piという名前ですが、OSは動きません。Arduinoと同じく、1つのプログラムを実行する3.3 Vのマイコンボードです。

この比較でのPicoの最大の利点は、Raspberry Piと同じ3.3 Vのレベルで動作することです。UARTピンをレベル変換なしでPiに直接つなぐことも、USBに挿してArduinoとまったく同じように使うこともできます。下のMicroPythonのコードは、上のArduinoのコードと同じ「A0:値」の形式でデータを送り、同じLEDの命令を待ち受けるので、Pi上のPythonスクリプトは一切変更せずに動きます。Thonnyでコードをmain.pyとしてPicoに保存したら、Pi上のスクリプトがシリアルポートを使えるように、Thonnyを閉じてください。

MicroPython
1import sys, select, time
2from machine import ADC, Pin
3
4sensor = ADC(26)        # GP26 = ADC0 (fiziksel pin 31) / GP26 = ADC0 (physical pin 31)
5led = Pin(25, Pin.OUT)  # Pico dahili LED; Pico W'de Pin("LED") / onboard LED; use Pin("LED") on Pico W
6poll = select.poll()
7poll.register(sys.stdin, select.POLLIN)  # USB'den gelen veriyi dinle / listen for data over USB
8son = time.ticks_ms()
9
10while True:
11    # Pi'den komut var mı? / is there a command from the Pi?
12    if poll.poll(0):
13        komut = sys.stdin.readline().strip()
14        if komut == "LED1":
15            led.on()
16        elif komut == "LED0":
17            led.off()
18
19    # 500 ms'de bir, Arduino ile aynı biçimde gönder / every 500 ms, same format as the Arduino
20    if time.ticks_diff(time.ticks_ms(), son) >= 500:
21        son = time.ticks_ms()
22        deger = sensor.read_u16() >> 6  # 0-65535 -> 0-1023
23        print("A0:" + str(deger))

両者の境界はますますあいまいになっています。2025年、Arduinoは両方の世界を1枚のボードにまとめたArduino UNO Qを発表しました。このUnoサイズのボードには、Debian Linuxが動く4コアのQualcommプロセッサと、Arduinoのスケッチをリアルタイムに実行するSTM32U585マイコンが一緒に載っています。つまり、「Pi + Arduino」の構成が1枚のボードに収まったわけです。それでも考え方は変わりません。Linux側がネットワーク、映像、アプリケーションを担当し、マイコン側がピンとタイミングを担当します。この記事で説明した違いを理解していれば、こうしたハイブリッドなボードをずっとうまく使いこなせます。

よくある間違いと誤解

  • 「Raspberry Pi PicoはRaspberry Piの小型版」:違います。Linuxは動かず、HDMI出力もありません。Picoはマイコンで、Arduinoと同じ分類に入ります。
  • Piに5 Vの信号をつなぐ:HC-SR04のECHOピンやArduinoのTXラインをGPIOに直接つなぐと、ピンだけでなくプロセッサまで壊れて元に戻らなくなることがあります。分圧回路を使ってください。
  • PiでanalogReadを探す:Raspberry Piにはアナログ入力がありません。MCP3008、ADS1115、または補助のArduinoやPicoを使ってください。
  • プラグを抜いてシャットダウンする:SDカードを壊すいちばんの近道です。毎回sudo poweroffを使ってください。
  • スマホの充電器でPi 5を動かす:5 V 5 Aを供給できない電源では、Pi 5はUSBポート全体の電流を600 mAに制限し、負荷がかかると再起動することがあります。
  • 「Permission denied: '/dev/ttyACM0'」(アクセス権がない)エラー:ユーザーがdialoutグループに入っていません。usermodコマンドを実行して、ログインし直してください。「Device or resource busy」(デバイスが使用中)と出る場合は、ほかのプログラム(シリアルモニタやThonny)がポートを使っています。
  • 「Arduinoは時代遅れで、今はPiの時代」と考える:両者はライバルではなく、別の仕事のための道具です。洗濯機から自動車まで、ほとんどの機器は今もマイコンで動いています。
どこから始めるか迷うなら、Arduino Unoで電子工作の基本を学びましょう。LED、ボタン、センサー、モーターを扱いながら、電流、電圧、タイミングを肌で感じられます。カメラ、ネットワーク、画面が必要なアイデアが浮かんだら、Raspberry Piを加えましょう。そのころには、Arduinoで学んだことがPiのGPIOを安全に使う助けになります。ボード選びには、どのArduinoを買えばいい?やArduinoとESP32の違いは?も役立ちます。

まとめると、Raspberry Piは考えて見るコンピューターで、Arduinoは感じ取ったことを即座に動作に変えるコントローラーです。よいプロジェクトは、両方の強みを組み合わせていることがよくあります。BlueGraysアプリには、LEDやセンサーからロボット、Wi-Fiを使った作品まで、Arduino、ESP32、Raspberry Pi Picoを使ったプロジェクトが何十も、ステップごとの回路図とすぐに使えるコード付きで用意されています。無料のものから始められます。

よくある質問

Raspberry PiとArduinoの違いは?

Raspberry PiはLinuxのOSが動くシングルボードコンピューターで、画面、キーボード、インターネット、カメラをつないでパソコンのように使えます。ArduinoはOSのないマイコンボードで、書き込まれた1つのプログラムをすぐに、リアルタイムに実行します。Piは複雑な計算やネットワークが得意で、Arduinoはセンサー、モーター、低消費電力の用途が得意です。

初心者はRaspberry PiとArduinoのどちらを買うべき?

電子工作を学びたいなら、Arduino Unoから始めましょう。5 Vのモジュールがそのまま使え、間違いに強く、サンプルが非常に豊富です。主な目的がLinux、Pythonのプログラミング、カメラ、サーバーのプロジェクトなら、最初の一歩にはRaspberry Piのほうが向いています。Pythonが好きでマイコンを学びたい人には、Raspberry Pi Picoが安価な中間の選択肢です。

ArduinoのコードはRaspberry Piで動く?

そのままでは動きません。ArduinoのスケッチはATmega328Pのようなマイコン向けにコンパイルされるので、Raspberry Piでは同じ処理をPythonとgpiozeroのようなライブラリで書き直す必要があります。ただし、Raspberry Piをコンピューターとして使い、arduino-cliでArduinoにコードを書き込むことはできます。

Raspberry PiとArduinoは一緒に使える?

使えます。いちばん簡単なのは、ArduinoをUSBケーブルでPiにつなぎ、シリアルポートでデータをやり取りする方法です。Pythonのpyserialライブラリさえあれば十分です。この構成では、Piがカメラ、ネットワーク、判断を担当し、Arduinoがセンサーとモーターを担当します。GPIOピンのUARTやI2Cでつなぐ場合は、5 Vと3.3 Vの違いがあるので、分圧回路かレベル変換モジュールを使ってください。

Raspberry Pi PicoはArduinoの一種?

いいえ、ですが同じ分類に入ります。PicoはArduinoと同じく、OSのないマイコンボードです。RP2040チップのおかげでUnoより速く、RAMも多く、MicroPythonでプログラミングできます。好みに応じてArduino IDEでコードを書くこともできます。大きな違いは、5 Vではなく3.3 Vで動作することです。

ロボットを作るならRaspberry PiとArduinoのどちらがいい?

障害物を避ける、ラインをたどる、リモコンで走るといったロボットなら、Arduinoで十分で、しかもより確実です。遅れなくモーターとセンサーを扱えます。ロボットがカメラで物体を認識したり、地図を作ったり、インターネット経由で操作されたりする必要があるなら、Raspberry Piが必要です。高度なロボットでは普通両方を使い、Piが判断してArduinoがモーターを動かします。

全プロジェクトを見る
LEDの点滅
#1初級

LEDの点滅

電子工作の第一歩は、1個のLEDを点けたり消したりすることです。Arduinoで短い間隔で点灯と消灯を繰り返すと、LEDが素早く点滅します。ボードが光を制御する仕組みを最もシンプルな形で確かめ、これから取り組むプロジェクトの基礎を身につけます。

4.6(188)
1125
Raspberry Pi Picoの内蔵LEDを点滅(PicoとPico W)
#147初級

Raspberry Pi Picoの内蔵LEDを点滅(PicoとPico W)

Raspberry Pi Picoシリーズの最初のプロジェクトです!ボード上の緑色LEDを点滅させて動作を確認する、定番の「Hello World」に相当する実験です。外付け部品は不要で、PicoとUSBケーブルだけで始められます。コードはMicroPython(Raspberry Pi Foundationが公式にサポートする言語)で書きます。Thonny IDEでmachine.Pinクラス、Pin.OUTモード、led.on()/off()メソッド、time.sleep()を学びます。シリアル(REPL)出力で、切り替わる様子をリアルタイムに確認できます。

5.0(1)
10
LDRで光の強さを測定
#11初級

LDRで光の強さを測定

部屋の明るさを数値で見てみませんか?光に反応する小さな部品、LDRで周囲の光を測定し、Arduinoが0.5秒ごとにその値をコンピューターの画面に表示します。手で覆うと数値が変わる様子を確認できます。自動で点灯する常夜灯などのプロジェクトへの第一歩です。

4.6(81)
138
DHT11で温度と湿度を測定
#55中級

DHT11で温度と湿度を測定

部屋の温度は何度で、空気は湿っているでしょうか、それとも乾燥しているでしょうか?DHT11センサーが温度と湿度を測定し、Arduinoが2行のLCDディスプレイに値を表示して、数秒ごとに更新します。センサーに異常があればエラーメッセージが表示されます。自分だけの小さな気象観測装置を作る第一歩です。

4.7(47)
73
HC-SR04で距離を測定(シリアルモニタ表示)
#27初級

HC-SR04で距離を測定(シリアルモニタ表示)

HC-SR04センサーは、コウモリが暗闇で道を見つけるのと同じ仕組みで動作します。人には聞こえない音を出し、その反響を捉えて前方の物体までの距離を測ります。Arduinoは0.5秒ごとに距離をセンチメートル単位でコンピューターの画面に表示し、3〜100センチメートルの測定値を示します。駐車センサーや障害物を避けるロボットなどのプロジェクトの基礎になります。

4.6(46)
71
2台のArduinoで一方向通信
#57中級
プレミアム

2台のArduinoで一方向通信

2台のArduinoを1本のワイヤーで通信させます。一方のボタンを押すともう一方のLEDが点灯し、もう一度押すと消灯します。送信側のボードがボタンの押下を短いメッセージで伝え、受信側のボードはそのメッセージを受け取るとLEDの点灯と消灯を切り替えます。機器同士が情報を伝える仕組みを、最もシンプルな形で確かめられます。

4.4(37)
50
Python開発者向けキーボード
#66中級
プレミアム

Python開発者向けキーボード

コーディング中に同じパターンを何度も入力する手間を省く、小さなキーボードです。Arduino Leonardoをコンピューターにキーボードとして接続します。4x4キーパッドの各キーを1回押すだけで、条件分岐、ループ、画面への出力、ファイルの読み込みなどのPythonのひな形を入力し、書き足す場所へカーソルを移動します。F5を押して、書いたプログラムを実行するキーもあります。

4.6(35)
45
スマート水やりステーション
#83上級
プレミアム

スマート水やりステーション

旅行中も植物が枯れないよう、自動で水やりをするシステムです。土壌水分センサーで土の湿り具合を測定し、乾燥するとArduinoが給水ポンプを数秒間動かして、青いライトを点灯させます。水分が適切なときは緑のライトが点灯します。土がひどく乾燥すると、赤いライトが点滅し、ブザーが鳴って知らせます。

5.0(42)
57