ガイド · 読了まで19分

TinkercadのArduinoシミュレーター:回路、コード、テスターのガイド

TinkercadでのArduinoのシミュレーションをステップごとに:登録、ブレッドボードでのLEDとセンサーの回路、ブロックと文字のコード、シリアルモニタ、仮想テスター、Wokwi。

TinkercadでのArduinoのシミュレーションは、部品を1つも持っていなくても、Arduinoの回路を組んでコードを動かせる一番簡単な方法です。Autodeskの無料のブラウザ版ツールTinkercad Circuitsでは、Arduino Unoを仮想のブレッドボードにつなぎ、LED、抵抗、ボタン、センサーを追加し、コードを書いてStart Simulation(シミュレーションを開始)を押します。LEDが点き、サーボが回り、シリアルモニタにデータが流れます。すべて画面の中で起きるので、間違った接続でLEDが焼けたりボードが壊れたりすることはありません。そのため、学校のArduinoの授業の多くはTinkercadから始まります。

このガイドでは、アカウントの作成から始めて、ブレッドボードで最初の回路を組み、ブロックのコードと文字のコードの違いを確認し、シリアルモニタとそのグラフでセンサーのデータを見て、仮想テスターで電圧、電流、抵抗を測ります。その後、教員向けのクラスのアカウント、Tinkercadにある部品とない部品、シミュレーションが本物の回路と違う点、ESP32とRaspberry Pi PicoではWokwiに切り替えるべき理由を学びます。

Arduino Uno R3ボード
TinkercadがシミュレーションするボードはArduino Uno R3なので、組んだ回路と書いたコードは、同じピンのまま本物のUnoに移せます。

Tinkercad Circuitsとは?そのしくみ

Tinkercadは、3Dデザイン、電子回路、プログラミングのツールをまとめた、Autodeskの無料のウェブアプリです。電子回路のセクションであるCircuitsは、2017年に終了した123D Circuitsの後継で、何もインストールせずに最新のブラウザで動きます。デザインはクラウドに保存されるので、学校のパソコンで始めた回路を家で続けられます。Tinkercadはコードを動かすだけでなく、回路の電気的な動作も計算します。抵抗を流れる電流、LEDにかかる電圧、任意の点の電圧などです。プログラムできるボードはArduino Uno R3、ATtiny、BBC micro:bitです。Arduinoのコードは本物のArduinoのコンパイラと同じようにコンパイルされ、仮想のATmega328Pで実行されるので、Tinkercadで動くコードは本物のボードでも動きます。

項目Tinkercad Circuits
価格無料(Autodeskのアカウントが必要)
インストール不要。ブラウザで動き、デザインはクラウドに保存
プログラムできるボードArduino Uno R3、ATtiny、BBC micro:bit
プログラミングブロック、ブロック+文字、文字(Arduino C++)
組み込みのライブラリ約11個:Servo、LiquidCrystal、Adafruit NeoPixel、IRremote、Keypad、Wire、SoftwareSerial、EEPROMなど
計測器テスター、オシロスコープ、ファンクションジェネレーター、可変電源
既製の例Starters:基本、Arduino、micro:bitの回路
クラスの管理Tinkercad Classrooms、1クラス最大250人
本物のボードへの移行コードを.inoファイルでダウンロードし、Arduino IDEで書き込む

Tinkercadのアカウントの作り方

  1. ブラウザでtinkercad.comを開き、右上のSign Up(登録)ボタンをクリックします。
  2. 自分に合った方法を選びます。独学なら個人アカウント、教えているなら教員(Educators)アカウント、先生からクラスのコードをもらったならJoin Class(クラスに参加)です。
  3. 個人アカウントなら、メールアドレスかGoogleアカウントで続けます。TinkercadのアカウントはじつはAutodeskのアカウントなので、ほかのAutodeskのサービスにも同じログインが使えます。
  4. ログインしたら、ダッシュボードの左のメニューからCircuits(回路)のセクションを開き、Create(作成)ボタンで新しい回路を始めます。
  5. デザインは自動で保存されます。Tinkercadはランダムでユーモラスな名前を付けるので、左上の名前をクリックして「LEDとボタン」のようなわかりやすい名前を入力し、あとで見つけやすくしましょう。

13歳未満の生徒には、先生が用意したクラスのコードとニックネームでログインするのが一番簡単です。メールアドレスもパスワードも必要ありません。生徒はtinkercad.comでJoin Classをクリックしてコードを入力し、続いてもらったニックネームを入力します。個人アカウントを作りたい年少のユーザーは、登録時に保護者の同意を求められることがあります。教員アカウントの詳しいことは、下の別の章で紹介します。

