NFC Coin Reminders
Made by faristiz · UNLISTED (SHOWN IN POOLS)
Made by faristiz · UNLISTED (SHOWN IN POOLS)
To imbue a physical element to the digital process of creating reminders and explore the consequences of this on recollection.
Created: February 13th, 2019
Write about the big ideas behind your project? What are the goals? Why did you make it? What are your motivations?
With the advent of digital technology and electronic information systems, much our daily interaction with the world has become virtual from business transactions to shopping and entertainment. As physical beings, this has a profound influence on the way we learn and perceive everyday moments. When experiences become virtual, they become easier to forget. They lose the significance they would possess in a more tactile environment. After all, sight and hearing, the senses dominantly used in our virtual interactions, are only two of five senses, and our mind uses these five in unison to help solidify our experiences into long-term memory. Even activities that are non-digital and yet seem purely visual, like reading a book or newspaper, have elements of other sensory input such as the tactile qualities and smell of the pages. These small details add context to our experiences, and context is very important in the process of linking new memories to preexisting ones. In a world without smell, taste, or touch, memories become more cursory and fleeting. This invention imbues some of that digital media, in this case, reminders, with a dimension of physical interaction via the use of NFC tagged objects. Through this project, we hope to determine the effects of physical interaction on the mind's ability to solidify memories of experiences with digital media.
Describe your experience/working prototype: What did you create, how, etc.? What tools and technologies were involved? Include appropriate content and illustration (e.g. a concept video, a video of the device in operation, diagrams, code, etc.)
My prototype utilizes the following components:
-1 LCD screen
-Arduino UNO
-1 Potentiometer
-1 Adafruit PN532 NFC/RFID Controller Shield for Arduino
-3D Printed PLA coin tag enclosures.
-Circular adhesive rewritable NFC tag
-Wires
The device works as follows: An NFC tag-embedded coin is placed on the Adafruit NFC shield. The device then reads and reports any existing content stored in the tag via the serial monitor and LCD screen. If the tag already has a message, then the device asks the user whether they wish to erase the existing content. The user responds via the serial monitor. Once the tag is empty, the user is given the option to write new content to the coin. The user can input both text and URL links. Once the information has been written on the tag, it is ready to be used. Most smartphones are NFC-enabled and can be used to read NFC tags simply by tapping the tag on the phone. Alternatively, the encoding device can also be used to read the information. Below is a video demonstrating how the device is operated along with screenshots of the NFC readout on an Android phone and a copy of the code:
[code]
#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
#include <NfcAdapter.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
String incoming="";
String incomings="";
int payloadLength=0;
int t=0;
int X=1;
boolean newData = false;
PN532_I2C pn532_i2c(Wire);
NfcAdapter nfc = NfcAdapter(pn532_i2c);
void setup() {
Serial.begin(9600);
nfc.begin();
lcd.begin(16, 2);
lcd.setCursor(0,0);
}
void loop() {
Serial.println("\nScan NFC tag on the NFC Shield\n"); // Command so that you an others will know what to do
lcd.clear();
lcd.setCursor(0,0);
lcd.write("Scan NFC tag on");
lcd.setCursor(0,1);
lcd.write("the NFC Shield");
if (nfc.tagPresent())
{
NfcTag tag = nfc.read();
//Serial.println(tag.getTagType());
Serial.print("UID: ");Serial.println(tag.getUidString()); // Retrieves the Unique Identification from your tag
if (tag.hasNdefMessage()) // If your tag has a message
{
NdefMessage message = tag.getNdefMessage();
Serial.print("\nThis Message in this Tag is ");
Serial.print(message.getRecordCount());
Serial.print(" NFC Tag Record");
if (message.getRecordCount() != 1) {
Serial.print("s");
}
Serial.println(".");
//lcd.write(".");
// If you have more than 1 Message then it wil cycle through them
int recordCount = message.getRecordCount();
for (int i = 0; i < recordCount; i++)
{
Serial.print("\nNDEF Record ");Serial.println(i+1);
NdefRecord record = message.getRecord(i);
payloadLength = record.getPayloadLength();
byte payload[payloadLength];
record.getPayload(payload);
if(payloadLength>0 && X==1){
X=0;
}
String payloadAsString = ""; // Processes the message as a string vs as a HEX value
for (int c = 0; c < payloadLength; c++) {
payloadAsString += (char)payload[c];
}
Serial.print(" Information (as String): ");
Serial.println(payloadAsString);
lcd.clear();
lcd.setCursor(0,0);
lcd.write("Information:");
lcd.setCursor(0,1);
delay(500);
lcd.clear();
lcd.setCursor(4,0);
lcd.print(payloadAsString);
while(t<25){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
String uid = record.getId();
//if (uid != "") {
//Serial.print(" ID: ");
//Serial.println(uid); // Prints the Unique Identification of the NFC Tag
//lcd.write(" ID: ");
// lcd.write(uid);
// }
}
if(X==0){
Serial.println("\nDo you wish to erase this tag?(Y/N)\n");
lcd.clear();
lcd.setCursor(4,0);
lcd.write("Do you wish to erase this tag?(Y/N)");
while(t<25){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
while(Serial.available()==0){
}
incoming=Serial.readString();
if(incoming =="Y\n"){
Serial.println("\nPlace tag on NFC shield.\n");
lcd.clear();
lcd.write("Place tag on NFC shield");
while(t<15){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
while(nfc.tagPresent()==0){
}
eraseNFC();
Serial.println("\nDo you wish to write to this tag?(Y/N)\n");
lcd.clear();
lcd.setCursor(2,0);
lcd.write("Do you wish to write to this tag?(Y/N)");
while(t<25){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
while(Serial.available()==0){
}
incoming=Serial.readString();
if(incoming == "Y\n"){
writeNFC();
}
else{
Serial.println("\nRemove tag.\n");
lcd.clear();
lcd.write("Remove tag.");
}
}
else{
Serial.println("\nRemove tag.\n");
lcd.clear();
lcd.write("Remove tag.");
}
}
else{
Serial.println("\nDo you wish to write to this tag?(Y/N)\n");
lcd.clear();
lcd.setCursor(2,0);
lcd.write("Do you wish to write to this tag?(Y/N)");
while(t<25){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
while(Serial.available()==0){
}
incoming=Serial.readString();
if(incoming == "Y\n"){
eraseNFC();
writeNFC();
}
else{
Serial.println("\nPlease remove tag.\n");
lcd.clear();
lcd.write("Please remove tag.");
}
}
}
}
delay(3000);
}
void writeNFC() {
if (nfc.tagPresent()) {
NdefMessage message = NdefMessage();
Serial.println("Write a message:");
lcd.clear();
lcd.write("Write a message:");
while(Serial.available()==0){
}
Serial.print("\nPlease place tag on NFC shield.\n");
lcd.clear();
lcd.setCursor(4,0);
lcd.write("Please place tag on NFC shield.");
while(t<20){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
while(nfc.tagPresent()==0){
}
message.addTextRecord(Serial.readString()); // Text Message you want to Record
Serial.println("\nDo you wish to add a link?(Y/N)\n");
lcd.clear();
lcd.setCursor(4,0);
lcd.write("Do you wish to add a link?(Y/N)");
while(t<25){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
while(Serial.available()==0){
}
incoming=Serial.readString();
if(incoming=="Y\n"){
Serial.println("\nAdd URL:");
lcd.clear();
lcd.write("Add URL:");
while(Serial.available()==0){
}
Serial.println("\nPlease place tag on NFC shield.\n");
lcd.clear();
lcd.setCursor(2,0);
lcd.write("Place tag on NFC shield.");
while(t<17){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
while(nfc.tagPresent()==0){
}
message.addUriRecord(Serial.readString());
Serial.print("here");
}
boolean success = nfc.write(message);
if (success) {
Serial.println("Good Job, now read it with your phone!"); // if it works you will see this message
lcd.clear();
lcd.setCursor(2,0);
lcd.write("Good Job, now read it with your phone!");
while(t<25){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
}
else {
Serial.println("Write failed"); // If the the rewrite failed you will see this message
lcd.clear();
lcd.setCursor(4,0);
lcd.write("Write failed");
}
}
delay(3000);
}
void eraseNFC() {
if (nfc.tagPresent()) {
bool success = nfc.erase();
if (success) {
Serial.println("\nSuccess, tag contains an empty record.");
lcd.clear();
lcd.setCursor(4,0);
lcd.write("Success,tag contains an empty record.");
while(t<25){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
}
else {
Serial.println("\nUnable to erase tag.");
lcd.clear();
lcd.setCursor(4,0);
lcd.write("\nUnable to erase tag.");
while(t<37){
lcd.scrollDisplayLeft();
t++;
delay(250);
}
t=0;
}
}
}
[/code]
Click to Expand
Describe theory, concepts, and research you have performed. Describe the prior work, ideas and projects that influenced your design. What work informed this idea.
This project was inspired by the work of David Bishop in the 1990s with his idea of the marble answering machine and the more recent invention by Jordi Parra called the Spotify Box. Both inventions seek to embed physical experiences in commonplace digital interactions. The marble answering machine (shown below) works as follows: when a voice message is received, the machine releases a marble into a groove (Image B). Each message is coded to a particular colored marble. To play the message, the user places the particular marble on a small depression (Image D) and can immediately stop the playback by removing the marble. “Users can either keep messages by holding on to the marbles (Image E), or delete them by putting the marbles back into the answering machine through a hole (Image F).” (Charlier, 2015) In this way, messages are made physical through their connection with a particular marble. This approach to an answering machine not only improves the recollection of messages, but also happens to be very intuitive and easy to operate.
Jordi Parra's Spotify Box (shown below), works under similar principles. Magnetic tags linked to playlists on Spotify, are placed on the circular region at the front of the device which then executes the playlist. One can label or draw on these tags much like with CDs and tape recordings. “This gives an analog quality to the interactions with digital music.” (Charlier, 2015) By giving physical representation to digital elements, these technologies make everyday experiences more direct and memorable.
Describe how you arrived out the outcome. What iterations, refinements, design decisions and changes were made?
The first iteration of the device wrote only pre-selected messages to the tags. This was followed by the implementation of user-defined messages using the serial monitor as the interface. This was made possible by the use of the Serial.readString() function to pull input from the serial monitor. At this point, only text input was enabled. This was shortly followed by the integration of URL writing capabilities. The final iteration of the device included the LCD as an additional display mostly for the purposes of the in-class demo.
What questions remain to be addressed or questions about memory did this exploration raise for you. What are the things we should pay attention to/discuss in class for future explorations?
In terms of our exploration of how physical interfaces affect memory, I would like to experiment and compare the reactions of someone who uses this device to store their reminders versus someone who takes the mainstream approach of storing their reminders on their mobile phone. It will be interesting to see if this device improves recollection over the mainstream method or whether the effect is negligible, which will offer insights into our ability to operate in a virtual environment.
Reflect on making this project. What did you learn? What would you do differently? Did you get where you wanted to? If not, why not? What do you need to get there, etc?
A lot of what I learned in this project has been more on the technical side of things such as how to read and write to NFC tags and how to manage inputs and outputs from and to the serial manager. In the process of trying to use the Photon to implement wireless communication with my phone, I also learned about the limitations of the Photon's cloud-based operation when it comes to enabling direct wireless communications with another device.
There are a couple of elements that I would like to improve/implement in future iterations of this device. For instance, the prototype is currently very character-limited. Further work needs to be done on the code to eliminate this drawback. Furthermore, I envision the final product lacking the need for prompted questions. Instead, it will require the user simply input their reminder/event. The device will then parse the input for text and links, and integrate these into an NFC tag without the need for user intervention. This will require the implementation of wireless communication, mobile app development, and the design of the mechanism for autonomous NFC encoding. I have already started working on enabling wireless communication between the device and a mobile phone. The first iteration of the final product will revolve around BlueTooth communication via the ESP32 Feather Board. It will be short-range, but will act as a springboard for developing long-range WiFi communication capabilities.
Reference any sources or materials used in the documentation or composition.
“Spotify Box.” Vimeo, 4 Feb. 2019, vimeo.com/21387481.
Charlier, Martin. “Interface and Interaction Design.” O'Reilly | Safari, O'Reilly Media, Inc., 27 Sept. 2015, www.oreilly.com/ideas/interface-and-interaction-design.
“Language Reference.” Arduino - Introduction, www.arduino.cc/reference/en/#page-title.
This project is only listed in this pool. Be considerate and think twice before sharing.
This 15-week course introduces students to responsive mobile environments and encourages them to explore speculative terrains that intersect art, technology and design and space. Iteratively, intro...more
To imbue a physical element to the digital process of creating reminders and explore the consequences of this on recollection.