User:E.zn/special issue X

From XPUB & Lens-Based wiki

Txx.uo

Txx.uo Final.jpeg
Txx.uo .gif

Txx.uo consolidates two contrasting radio frequency implementation modes: RFID reader scans the cards/objects containing RFID tags using radio waves and LCD screen displays a Q-code* [internationally established three-letter abbreviation used in radio communication].

*A particular Q-code denotes a question when it is followed by a question mark and references an answer [statement] when it's not:
QRT? : Shall I cease or suspend operation?
QRT : I am suspending operation.

The RFID technology is used for object identification, authentication and security reasons, whereas Q-code is transmitted on a specific radio frequency by a radio operator and can be intercepted by anyone, who is tuned in to the same frequency.

This module converts the data received from a scanned card into a sound• and binary code••. This Binary signal is then transfigured into LED••• blinking and is also funneled to another module through an output•• channel. Top row of an LCD screen displays a specific question from the list of a Q-code, depending on a knob position and when receiving•••• a signal from another module, a random Q-code answer is shown on the second row of the screen. All other textual output can be sent to another module via Tx•••••.

•D5 o1 out
•• D3 o2 out
•• LED 2 D7
••• D5 o1 out
•••• D8 o5 in
••••• Tx o3 out











Txx sc.png

Components and configuration


+ : Solder
> : Plug into

+ 15x1 female header [x2] -- PCB [Nano]
+ 15x1 male header [x2] -- Nano
+ 4x1 female header -- PCB [LCD1602-I2C]
+ 1602 I2C LCD display -- LCD1602-I2C
+ 8x1 Female Header -- PCB [RFID]
+ 8x1 male header -- RFID
+ 10k ohm potentiometer -- A1 P in
+ LED -- LED2 D7
+ 10k ohm resistor-- R1
+ 220 ohm resistor -- R3
+ 220 ohm resistor -- R3
+ 3.5mm mono jack socket -- D5 o1 out
+ 3.5mm mono jack socket -- D3 o2 out
+ 3.5mm mono jack socket -- T5 o3 out
+ 3.5mm mono jack socket -- A2 o4 out
+ 3.5mm mono jack socket -- D8 o5 in
+ 2 pins of 4-pin tactile push button switch -- Reset
+ 5x2 male header 🢒🢒 JP [bridge the second row by soldering them together]
+ Vactrol : place the heads of LED and LDR in a heat shrink tube. Heat up the tube and then:
_ + LED -- LED 1 [long leg of LED 🢒🢒 square hole]
_ + LDR -- LDR

> RFID 8x1 male header -- 8x1 11mm female header [bend the pins] -- 8x1 11mm female header -- 8x1 11mm female header [bend the pins] -- 8x1 female header.
> LCD -- 4x1 female header
> NANO -- 2 15x1 female headers



Printed Manual


Manual.jpg


Perfboard prototype


Txx.uo Prototype 1.jpg



.ino

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.

#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

const int RFIDled = 6;
const int RFIDSound = 5;
const int RFIDbin = 3;
const int signalIN = A0;
const int TextKnob = A1;
const int textSound = A2;
long randNumber;



void setup()
{
  Serial.begin(9600); // Initiate a serial communication
  SPI.begin(); // Initiate  SPI bus
  lcd.begin(16, 2); // initialize the lcd
  mfrc522.PCD_Init(); // Initiate MFRC522

  Serial.println();

  pinMode(RFIDled, OUTPUT);
  pinMode(RFIDSound, OUTPUT);
  pinMode(RFIDbin, OUTPUT);
  pinMode(signalIN, INPUT);
  pinMode(TextKnob, INPUT);
  pinMode(textSound, OUTPUT);
}

void readCard() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }

  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content = ""; // for tag + sound
  String binary = ""; // for binary + LED

  for (int i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte[i], DEC);
    content.concat(String(mfrc522.uid.uidByte[i], DEC));

    if (content.charAt(i) == '0') {
      tone(RFIDSound, 40, 2250);
      delay(100);
    }
    else if (content.charAt(i) == '1') {
      tone(RFIDSound, 15, 2250);
      delay(100);
    }
    else if (content.charAt(i) == '2') {
      tone(RFIDSound, 25, 1500);
      delay(100);
    }
    else if (content.charAt(i) == '3') {
      tone(RFIDSound, 17, 150);
      delay(100);
    }
    else if (content.charAt(i) == '4') {
      tone(RFIDSound, 30, 1000);
      delay(100);
    }
    else if (content.charAt(i) == '5') {
      tone(RFIDSound, 27, 1590);
      delay(100);
    }
    else if (content.charAt(i) == '6') {
      tone(RFIDSound, 28, 1500);
      delay(100);
    }
    else if (content.charAt(i) == '7') {
      tone(RFIDSound, 10, 1500);
      delay(100);
    }
    else if (content.charAt(i) == '8') {
      tone(RFIDSound, 13, 1050);
      delay(100);
    }
    else if (content.charAt(i) == '9') {
      tone(RFIDSound, 7, 1000);
      delay(100);
    }
  }

  for (int b = 0; b < mfrc522.uid.size; b++)
  {
    Serial.println(mfrc522.uid.uidByte[b], BIN);
    char r = mfrc522.uid.uidByte[b];

    for (int j = 8; j >= 0; j--) {
      if CHECK_BIT(r, j) {
        digitalWrite(RFIDled, HIGH);
        digitalWrite(RFIDbin, HIGH);
        delay(100);
      } else {
        digitalWrite(RFIDled, LOW);
        digitalWrite(RFIDbin, LOW);
        delay(100);
      }
      delay(100);
    }
  }
  Serial.println();
  delay(100);
}