画面を知る:作業スペース、部品、ショートカット

回路エディターは、左に大きな作業スペース、右に部品のパネルがあります。パネルには初期設定で人気のある基本部品(Basic Components)が表示されます。すべてを見るには、ドロップダウンメニューからAll Components(すべてのコンポーネント)を選ぶか、検索欄に「servo」や「ultrasonic」のような名前を入力します。パネルの下のほうのStartersのセクションには、既製のArduinoの回路が20個ほどあります。1つを作業スペースにドラッグし、シミュレーションを始めてコードを読むのが、新しい部品を学ぶ一番速い方法です。上のバーのボタンで、回路の表示、自動で描かれる回路図の表示、部品の一覧を切り替えられます。

ショートカット働き
F回路全体を画面に収める(Zoom to fit)
R選んだ部品を回転する
NとShift + Nメモを追加する。メモを隠す・表示する
数字キー0〜9選んだ線の色を変える
Shift + クリック複数の部品を一度に選ぶ
マウスホイール拡大・縮小する
Delete選んだ部品か線を削除する

最初の回路:ブレッドボードでLED、抵抗、ボタン

ブレッドボード
本物のブレッドボードも、Tinkercadのものと同じように内部で配線されています。端の長いレールが電源を運び、中央の5穴の列に部品を差します。
  1. 部品のパネルからArduino Uno R3とブレッドボードをドラッグし、横に並べて置きます。ブレッドボードの内部のつながりがわからなければ、先にブレッドボードとは?を読みましょう。
  2. ブレッドボードにLEDを置きます。TinkercadのLEDでは、曲がった足がアノード(+)、まっすぐな足がカソード(−)です。足にマウスを重ねると、Tinkercadが名前を表示します。LEDを選ぶと、開いたパネルで色を変えられます。
  3. 抵抗を追加し、LEDのアノードに直列につなぎます。抵抗を選び、パネルで値を220、単位をΩにします。初期値は1 kΩです。LEDに合った値はLEDの抵抗の計算ツールで求められます。
  4. ボタン(Pushbutton)を、反対側の足が分かれるように、ブレッドボードの中央の溝をまたいで置きます。
  5. 線を引くには、ピンか穴をクリックし、次に行き先をクリックします。途中で何もない場所をクリックすると線を曲げられます。抵抗の空いている端をD9に、LEDのカソードをGNDに、ボタンの片方の足をD2に、対角の足をGNDにつなぎます。
  6. 線に色を付けましょう。電源を赤、GNDを黒にすると、トラブルの原因を探すのがずっと楽になります。それから下のコードを入力し、Start Simulationを押します。
接続Arduino Uno(Tinkercad)ESP32Raspberry Pi Pico
LEDのアノード(220 Ωを通して)D9GPIO 18GP14
LEDのカソードGNDGNDGND
ボタン(もう一方の足はGNDへ)D2GPIO 4GP2
ポテンショメーターのワイパーA0GPIO 34GP26(ADC0)
TMP36の中央のピン(Vout)A1GPIO 35GP27(ADC1)
ポテンショメーターとTMP36の電源5VとGND3V3とGND3V3(OUT)とGND
最も多い失敗は、LEDを逆に差すことと抵抗を忘れることの2つです。逆に差したLEDは決して点きません。抵抗なしのLEDにマウスを重ねると、Tinkercadは電流が推奨値の20 mAを超えているという警告を表示し、電池に直接つないだLEDは小さな爆発のアイコンとともに「焼けて」しまいます。また、220 Ωの代わりにうっかり220 kΩを選ぶと、LEDはとてもかすかにしか光らず、消えていると思うでしょう。

コードを書く:ブロック、ブロック+文字、文字のモード

右上のCode(コード)ボタンでコードのパネルが開きます。パネルの上のドロップダウンには3つのモードがあります。Blocks(ブロック)モードでは、Scratchのようなカラフルなブロックをドラッグしてつなげるので、セミコロンの付け忘れや打ち間違いは起きません。Blocks + Text(ブロック+文字)モードでは、左にブロックが残ったまま、Tinkercadがそこから生成するArduinoのC++のコードが右にリアルタイムで表示されます。ブロックを変えると文字もすぐに変わります。このモードが、ブロックから本物のコードへの一番の橋渡しです。Text(文字)モードでは、Arduino IDEと同じようにC++を直接書きます。ブロックは色ごとに、出力、入力、表記、制御、算術、変数のグループに分かれています。

