Sending text over infrared: Difference between revisions

From XPUB & Lens-Based wiki
Line 11: Line 11:


===== Components =====
===== Components =====
2 Arduino UNO boards (provided by Soda)


Wires and 2 wiring boards (provided by Soda & from the [https://xml.xpub.nl/ XML])
* 2 Arduino UNO boards (provided by Soda)
 
* Wires and 2 wiring boards (provided by Soda & from the [https://xml.xpub.nl/ XML])
A keyboard that uses the '''PS2''' protocol [not USB] (from the [https://xml.xpub.nl/ XML])
* A keyboard that uses the '''PS2''' protocol [not USB] (from the [https://xml.xpub.nl/ XML])
 
* 1602A display (from the [https://xml.xpub.nl/ XML])
1602A display (from the [https://xml.xpub.nl/ XML])
* IR receiver TSOP38238 (bought off from [https://elektronicavoorjou.nl/product/ir-sensor-tsop38238/ here])
 
* IR sender (from the interaction station)
IR receiver TSOP38238 (bought off from [https://elektronicavoorjou.nl/product/ir-sensor-tsop38238/ here])
* Various resistors (from the [https://xml.xpub.nl/ XML])
 
* LED light (from the [https://xml.xpub.nl/ XML])
IR sender (from the interaction station)
 
Various resistors (from the [https://xml.xpub.nl/ XML])  
 
LED light (from the [https://xml.xpub.nl/ XML])


===== Tools =====
===== Tools =====
[https://www.arduino.cc/en/software/ Arduino IDE]


* + [https://github.com/Arduino-IRremote/Arduino-IRremote IR Remote] library  
* [https://www.arduino.cc/en/software/ Arduino IDE]
** + [https://github.com/Arduino-IRremote/Arduino-IRremote IR Remote] library


Soldering wand
* Soldering wand


==== IR sender ====
==== IR sender ====

Revision as of 23:56, 12 February 2026

Project by Soda & Ema

The idea

to send text messages in real time over infrared waves, and to see what happens when the signal gets disturbed.

The intention is to set up this project in a public space, so people can use it both passively and actively. Passively: by walking in between the IR sender and receiver - Actively: by typing a message and reading what gets delivered.

People that passively walks across the IR signal will disturb the transmission of the message, letting who's on the other side interpret what the original message was. With that, we'd like to shine an interest in the materiality of forms of communication, which usually happens without being aware of their infrastructure. The ethereal "immateriality" of the IR waves becomes tangible and something simple as like sending a simple text message becomes questioned.

The process

Components
  • 2 Arduino UNO boards (provided by Soda)
  • Wires and 2 wiring boards (provided by Soda & from the XML)
  • A keyboard that uses the PS2 protocol [not USB] (from the XML)
  • 1602A display (from the XML)
  • IR receiver TSOP38238 (bought off from here)
  • IR sender (from the interaction station)
  • Various resistors (from the XML)
  • LED light (from the XML)
Tools
  • Soldering wand

IR sender

abc

the code [9600 Baud]

#include <PS2Keyboard.h>
#include <IRremote.hpp>

const int DataPin = 3;
const int ClockPin = 2;
const int IR_SEND_PIN = 9;
const int SendLEDPin = 8;   // NEW LED pin

PS2Keyboard keyboard;

void setup() {
  Serial.begin(9600);

  keyboard.begin(DataPin, ClockPin);
  IrSender.begin(IR_SEND_PIN);

  pinMode(SendLEDPin, OUTPUT);
  digitalWrite(SendLEDPin, LOW);

  Serial.println("Keyboard to IR Sender Ready");
}

void loop() {

  if (keyboard.available()) {

    char c = keyboard.read();

    Serial.print("Sending character: ");
    Serial.println(c);

    // Turn LED ON
    digitalWrite(SendLEDPin, HIGH);

    // Send via IR
    IrSender.sendNEC(0x00, (uint8_t)c, 0);

    delay(60);   // short visible flash

    // Turn LED OFF
    digitalWrite(SendLEDPin, LOW);

    delay(20);   // small spacing delay
  }
}


IR receiver

the code [9600 Baud]

#include <IRremote.hpp>
#include <LiquidCrystal.h>

const int IRReceiverPin = 6;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int cursorPosition = 0;

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(IRReceiverPin);

  lcd.begin(16, 2);
  lcd.clear();

  Serial.println("IR Receiver Ready");
}

void loop() {

  if (IrReceiver.decode()) {

    if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT) {
      IrReceiver.resume();
      return;
    }

    uint8_t receivedCommand = IrReceiver.decodedIRData.command;

    if (receivedCommand >= 32 && receivedCommand <= 126) {

      char receivedChar = (char)receivedCommand;

      Serial.print("Received ASCII: ");
      Serial.print(receivedCommand);
      Serial.print("  Character: ");
      Serial.println(receivedChar);

      lcd.setCursor(cursorPosition, 0);

      if (cursorPosition < 16) {
        lcd.setCursor(cursorPosition, 0); 
      } else {
        lcd.setCursor(cursorPosition - 16, 1);
      }

      lcd.print(receivedChar);

      cursorPosition++;

      if (cursorPosition >= 32) {
        cursorPosition = 0;
      }
    }

    IrReceiver.resume();
  }
}