Build a Talking Explorer Map
Touch a country with your finger, and your map speaks! It plays a fact out loud and shows the country's name and capital on a little screen. Here's exactly how to build one, wire it, and code it — from scratch.
What You'll Practice
Real skills, disguised as a fun build
This project quietly teaches a bunch of skills while you're busy having fun with tape, wires, and geography.
Grab a grown-up for this one
This build uses a soldering iron (hot!) and small parts that aren't for little siblings' mouths. Build it with an adult, keep the soldering iron on its stand when not in use, and work in a space with good airflow.
Gather Your Gear
What you'll need
Most of these parts are cheap and easy to find at an electronics hobby shop or online. You don't need all 8 countries — start with 4 if you want a shorter build.
The Big Idea
How does touching a map make it talk?
Your finger carries a tiny electrical charge. A copper patch shaped like a country can "feel" that charge the moment you touch it — no button-pressing needed. Here's the chain of events, from your fingertip to the sound coming out of the speaker.
Wire It Up
The circuit diagram
Here's the full wiring picture. Don't worry — the table underneath spells out every single connection so you can't get lost.
Exact pin connections
| Part | Pin on part | Connects to Arduino |
|---|---|---|
| Touch sensor #1–8 | VCC | 5V rail |
| Touch sensor #1–8 | GND | GND rail |
| Touch sensor #1–8 | SIG (out) | D2, D3, D4, D5, D6, D7, D8, D9 |
| DFPlayer Mini | VCC / GND | 5V rail / GND rail |
| DFPlayer Mini | RX | D11 (through a 1kΩ resistor) |
| DFPlayer Mini | TX | D10 |
| DFPlayer Mini | SPK_1 / SPK_2 | Speaker + and − |
| LCD (I2C) | VCC / GND | 5V rail / GND rail |
| LCD (I2C) | SDA | A4 |
| LCD (I2C) | SCL | A5 |
Let's Build
Step-by-step assembly
Choose your countries and prep the map
Pick 8 countries spread across different continents — it makes for a more interesting map. Mount your world map poster onto a piece of foam board or thin plywood using spray adhesive or glue, and let it dry flat under a heavy book overnight.
Cut and stick the copper touch pads
Cut small strips or shapes of copper foil tape and stick one onto each country you chose. Press firmly so it sticks well — this patch is what your finger will actually touch.
- Leave a little copper "tail" that reaches to the back of the board through a small poked hole
Wire each touch sensor
Behind the board, connect each copper tail to the SIG pad of one TTP223 touch sensor module using a short jumper wire or a soldered joint. Connect every sensor's VCC and GND to your shared power rail.
Connect the sensors to the Arduino
Run a wire from each sensor's SIG output to its own digital pin on the Arduino: D2 through D9, one per country, following the pin table above.
Wire the sound module and speaker
Connect the DFPlayer Mini's RX and TX pins to the Arduino as shown in the circuit diagram, then attach your small speaker to the DFPlayer's SPK pins. Slide in the microSD card once it has your audio files loaded (next step).
Record and load your country audio clips
Record (or find) an 8–15 second fact for each country. Name the files 0001.mp3, 0002.mp3, and so on, matching the track order used in the code below, then copy them onto the microSD card.
Wire the display and upload the code
Connect the I2C LCD's SDA and SCL pins to A4 and A5. Install the required libraries in the Arduino IDE, then upload the sketch from the next section.
Test every country, then mount it all
Touch each copper patch one at a time and confirm the right fact plays and the right text shows up. Once everything checks out, tuck the wiring neatly behind the board and close up the back panel.
Bring It To Life
The Arduino code
First, install two libraries from the Arduino IDE's Library Manager: DFRobotDFPlayerMini and LiquidCrystal_I2C. Then paste in this sketch.
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int NUM_COUNTRIES = 8;
const int touchPins[NUM_COUNTRIES] = {2, 3, 4, 5, 6, 7, 8, 9};
struct Country {
const char* name;
const char* capital;
const char* funFact;
int trackNumber; // matches 0001.mp3, 0002.mp3 ...
};
Country countries[NUM_COUNTRIES] = {
{"USA", "Washington D.C.", "Home of the Grand Canyon!", 1},
{"Brazil", "Brasilia", "The Amazon Rainforest is here!",2},
{"Egypt", "Cairo", "Land of ancient pyramids!", 3},
{"France", "Paris", "The Eiffel Tower lives here!", 4},
{"India", "New Delhi", "Birthplace of chess!", 5},
{"China", "Beijing", "Home of the Great Wall!", 6},
{"Australia", "Canberra", "Kangaroos hop free here!", 7},
{"Japan", "Tokyo", "Land of the Rising Sun!", 8}
};
int lastTouched = -1;
unsigned long lastTouchTime = 0;
const unsigned long debounceDelay = 800; // ms, avoids repeat triggers
void setup() {
Serial.begin(9600);
mySoftwareSerial.begin(9600);
for (int i = 0; i < NUM_COUNTRIES; i++) {
pinMode(touchPins[i], INPUT);
}
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Explorer Map");
lcd.setCursor(0, 1);
lcd.print("Touch a country!");
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println("DFPlayer not found - check wiring and SD card.");
}
myDFPlayer.volume(20); // 0 to 30
}
void loop() {
for (int i = 0; i < NUM_COUNTRIES; i++) {
if (digitalRead(touchPins[i]) == HIGH) {
bool isNewTouch = (i != lastTouched) ||
(millis() - lastTouchTime > debounceDelay);
if (isNewTouch) {
playCountry(i);
lastTouched = i;
lastTouchTime = millis();
}
}
}
}
void playCountry(int index) {
Country c = countries[index];
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(c.name);
lcd.setCursor(0, 1);
lcd.print(c.capital);
myDFPlayer.play(c.trackNumber);
Serial.print("Touched: ");
Serial.println(c.name);
Serial.println(c.funFact);
}
Want to add more countries? Add a row to the countries array, plug in a new touch sensor, and give it its own digital pin — just remember the Arduino Uno only has so many free pins, so past 10–12 sensors you'll want an analog multiplexer chip like a CD74HC4067.
If Something's Not Working
Quick troubleshooting
| Problem | Likely fix |
|---|---|
| Nothing happens when touched | Check the copper tape is really touching the sensor's SIG pad, and that GND is shared across all parts. |
| Wrong country plays | Double-check the digital pin number matches the order in the countries array. |
| No sound at all | Confirm the microSD card is formatted FAT32 and files are named 0001.mp3, 0002.mp3, etc. |
| Screen shows nothing | Try a different I2C address (0x3F is common too) and check SDA/SCL wiring. |
| Touch triggers on its own | Move wires away from each other — long unshielded wires can pick up noise. |
Preview The Experience
Try the map before you build it
Tap a country below to see exactly what your finished map will do.
🔊 On the real build, the speaker plays a voice clip at the same moment this screen updates.
Once It's Working
Level-up ideas
Common Questions
Frequently asked questions
Do I need to know how to code already?
No. The code in this guide is ready to paste in and upload as-is. You'll only need to edit the country names, facts, and pin numbers if you customize it.
Can I use a different microcontroller, like an ESP32?
Yes. An ESP32 works too and gives you extra pins plus Wi-Fi for future upgrades. The wiring logic stays the same; you'll just adjust pin numbers to match the ESP32's layout.
Why copper tape instead of just a push button?
Copper tape lets the whole country shape be "clickable," not just one small button, which feels far more magical when you touch anywhere inside a country's borders.
Can I use cardboard instead of foam board or plywood?
Yes, cardboard works fine for a first prototype. Foam board or plywood just holds up better over time and feels sturdier for repeated touching.
How many countries can this handle?
An Arduino Uno comfortably handles 8–10 touch sensors on its own digital pins. For more countries, add an analog multiplexer chip or step up to a board with more pins, like an Arduino Mega.
You just built a talking map
That's touch sensing, audio playback, a live display, and real code, all working together on something you can hang on your wall. Nice work, explorer.
🗺️ Project Complete
Comments
Post a Comment