Abstract

Si echamos un vistazo al top 50 de Spotify, podremos observar lo normalizados que tenemos los discursos machistas al encontrarnos una gran mayoría de hombres cis cantando sobre culos, putas, tetas y gatas.

Tanto esta música como este uso del lenguaje, se encuentran en todas partes, difundiendo un mensaje dañino. Delante de esta problemática presento un artefacto crítico en forma de bolso capaz de identificar ciertos términos empleados tanto en las letras de las canciones como, por ejemplo, en el acoso callejero y censurarlo. A través de un micrófono, se detectan ciertos términos usados de manera denigrante, para luego reproducir a todo volumen una canción donde una cantante femenina esté utilizando ese mismo término pero resignificandolo de manera positiva.

El objetivo principal de esta propuesta es censurar los discursos machistas y generar conciencia sobre su existencia. El efecto sorpresa y el humor son utilizados estratégicamente para llamar la atención y cortar de manera obvia el discurso perjudicial.

Photos

micro bolso.png

bolso_de frente.png

calle_bolso.png

altavoz.png

vicky_y_bolso.png

vicky_altavoz.png

Video

https://youtu.be/onRJd96_Nzc

Ideación y construcción:

Textos

Links a tutoriales:

Conexiones:

Captura de pantalla 2023-05-13 a las 13.56.58.png

Código

////////////////CÓDIGO PARA RECONOCER LAS PALABRAS "PUTA", "CULO" Y "PARA", PARA REPRODUCIR DOS CANCIONES O PARA PARAR LA MÚSICA////////////////

//Incluir librerias para el reconocimiento de voz
#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

//Dónde está conectado el módulo de reconocimiento de voz (en este caso, el 2 va al TX del módulo y el 3, al RX
VR myVR(2, 3);   

//Guarda las grabaciones 
uint8_t records[7]; 
uint8_t buf[64];

//Nombres de los cómandos guardados 
#define culo    (0)
#define Culo   (1)
#define culoo   (2)
#define para   (3)
#define Putac   (4)
#define putac   (5)
#define putaac   (6)

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX

DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void printSignature(uint8_t *buf, int len)
{
  int i;
  for (i = 0; i < len; i++) {
    if (buf[i] > 0x19 && buf[i] < 0x7F) {
      Serial.write(buf[i]);
    }
    else {
      Serial.print("[");
      Serial.print(buf[i], HEX);
      Serial.print("]");
    }
  }
}

void printVR(uint8_t *buf)
{
  Serial.println("VR Index\\tGroup\\tRecordNum\\tSignature");

  Serial.print(buf[2], DEC);
  Serial.print("\\t\\t");

  if (buf[0] == 0xFF) {
    Serial.print("NONE");
  }
  else if (buf[0] & 0x80) {
    Serial.print("UG ");
    Serial.print(buf[0] & (~0x80), DEC);
  }
  else {
    Serial.print("SG ");
    Serial.print(buf[0], DEC);
  }
  Serial.print("\\t");

  Serial.print(buf[1], DEC);
  Serial.print("\\t\\t");
  if (buf[3] > 0) {
    printSignature(buf + 4, buf[3]);
  }
  else {
    Serial.print("NONE");
  }
  Serial.println("\\r\\n");
}

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

//Código para ver en la consola el estado de conexión del DFP player y comprobar que todo está bien
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true) {
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));
  myDFPlayer.volume(30);
  myVR.begin(9600);
  Serial.begin(115200);

//Código para ver en la consola el estado de conexión del VRM y comprobar que todo está bien

  Serial.println("Elechouse Voice Recognition V3 Module");
//Mirar si está bien conectado
  if (myVR.clear() == 0) {
    Serial.println("Recognizer cleared.");

  } else {
    Serial.println("Not find VoiceRecognitionModule.");
    Serial.println("Please check connection and restart Arduino.");
    while (1);
  }
//Mirar si se han cargado bien los comandos
  if (myVR.load((uint8_t)culo) >= 0) {
    Serial.println("culo");
  }

  if (myVR.load((uint8_t)Culo) >= 0) {
    Serial.println("Culo");
  }

  if (myVR.load((uint8_t)culoo) >= 0) {
    Serial.println("culoo");
  }
  if (myVR.load((uint8_t)para) >= 0) {
    Serial.println("para");
  }
  if (myVR.load((uint8_t)Putac) >= 0) {
    Serial.println("Putac");
  }
  if (myVR.load((uint8_t)putac) >= 0) {
    Serial.println("putac");
  }
  if (myVR.load((uint8_t)putaac) >= 0) {
    Serial.println("putaac");
  }

}

void loop()
{

  int ret;
  ret = myVR.recognize(buf, 50);
  if (ret > 0) {
    switch (buf[1]) {

//Empiezas a establecer los "if" de cada comando que se escuche
      case culo:

        Serial.println("se escuchó culo");
        myDFPlayer.play(2);

        break;
      case Culo:
        Serial.println("se escuchó Culo");
        myDFPlayer.play(2);

        break;
      case culoo:

        Serial.println("se escuchó culoo");
        myDFPlayer.play(2);

        break;

        Serial.println("Record function undefined");
        break;
      case para:

        Serial.println("se escuchó para");
        myDFPlayer.pause();

        break;
      case Putac:

        Serial.println("se escuchó Putac");
        myDFPlayer.play(1);

        break;
      case putac:

        Serial.println("se escuchó putac");
        myDFPlayer.play(1);

        break;
      case putaac:

        Serial.println("se escuchó putaac");
        myDFPlayer.play(1);

        break;

      default:
        Serial.println("Record function undefined");
        break;
    }
    /** voice recognized */
    printVR(buf);
  }
}

Para la expo, añadí un botón conectado al pin 5 que paraba cualquier canción que estuviera sonando. Lo he conectado usando el tipo de conexión pull-up (el de la izquierda)