Monday, September 8, 2025

Dravin_Audio_LED_model

 Link trained model:  https://teachablemachine.withgoogle.com/models/xn12VJXSr/


Trained Model HTML code : <div>Teachable Machine Audio Model</div>

<button type="button" onclick="init()">Start Recognition</button>
<button type="button" onclick="connect()">Connect to Arduino</button>
<div id="label-container"></div>

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.3.1/dist/tf.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/speech-commands@0.4.0/dist/speech-commands.min.js"></script>

<script type="text/javascript">
    const URL = "https://teachablemachine.withgoogle.com/models/xn12VJXSr/";
    let recognizer;
    let port, writer;

    async function createModel() {
        const checkpointURL = URL + "model.json";
        const metadataURL = URL + "metadata.json";

        recognizer = speechCommands.create("BROWSER_FFT", undefined, checkpointURL, metadataURL);
        await recognizer.ensureModelLoaded();
        return recognizer;
    }

    async function init() {
        recognizer = await createModel();
        const classLabels = recognizer.wordLabels();
        const labelContainer = document.getElementById("label-container");

        for (let i = 0; i < classLabels.length; i++) {
            labelContainer.appendChild(document.createElement("div"));
        }

        recognizer.listen(result => {
            for (let i = 0; i < classLabels.length; i++) {
                const classPrediction = classLabels[i] + ": " + result.scores[i].toFixed(2);
                labelContainer.childNodes[i].innerHTML = classPrediction;
            }

            // Decide based on prediction
            const noiseScore = result.scores[0];
            const gunshotScore = result.scores[1];

            if (gunshotScore > 0.75) {
                sendToArduino("gunshot\n");
            } else if (noiseScore > 0.75) {
                sendToArduino("noise\n");
            }
        }, {
            probabilityThreshold: 0.75,
            overlapFactor: 0.5
        });
    }

    // Connect to Arduino via Web Serial API
    async function connect() {
        try {
            port = await navigator.serial.requestPort();
            await port.open({ baudRate: 9600 });
            writer = port.writable.getWriter();
            alert("Connected to Arduino!");
        } catch (err) {
            console.error("Connection failed: ", err);
        }
    }

    async function sendToArduino(message) {
        if (writer) {
            const encoder = new TextEncoder();
            await writer.write(encoder.encode(message));
        }
    }
</script>


Arduino code:

int redLED = 7;   // Red LED for noise
int greenLED = 8; // Green LED for gunshot

void setup() {
  pinMode(redLED, OUTPUT);
  pinMode(greenLED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    String command = Serial.readStringUntil('\n');
    command.trim();

    if (command == "noise") {
      digitalWrite(redLED, HIGH);
      digitalWrite(greenLED, LOW);
    }
    else if (command == "gunshot") {
      digitalWrite(redLED, LOW);
      digitalWrite(greenLED, HIGH);
    }
    else {
      digitalWrite(redLED, LOW);
      digitalWrite(greenLED, LOW);
    }
  }
}




No comments:

Post a Comment

MUD Three Mode operation Manual Automatic GPS

 Code for three mode operation: /*   3-Mode Headlight Controller   - Manual mode (driver uses a toggle to pick high/low)   - Auto mode (LDR...