SJSD - blogg og notater om mine DIY

Arduino, lydsensor og 433MHz kommunikasjon

Dette er en del av et litt større prosjekt jeg jobber med. Det er ikke sikkert dette er den endelige løsningen for prosjektet mitt, men det er en del av det å prøve å feile.

Hardware

I oppsettet har jeg to Arduinoer, en lydsensor, et sett 433Mhz RF (sender og mottaker) og LED. Jeg har da «krydret» det med å bruke en Adafruit Neopixel stick.

Lydsensoren er av en type som kun oppfatter volum og ikke type lyd. Så om det er ei bjelle, en hund som bjeffer eller rock ‘n’ roll så har det ikke noe å si. Man kan via et potmeter på sensoren justere hvor høy lyden må være for at den skal reagere. Når lydsensoren oppfatter en lyd og den lyden er høy nok så gir den fra seg et digital signal (HIGH eller LOW). Så sensoren blir koblet til en digital inngang på Arduinoen.

Slik fungerer det

Lydsensoren oppfatter en lyd (som er høy nok i volum) og gir fra seg et digitalt signal. Arduinoen oppfatter signalet og sender så en beskjed via 433MHz-senderen.

433MHz-mottakeren tar imot det trådløse radiosignalet. Arduinoen den er koblet til oppfatter dette og blinker så med LED-lyset/ene.

Video

Her er en kort video som viser hvordan det fungerer. NB! Dette er første gang jeg spiller inn en video hvor jeg snakker. Den er uforbredt og klønete. Jeg filmet med mobiltelefonen og lyden ble veldig lav. Så husk å skru ned lyden igjen etterpå.

I videoen så ser du at jeg har koblet på et LED-lys på koblingsbrettet for senderen. Dette lyser når Arduinoen har mottatt et signal og sender et signal videre. Jeg brukte dette lyset til «feilsøking» når jeg jobbet med det. Det samme har jeg koblet på mottakeren. Et LED-lys som blinker når den mottar et signal.

Koblinger

Jeg har ingen skjema over koblingene siden Fritzing mangler flere at komponentene jeg har brukt. Så her kommer en kort skriftlig forklaring.

Lydsensoren

Lydsensoren er koblet til 5V, GND og D2.

RF-senderen

RF-senderen er koblet til 5V, GND og D12.

LED på Arduino en som sender

LED er koblet til D7 og GND med en motstand i mellom.

RF-mottaker

RD-mottaker er koblet til 5V, GND og D11.

LED på Arduino med mottaker

LED er koblet til D13 og GND.

Kode

I koden under har jeg forenklet den og fjernet den delen som går på Neopixel. En enkel måte å bruke 433MHz sender og mottaker på er å bruke et bibliotek.

RadioHead

RadioHead gjør det enkelt å sette opp og kommunisere med 433MHz-enhetene. Det finnes flere tilsvarende bibliotek. Så du får bruke det du selv føler er best.

Trenger du en rask innføring så kan jeg anbefale denne guiden.

Kode for lydsensor og sender

#include <RH_ASK.h>
#include <SPI.h>
RH_ASK driver;

int ledPin = 7;
int inPin = 2;
int volume = 0;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(inPin, INPUT);
  digitalWrite(ledPin, LOW);
    if (!driver.init())
         Serial.println("init failed");
}

void loop() {
  volume = digitalRead(inPin);
  if (volume > 0) {
    digitalWrite(ledPin, HIGH);
    const char *msg = "Hello World!";
    driver.send((uint8_t *)msg, strlen(msg));
    driver.waitPacketSent();
    delay(1000);
    digitalWrite(ledPin,LOW);
  }
}

Kode for mottaker og Neopixel

// Signal inn fra mottaker skal på pin 11.
#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile
RH_ASK driver;
// Led for å blink når signal mottatt
int led = 13;
void setup()
{
    Serial.begin(9600); // Debugging only
    pinMode(led, OUTPUT);

    if (!driver.init())
         Serial.println("init failed");
}
void loop()
{
    uint8_t buf[12];
    uint8_t buflen = sizeof(buf);
    
    if (driver.recv(buf, &buflen))
    {
      Serial.println((char*)buf);
      digitalWrite(led, HIGH);
      delay(2000);
      digitalWrite(led, LOW);      
    }
}