//Q-code questions
const char *Qs[] = {
  "",
  "",
  "QRB?:How far are you from my station?",
  "QRL?:Are you busy?",
  "QRZ?:Who is calling me?",
  "QRH?:Does my frequency vary?",
  "QRI?:How is the tone of my transmission?",
  "QRK?:What is the readability of my signals?",
  "QRM?:Do you have interference?",
  "QRN?:Are you troubled by static noise?",
  "QRQ?:Shall I send faster?",
  "QRT?:Shall I cease or suspend operation?",
  "QRU?:Have you anything for me?",
  "QRV?:Are you ready?",
  "QRX?:Shall I standby?",
  "QSA?:What is the strength of my signals?",
  "QSB?:Are my signals fading?",
  "QSD?:Is my keying defective?",
  "QSL?:Can you acknowledge receipt?"
};

//Q-code answers/statements
const char *As[] = {
  "QRH:Your frequency varies.",
  "QRL:I am busy. Please do not interfere.",
  "QRM:I have interference.",
  "QRM:I am troubled by static noise.",
  "QRO:Please increase transmit power.",
  "QRQ:Please send faster.",
  "QRS:Please send more slowly",
  "QRT:I am suspending operation.",
  "QRU:I have nothing for you.",
  "QRV:I am ready.",
  "QRX:Please standby.",
  "QSB:Your signals are fading.",
  "QSD:Your keying is defective.",
  "QSK:I can hear you between my signals (while transmitting); break in on my transmission.",
  "QSL:I am acknowledging receipt.",
  "QSM:Repeat the last telegram which you sent me",
  "QSY:Please change transmission frequency.",
  "QSZ:Send each word or group twice."
};

void loop()
{
  readCard();
  int textnumber;
  int text = analogRead(TextKnob);
  textnumber = map(text, 1, 1023, 0, 18);

  if (textnumber > 1) { //when the knob is turned from the 'position 0'
    Serial.println(Qs[textnumber]);
    String question = Qs[textnumber];
    lcd.setCursor(0, 0); //Set the lcd cursor to the upper left corner
    lcd.print(Qs[textnumber]); //Display the specific Q-question on the fisrt row of LCD

    for (int positionCounter = 0; positionCounter < question.length(); positionCounter++) {
      lcd.scrollDisplayLeft(); //Q-question scrolls to the left
      delay(230);
    }
    char* specQs = Qs[textnumber];

    // loop over each character of question
    for (int a = 0; a < strlen(specQs); a++ ) {
      char c = specQs[a];
      //Serial.print(c);
      //Serial.print(" ");
      Serial.print(specQs[a], BIN);
      //Serial.println();

      // sonify the bits...
      for (int i = 7; i >= 0; i--) {
        if CHECK_BIT(c, i) {
          tone(textSound, 440, 100);
        } else {
          tone(textSound, 220, 100);
        }
        delay(100);
      }
    }
  }


  // give an answer
  randNumber = random(0, 17);
  int readSignal = digitalRead(signalIN);
  String randomQ = As[randNumber];

  if (readSignal) { //If the module receives a signal via A2 o4 input channel...
    Serial.println(As[randNumber]);
    lcd.setCursor(0, 1); //Set the lcd cursor to the lower left corner
    lcd.print(randomQ); //Displayes a random Q-answer from the answers array

    for (int counter = 0; counter < randomQ.length(); counter++) {
      lcd.scrollDisplayLeft(); //Q-answer dissapears in the left side of the LCD
      delay(230);
    }
  }
  delay(500);
}

Collaboration, Conflict & Consent

A two-day workshop with Eleanor Greenhalgh

Nor.gif

_ Applying various methods of decision-making and evaluating the outcomes.
_ Practicing listening in teams of three [each having a specific role].
_ Playing group games, like counting to 20.
_ Creating a consensual artwork.



Module

Building a module with a guest tutor Dennis de Bel

__ Voltage, Current, Resistance, and Ohm's Law

Referneces [Dennis]

The worst volume control UI in the world
Dark Patterns: User Interfaces Designed to Trick People

Sound

Sound / music / listening / methods with Olli Aarni

Sound-making.gif

References [Olli]

John Cage - Silence
Pauline Oliveros - Deep Listening - A Composer's Sound Practice
Mark Bain - Psychosonics and the Modulationof Public Space, On Subversive Sonic Techniques