ブロック(働き)文字モードでの書き方
ピンをHIGHかLOWにするdigitalWrite(9, HIGH);
決まった時間待つdelay(1000);
デジタルピンを読むdigitalRead(2)
アナログピンを読むanalogRead(A0)
シリアルモニタに表示するSerial.println(value);
サーボを決まった角度に回すservo.write(90);(Servoライブラリを使用)
繰り返し、もし、そうでなければforループ、if、else
変数を作って変えるint counter = 0; counter = counter + 1;(作成と変更)
ブロックから文字への切り替えは一方通行です。Textモードで加えた変更はブロックに戻されず、ブロックに戻ると文字のコードは失われます。切り替える前にデザインのコピー(Duplicate)を作っておけば、ブロック版がバックアップとして残り、両方のやり方を並べて比べられます。

文字のコードで最初のプログラム:ボタン、LED、シリアルモニタ

C++ (Arduino IDE)
1// Tinkercad ilk program: buton, LED ve Seri Monitör / First Tinkercad sketch: button, LED and Serial Monitor
2const int LED_PIN = 9;      // LED + 220 ohm direnç / LED + 220 ohm resistor
3const int BUTON_PIN = 2;    // butonun diğer ucu GND'de / other button leg goes to GND
4
5int basmaSayisi = 0;        // basma sayacı / press counter
6int oncekiDurum = HIGH;     // önceki buton durumu / previous button state
7bool ledAcik = false;       // LED durumu / LED state
8
9void setup() {
10  pinMode(LED_PIN, OUTPUT);
11  pinMode(BUTON_PIN, INPUT_PULLUP);   // basılınca LOW okunur / reads LOW when pressed
12  Serial.begin(9600);
13  Serial.println("Hazir / Ready");
14}
15
16void loop() {
17  int durum = digitalRead(BUTON_PIN);
18  if (durum != oncekiDurum) {                       // durum değişti / state changed
19    if (durum == LOW) {                             // yeni basış / new press
20      basmaSayisi++;
21      ledAcik = !ledAcik;                           // LED'i tersine çevir / toggle the LED
22      digitalWrite(LED_PIN, ledAcik ? HIGH : LOW);
23      Serial.print("Basma / Presses: ");
24      Serial.println(basmaSayisi);
25    }
26    delay(50);                                      // basma ve bırakmada debounce / debounce on press and release
27    oncekiDurum = durum;
28  }
29}

ボタンはINPUT_PULLUPで読みます。Arduinoの中にある約20〜50 kΩの抵抗がピンをHIGHに保ち、ボタンを押すとGNDに引っぱられてLOWになるので、追加の抵抗はいりません。プログラムはHIGHからLOWへの変化、つまり新しく押されたときだけに反応し、そのたびにLEDを切り替えます。シミュレーションを始めたら、コードのパネルの下にあるSerial Monitor(シリアルモニタ)ボタンをクリックし、マウスでボタンをクリックしてみましょう。押すたびにカウンターが1つ増えます。同じ回路を本物のボードで組む方法はArduinoに押しボタンをつなぐ方法で詳しく紹介しています。

シリアルモニタとグラフ:センサーのデータを見る

Tinkercadのセンサーの一番の魅力は、マウスで値を変えられることです。シミュレーション中にTMP36温度センサーをクリックするとスライダーが表示され、温度を−40〜125 °Cの間で設定できます。フォトレジスタの明るさや土壌水分センサーの水分も同じように変えられます。超音波距離センサーやPIR人感センサーでは、前に表示される対象をドラッグして、距離や動きをまねします。TMP36は0 °Cで0.5 Vを出力し、1度ごとに10 mV上がるので、25 °Cでは0.75 Vです。中央のピンをA1に、両端のピンを5VとGNDにつなぎます。下のコードはその電圧を読み、摂氏の温度に変換します。

C++ (Arduino IDE)
1// TMP36 ile sıcaklık: Seri Monitör ve grafik / Temperature with TMP36: Serial Monitor and graph
2const int TMP36_PIN = A1;   // TMP36 orta ucu (Vout) / TMP36 middle pin (Vout)
3
4void setup() {
5  Serial.begin(9600);
6}
7
8void loop() {
9  int ham = analogRead(TMP36_PIN);         // 0-1023 arası ham değer / raw value 0-1023
10  float volt = ham * 5.0 / 1023.0;         // gerilime çevir / convert to volts
11  float sicaklik = (volt - 0.5) * 100.0;   // 0,5 V = 0 °C ve 10 mV/°C / 0.5 V = 0 °C and 10 mV/°C
12  Serial.println(sicaklik, 1);             // yalnız sayı: grafik için / number only: for the graph
13  delay(500);
14}

