User:E.zn/special issue X
Txx.uo
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
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
Perfboard prototype
.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
_ 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
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