Ambassador Bridge

The Ambassador Bridge connects

Detroit, Michigan, United States, and Windsor, Ontario, Canada.

This project with its responsive lighting aims to encourage travelers to walk and bike across the bridge rather than using vehicles that create air pollution.


Project Goal

The Ambassador Bridge spans 1.42 miles in length. On average, a car emits 600 gm of CO2 per trip across the bridge, which amounts to 0.3 metric tons of CO2 emissions per year, assuming a commuter travels across the bridge 10 times per week, 50 weeks per year on average. So, if 500 pedestrians or bicyclists cross the bridge, we have achieved CO2 emission savings to the tune of 0.3 metric tons annually.

A sensor on the entry gate to walk or bike across the bridge could count trips taken. Each time the whole NeoPixel strip lights up end-to-end, an LCD will display the number of equivalent cars that are no longer commuting across the bridge and hence substantial pollution of the environment is avoided.

Components used for the project



RFID Sensor 

(Radio Frequency Identication)

Commands and Interaction



int count = 0;

int trip= 0;


#include <Wire.h>

#include <SPI.h>

#include <Adafruit_PN532.h>

#include <LiquidCrystal.h>

#include <Adafruit_NeoPixel.h>

// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);


#define PIN 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(75, PIN, NEO_GRB + NEO_KHZ800);


#define PN532_SCK  (2)

#define PN532_MOSI (3)

#define PN532_SS   (4)

#define PN532_MISO (5)


// If using the breakout or shield with I2C, define just the pins connected

// to the IRQ and reset lines.  Use the values below (2, 3) for the shield!

#define PN532_IRQ   (2)

#define PN532_RESET (3)  // Not connected by default on the NFC Shield



// Or use this line for a breakout or shield with an I2C connection:

Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);


#if defined(ARDUINO_ARCH_SAMD)

// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!

// also change #define in Adafruit_PN532.cpp library file

   #define Serial SerialUSB


int car;


void setup(void) {

  #ifndef ESP8266

    while (!Serial); // for Leonardo/Micro/Zero





  lcd.begin(16, 2);

  // Print a message to the LCD.

  lcd.print("CO2 Emission");





  uint32_t versiondata = nfc.getFirmwareVersion();

  if (! versiondata) {

    Serial.print("Didn't find PN53x board");

    while (1); // halt


  // Got ok data, print it out!

  Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 

  Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 

  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);


  // configure board to read RFID tags



  Serial.println("Waiting for an ISO14443A Card ...");




Setting up NeoPixels to light up

Connecting RFID Sensor with Arduino and NeoPixels

Showing the number of pedestrians or bicyclists that use their passport to cross the bridge 

Interactive Prototype

The model displays an intuitive lightning scheme that would encourage travelers to walk or bicycle across the bridge. Each light represents 6 trips by pedestrian or cyclist, and the whole Neo Pixel strip presents 500 trips.

RFID sensors are used to count trips and each time the whole NeoPixel strip lights up end-to-end, an LCD will display the number of equivalent cars that are no longer commuting across the bridge and hence substantial

pollution of the environment is avoided.