シリアルモニタを開いたまま、パネルのグラフボタンを押すと、送られてくる数値が折れ線グラフで表示されます。センサーのスライダーを動かして、カーブが上がったり下がったりするのを見てみましょう。きれいなグラフにするには、各行に数値だけを表示します。「Temp: 24.5」のようなラベルを付けると、グラフが崩れたり、まったく描かれなかったりします。モニタの下の欄に文字を入力して送信し、コードでSerial.read()で読むこともできるので、キーボードでLEDを点けるプログラムも書けます。シリアル通信のすべてはArduinoのシリアルモニタをご覧ください。

仮想テスターで電圧、電流、抵抗を測る

TinkercadとArduino IDEの最大の違いは、回路を電気的に計算することです。そのため、本物のテスターと同じように測定できます。部品のパネルからMultimeter(マルチメーター)をドラッグします。下の2つの端子のうち、黒がCOM(−)、赤が測定用(+)の端子です。テスターをクリックすると開くパネルで測定モードを選び、シミュレーション中は画面に値が表示されます。

  • 電圧:測りたい2点の間にテスト棒を並列につなぎます。たとえば赤をポテンショメーターのワイパーに、黒をGNDにつなぎます。
  • 電流:回路を1か所で切り、テスターを直列に入れます。たとえばD9と抵抗の間です。電流モードのテスターを部品に並列につなぐとショートになります。
  • 抵抗:測りたい部品を外すか電源を切った状態にして、2本の足にテスト棒をつなぎます。Tinkercadの抵抗には本物のカラーの帯が描かれているので、抵抗のカラーコードツールで読み方を練習できます。
C++ (Arduino IDE)
1// Potansiyometre ile LED parlaklığı ve multimetre karşılaştırması
2// Potentiometer LED brightness and multimeter comparison
3const int POT_PIN = A0;   // potansiyometre orta ucu / potentiometer wiper
4const int LED_PIN = 9;    // PWM destekli pin / PWM-capable pin
5
6void setup() {
7  pinMode(LED_PIN, OUTPUT);
8  Serial.begin(9600);
9}
10
11void loop() {
12  int ham = analogRead(POT_PIN);                // 0-1023
13  float volt = ham * 5.0 / 1023.0;              // multimetreyle karşılaştır / compare with the multimeter
14  int parlaklik = map(ham, 0, 1023, 0, 255);    // PWM değeri / PWM value
15  analogWrite(LED_PIN, parlaklik);
16
17  Serial.print(ham);
18  Serial.print("  ");
19  Serial.print(volt, 2);
20  Serial.println(" V");
21  delay(300);
22}

この実験では、回路にポテンショメーターを追加します。両端のピンを5VとGNDに、ワイパーをA0につなぎます。つまみをちょうど真ん中にすると、テスターは2.50 Vを、シリアルモニタは511前後の生の値と2.50 Vを示します。2.5 / 5 × 1023 ≈ 511だからです。両方の値が一致するのを見るのは、analogReadが電圧を数値に変えるしくみを理解する一番の実験です。次に、テスターを電流モードにしてD9と抵抗の間に直列に入れ、ポテンショメーターをいっぱいまで回します。赤のLEDと220 Ωなら、およそ(5 − 2) / 220 ≈ 14 mAになります。同じ計算はオームの法則の計算ツールでもできます。中間の位置では、D9はオン・オフを繰り返すPWM信号を出します。それを見るにはオシロスコープを追加し、赤のプローブをD9に、黒のプローブをGNDにつなぎます。Unoの9番ピンのPWMの周波数は約490 Hzで、analogWrite(128)は半分の時間だけHIGHになる方形波を描きます。PWMの考え方はPWMとは?にあります。

デバッガでコードを1行ずつ実行する

コードがコンパイルできないと、Tinkercadはコードのパネルの下にエラーコンソールを自動で開き、問題の行を強調表示します。メッセージはArduino IDEのものと似ています。コンパイルはできても動きがおかしいなら、デバッガを使いましょう。文字モードで行番号をクリックしてブレークポイントを置き、シミュレーションを始めます。プログラムはその行に来ると止まり、変数にマウスを重ねると現在の値が表示されます。コードのパネルの上に表示されるボタンで、次の行に進んだり、プログラムを再開したりできます。ボタンが2回数えられる理由や、if文の中に入らない理由を探すなら、すべての行にSerial.printを足すよりずっと速く見つかります。よくあるコンパイラのメッセージの意味はArduinoのコンパイルエラーにまとめています。

Tinkercadにある部品とない部品

グループTinkercadにあるものないもの(代わりに使うもの)
ボードArduino Uno R3、ATtiny、BBC micro:bitArduino NanoとMega、ESP32、ESP8266、Raspberry Pi Pico(Unoで試すかWokwiを使う)
センサーTMP36温度センサー、フォトレジスタ、超音波距離センサー(3ピンと4ピン)、PIR、土壌水分、ガス、傾き、曲げ、力のセンサー、赤外線受信モジュールDHT11、DHT22、MPU6050(温度にはTMP36を使う)
ディスプレイと光LED、RGB LED、16x2 LCD(パラレルとI2C)、7セグメントディスプレイ、NeoPixelのテープとリングOLED(SSD1306)とTFTディスプレイ(代わりにLCDで試す)
モーターと出力DCモーター、ギアモーター、マイクロサーボ、振動モーター、圧電ブザー、リレー、L293D HブリッジL298Nモータードライバモジュール(L293Dを使う)
入力部品押しボタン、スライドスイッチとDIPスイッチ、ポテンショメーター、4x4キーパッド、赤外線リモコンRC522 RFIDリーダーと指紋センサー
ICと基本部品抵抗、コンデンサ、インダクタ、ダイオード、ツェナー、NPNとPNPのトランジスタ、MOSFET、555、74HC595、論理ゲート、LM741オペアンプ、7805レギュレーター基本部品はほぼすべてある
通信複数のUnoをシリアル(TX/RX)とI2CでつなぐWi-Fi、Bluetooth(HC-05)、nRF24L01、GSMモジュール
測定と電源テスター、オシロスコープ、ファンクションジェネレーター、電源、9 V・単3・コイン電池時間とともに減る電池や部品の発熱
LDR
LDR
PIR
PIR
HC-SR04
HC-SR04
SG90
SG90

ライブラリを追加するには、コードのパネルのライブラリボタン(ファイルボックスのアイコン)を押します。リストにある約11個のライブラリから1つを選ぶと、コードの先頭に#includeの行が追加されます。DHT.hのようにリストにないライブラリを書くと、コンパイラはファイルが見つからないと報告します。Tinkercadに外部のライブラリをアップロードすることはできません。小さなライブラリなら.hと.cppファイルの中身をコードに直接貼り付けられますが、Tinkercadにないハードウェア用のライブラリはその方法でも動きません。もう1つ大切な点として、例ではTinkercadのI2C LCDはAdafruit_LiquidCrystalライブラリで動かしますが、市販のPCF8574を使ったモジュールはふつうLiquidCrystal_I2Cライブラリと0x27か0x3Fのアドレスで動きます。本物のボードに移るときはその行を変える必要があります。詳しくはI2C LCDディスプレイをご覧ください。

シミュレーションの限界:本物の回路との違い

  • タイミング:シミュレーションはブラウザの中で動くので、部品の多い回路や遅いパソコンでは、実際の時間より遅く動くことがあります。その場合、画面上ではdelay(1000)が1秒より長くかかり、millis()はシミュレーション自体の時計を数えます。
  • 理想的な部品:Tinkercadのボタンはチャタリングせず、線が外れることもなく、アナログの値も本物の回路ほどノイズがありません。本物のボードでは、チャタリング対策と何回かの読み取りの平均が必要です。
  • 電源の限界:シミュレーションでは問題なく動くモーターや多くのLEDも、本物のArduinoではリセットやレギュレーターの過熱の原因になることがあります。ピンから約20 mAを超えて取り出さないこと、モーターは別の電源から給電することをルールにしましょう。
  • つながって見えても、つながっているとは限らない:足がブレッドボードの穴にきちんと入っていないと、線はつながって見えても回路は動きません。穴にマウスを重ね、同じ列のつながった穴が強調表示されるか確認しましょう。
  • ファイルは1つ、ライブラリは少ない:コードは1つのタブに収まり、外部のライブラリも追加できないので、大きなプロジェクトは整理しにくくなります。
  • 特殊な文字:シリアルモニタはUTF-8に完全には対応していないので、アクセント付きの文字や英語以外の文字(日本語など)は文字化けすることがあります。シリアル出力は半角英数字(ASCII)だけにするのが最も安全です。
  • 無線なし:Wi-Fi、Bluetooth、インターネットはシミュレーションされないので、TinkercadはIoT(モノのインターネット)のプロジェクトには向いていません。

教員向けのTinkercad Classrooms

  1. 登録時かプロフィールの設定で、役割を教員にします。クラスの機能は教員アカウントで使えます。
  2. 上のメニューからClasses(クラス)のページに行き、Create new class(新しいクラスを作成)でクラスを作ります。クラス名、年齢か学年、教科を入力します。
  3. Add Students(生徒を追加)で生徒の名前を入力します。Tinkercadは各生徒に、クラス内で重ならないニックネームを作ります。長いリストは1人ずつ入力する代わりに貼り付けられます。1クラスには最大250人まで入れます。
  4. Class Code(クラスコード)ボタンで、クラスのコードとクラスのリンクを表示します。生徒はリンクを開いてニックネームを入力するか、tinkercad.comのJoin Classでコードを入力して参加します。メールアドレスもパスワードも必要ありません。
  5. クラスのページのDesigns(デザイン)タブで生徒の作品を確認します。生徒の名前をクリックすると、その生徒のデザインを開いて編集できます。

クラスは初期設定でSafe Mode(セーフモード)で開きます。生徒はデザインを公開できず、ギャラリーを検索できず、コメントも見られません。授業の準備には、TinkercadのLearnのセクションにある対話型のArduinoのレッスンやStartersの回路が使えます。よくあるやり方は、先生が例の回路を共有し、生徒がそれをコピーして変えていく方法です。教室に実物のキットがあるなら、まずTinkercadで回路を組み、それから本物の部品で繰り返すと、LEDの逆差しやボードへの間違った給電が目に見えて減ります。

Tinkercadから本物のArduinoに移る

  1. コードのパネルのダウンロードボタンで、コードを.inoファイルとしてパソコンに保存するか、文字をコピーします。
  2. Arduino IDEでファイルを開きます。同じ名前のフォルダに移すか聞かれたら、了承します。IDEをまだインストールしていなければ、Arduino IDEのインストールのガイドをご覧ください。
  3. 「ツール」>「ボード」でArduino Unoを、「ポート」でボードのポートを選び、「書き込み」をクリックします。書き込みに失敗したら、Arduinoにコードが書き込めないときの手順に沿って確認しましょう。
  4. Tinkercadの図を見ながら、同じピンで回路を組みます。2つ目の画面に回路図の表示を開いておくと楽になります。
  5. シミュレーションではわからない違いを直します。ボタンにソフトウェアのチャタリング対策を加え、I2C LCDのライブラリとアドレスを変え、TMP36の代わりにDHT11のような別のセンサーを使うなら、それに合わせてコードを書き換えます。

ESP32とRaspberry Pi Pico:TinkercadかWokwiか?

TinkercadにはESP32もRaspberry Pi Picoもなく、Wi-FiやMicroPythonもシミュレーションされません。これらのボードには、ブラウザで動く別のシミュレーターのWokwiが使えます。WokwiはArduino Uno、Mega、Nanoに加えてESP32ファミリーとPicoに対応し、ESP32を仮想のWi-Fiネットワークにつなぎ、Arduinoのライブラリマネージャのほとんどのライブラリを使えます。一方、Wokwiは回路を電気的に計算しません。抵抗の値を変えてもLEDの電流は変わらず、電圧と電流を測るテスターの代わりに、デジタル信号用のロジックアナライザーがあります。まとめると、電子工作の基本はTinkercadで学び、ESP32とPicoのコードはWokwiで試すのが最も効率的です。詳しい使い方はWokwiシミュレーターをご覧ください。

項目Tinkercad CircuitsWokwi
ボードArduino Uno R3、ATtiny、micro:bitUno、Mega、Nano、ESP32ファミリー、Raspberry Pi Pico、STM32など
電気的なシミュレーション(電流、電圧)あり。テスターとオシロスコープごく限られる。ロジックアナライザーあり
ブロックでのプログラミングありなし
ライブラリ組み込みのライブラリ約11個ライブラリマネージャのほとんどのライブラリ
Wi-Fiとインターネットなしあり、ESP32とPico Wで
MicroPythonなしあり、PicoとESP32で
アカウント必要試すだけなら不要。保存にはログイン
向いている用途電子工作の基本、学校の授業、Arduinoの最初の一歩ESP32、Pico、IoT、ライブラリを多く使うプロジェクト

下は、Raspberry Pi Pico用のボタンとLEDのプログラムのMicroPython版です。ピンの表のGP14とGP2の接続で、WokwiでもThonnyを使った本物のPicoでも動かせます。ESP32ではArduinoのコードをそのまま使い、LED_PINを18に、BUTON_PINを4にするだけです。Picoを始めるにはRaspberry Pi Picoとは?を、ESP32についてはESP32とは?をご覧ください。

MicroPython
1# Aynı program Raspberry Pi Pico'da (MicroPython) / The same program on Raspberry Pi Pico (MicroPython)
2from machine import Pin
3import time
4
5led = Pin(14, Pin.OUT)                  # LED + 220 ohm direnç / LED + 220 ohm resistor
6buton = Pin(2, Pin.IN, Pin.PULL_UP)     # butonun diğer ucu GND'de / other button leg goes to GND
7
8basma = 0                               # basma sayacı / press counter
9onceki = 1                              # önceki buton durumu / previous button state
10
11while True:
12    durum = buton.value()
13    if durum != onceki:                 # durum değişti / state changed
14        if durum == 0:                  # yeni basış / new press
15            basma += 1
16            led.toggle()                # LED'i tersine çevir / toggle the LED
17            print("Basma / Presses:", basma)
18        time.sleep_ms(50)               # basma ve bırakmada debounce / debounce on press and release
19        onceki = durum
20    time.sleep_ms(5)

Tinkercadで試せるプロジェクトのアイデア

  • 信号機:LED 3個と歩行者用ボタンの交差点です。ステップごとの作り方はArduinoで信号機にあります。
  • ナイトライト:暗くなると点くLEDです。本物のボードでのフォトレジスタの使い方はLDR光センサーで紹介しています。
  • 駐車センサー:超音波センサーと、近づくほど速く鳴る圧電ブザーです。測定の原理はHC-SR04距離センサーで解説しています。
  • サーボの制御:ポテンショメーターでサーボの角度を決めます。サーボモーターのコードはTinkercadでも動きます。
  • 暗証番号ロック:4x4キーパッド、LCD、サーボを使ったドアロックです。キーパッドの記事で使っているKeypadライブラリはTinkercadにもあります。
  • 少ないピンで多くのLED:74HC595シフトレジスタで、3本のピンから8個のLEDを動かします。詳しくは74HC595をご覧ください。
  • 2台のArduinoの会話:2台のUnoのTXとRXの線を交差させてつなぎ、片方からもう片方へメッセージを送ります。Tinkercadは複数のボードを同時にシミュレーションできます。
  • 555の点滅回路:マイコンなしで点滅するLEDを作り、オシロスコープで周波数を測ります。計算は555タイマーにあります。

よくある失敗と対処法

症状考えられる原因対処法
LEDがまったく点かないLEDが逆、または両方の足がブレッドボードの同じ列にある曲がった足(アノード)を抵抗へ。足を別の列に差す
LEDがとても暗い抵抗が220 Ωではなく220 kΩになっている、または初期値の1 kΩのまま抵抗を選び、値と単位を確認する
LEDに警告か爆発のアイコンが出る抵抗がなく、電流が20 mAを超えているLEDに直列に220〜330 Ωの抵抗を入れる
シリアルモニタに何も出ないSerial.begin()がない、またはモニタが開いていないsetup()にSerial.begin(9600)を足し、シミュレーション中にシリアルモニタを開く
グラフに何も表示されない数値の横に文字を表示しているSerial.println()で数値だけを送る
コンパイルエラー:ライブラリが見つからないTinkercadにないライブラリ(DHT.hなど)をインクルードしたリストにあるライブラリか、同等の部品を使う
ボタンの動きが逆INPUT_PULLUPでは押している間ピンがLOWになるLOWのときの条件を書くか、外付けのプルダウン抵抗を使う
シミュレーションがとても遅い部品が多い、長いNeoPixelのテープ、頻繁すぎるSerial.print回路を簡単にし、ループに短いdelayを入れ、ほかのタブを閉じる
動いている回路を壊さないように、新しい機能を足す前にデザインのコピーを作り、コピーのほうで作業しましょう。うまくいかなくても、1回のクリックで動いていた版に戻れますし、授業で回路の段階をステップごとに見せるための資料もそのまま手に入ります。

Tinkercadは、無料で危険なくArduinoを学び始めるのに最適な場所です。回路を組み、測定し、コードを1行ずつ追い、準備ができたら同じコードを本物のボードに書き込めます。仮想の世界で動かせた回路が増えるほど、机の上での最初の挑戦も楽になります。BlueGraysアプリには、LEDの点灯や信号機から、ボタンとLDRのプロジェクト、HC-SR04での距離の測定、2台のArduinoの通信まで、ステップごとの回路図とコード付きのプロジェクトがたくさんあり、Tinkercadで組んだ回路を本物の部品で再現できます。もっとアイデアがほしいなら、Arduinoのプロジェクトのアイデアのリストを見てみましょう。

よくある質問

Tinkercadは無料ですか?

はい。Tinkercad Circuitsを含め、Tinkercadのツールはすべて無料で、必要なのはAutodeskのアカウントだけです。生徒は、先生からもらったクラスのコードで、メールアドレスなしでも参加できます。インストールは何も必要なく、最新のブラウザとインターネット接続があれば十分です。

TinkercadにESP32やRaspberry Pi Picoはありますか?

いいえ。Tinkercadでプログラムできるボードは、Arduino Uno R3、ATtiny、BBC micro:bitだけです。ESP32、ESP8266、Raspberry Pi Picoをシミュレーションするには、ESP32のWi-FiやPicoのMicroPythonにも対応したWokwiが使えます。

Tinkercadにライブラリを追加できますか?DHT11は使えますか?

Tinkercadに外部のライブラリをアップロードすることはできず、Servo、LiquidCrystal、Adafruit NeoPixel、IRremote、Keypadなど、コードのパネルにある約11個のライブラリしか使えません。DHT11とDHT22のセンサーも部品のリストにありません。温度を測るには、TMP36センサーをanalogReadで使いましょう。

Tinkercadのコードは本物のArduinoで動きますか?

はい。Tinkercadは標準のArduinoのC++のコードをコンパイルするからです。コードのパネルから.inoファイルをダウンロードし、Arduino IDEで開いてボードに書き込みます。必要になるのは、Tinkercad専用のライブラリ(I2C LCD用のAdafruit_LiquidCrystalなど)を実際のモジュールに合ったものに替えることと、ボタンにチャタリング対策を加えることくらいです。

TinkercadとWokwiはどちらがいいですか?

それぞれ得意なことが違います。Tinkercadは回路を電気的に計算し、テスターとブロックでのプログラミングがあるので、電子工作の基本や学校の授業に向いています。WokwiはESP32、Pico、Wi-Fi、幅広いライブラリへの対応により、発展的なプロジェクトやIoTのプロジェクトで力を発揮します。

生徒はどうやってTinkercadにログインしますか?

先生からクラスのリンク、またはクラスのコードとニックネームをもらいます。リンクを開いてニックネームを入力するか、tinkercad.comでJoin Classをクリックしてコードを入力し、続いてニックネームを入力します。この方法ならメールアドレスもパスワードも必要ありません。自分のアカウントをすでに持っているなら、ログインしてダッシュボードからクラスに参加しましょう。

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

LEDの点滅

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

4.6(188)
1127
信号機
#3初級

信号機

毎日道路で見かける信号機の小さな模型です。赤が2秒点灯し、黄が一瞬点灯した後、緑が2秒点灯します。その後、再び黄を経て赤に戻り、この動作を繰り返します。3個のLEDを順番に点けたり消したりしながら、タイミングの組み立て方を学びます。

4.8(131)
397
ボタンでLEDを点灯(押している間のみ)
#9初級

ボタンでLEDを点灯(押している間のみ)

呼び鈴のように、押している間は点灯し、離すと消灯します。Arduinoはボタンの状態を常に読み取り、押されている間はLEDを点灯させ、指を離した瞬間に消灯させます。このシンプルな回路で、ボードが外部からの操作を検知する仕組みを学べます。

4.8(113)
229
LDRで光の強さを測定
#11初級

LDRで光の強さを測定

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

4.6(81)
139
ブザーの使い方
#13初級

ブザーの使い方

呼び鈴やアラームがどうやって音を出すのか、気になったことはありませんか?Arduinoが小さなブザーを短い間隔で鳴らし、音を出す、止める、を繰り返します。電気で音が生まれる仕組みを学び、メロディーを演奏するプロジェクトへの第一歩を踏み出せます。

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

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

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

4.6(46)
71
サーボモーターの使い方
#35初級
プレミアム

サーボモーターの使い方

小型サーボモーターのアームが、一方の端、中央、もう一方の端の3つの位置へ順番に回り、それぞれの位置で2秒間止まります。Arduinoが保持する角度をモーターに指示すると、モーターはその位置まで動いて止まります。ロボットアームや自動開閉するふたが動く仕組みを学べます。

4.7(48)
67
2台のArduinoで一方向通信
#57中級
プレミアム

2台のArduinoで一方向通信

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

4.4(37)
50