433Mhz trip wire sensor system: Difference between revisions

From Pessin randon wiki
Created page with "== Vastaanottimen käyttö == Tämä laite vastaanottaa 433 MHz -radioviestejä, joissa on kiinteitä DIP-koodeja. Jokaisella DIP-koodilla on pysyvä '''ID-numero (1–16)'''. Näytöllä näkyy aina yksi koodi kerrallaan. thumb|Vastaanottimen oled näyttö === Mitä näyttö kertoo? === Näyttö on jaettu kahteen osaan: * Vasemmassa reunassa (suurena): ** '''ID-numero''' (esim. <code>5</code>) ** '''Huutomerkki <code>!</code>''' näkyy, jo..."
 
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Vastaanottimen käyttö ==
Järjestelmä on suunniteltu tilanteisiin, jossa halutaan ilmoitus jostain mekaanisesta liikkeestä tai kulusta. Lähettimestä voidaan säätää lähetystunnust 0-15 välille säädettävissä. Vastaanotin lukee radioviestin ja näyttää sen näytöltä ja laskee milloin lähetin on viimeksi vastaanottanut kyseisen ID numeron.  
Tämä laite vastaanottaa 433 MHz -radioviestejä, joissa on kiinteitä DIP-koodeja. Jokaisella DIP-koodilla on pysyvä '''ID-numero (1–16)'''. Näytöllä näkyy aina yksi koodi kerrallaan.
[[File:Vastaanotin-oled.jpg|thumb|Vastaanottimen oled näyttö]]
=== Mitä näyttö kertoo? ===
Näyttö on jaettu kahteen osaan:


* Vasemmassa reunassa (suurena):
== Vastaanotinyksikkö ==
** '''ID-numero''' (esim. <code>5</code>)
** '''Huutomerkki <code>!</code>''' näkyy, jos koodi on '''aktiivinen''' (viesti saatu viimeisen 5 minuutin aikana)


* Oikeassa reunassa (pienellä tekstillä):
=== Vastaanottimen käyttö ===
# '''Ylärivi:'''  Esim. <code>2/(3)/[5]</code>
Vastaanotin vastaanottaa radiolähetystä, jossa mukana tarkistussuma, sekä lähettimen ID sekä näyttää sen näytöllä saapumisjärjestyksessä vanhimmasta uusimpaan. Lähetin päivittää myös ajan milloin ID on lähetetty viimeksi.  
#* <code>2</code> = aktiivisten lähetysten määrä
==== Mitä näyttö kertoo? ====
#* <code>(3)</code> = passiivisten lähetysten määrä (viesti yli 5 min vanha)
[[File:V2.screen.ids.jpg|thumb|Näytöllä näkyvät ID:t suurina, kun näytössä on 1-3 ID:tä näkyvillä.]]
#* <code>[5]</code> = kaikkien vastaanotettujen lähetyksien määrä
Näyttö näyttää kaikki sen hetken luletut ID:t. Mikäli ID:n vastaanotosta on yli tunti häviää se näytöstä. Näyttö päivittyy 2,5 sekunnin välein. Jokaisella näytön päivityssyklillä näytön vasemmassa alareunassa välkkyy piste, josta voit tarkistaa, että järjestelmä on vielä käyttökuntoinen.
# '''Toinen rivi (vain jos koodi on passiivinen):'''
#* Aika viimeisestä viestistä minuutteina (esim. <code>17m</code>)
# '''Kolmas rivi (vain jos passiivinen):'''
#* Sana <code>PASSIVE</code>
# '''Alarivi:'''
#* DIP-koodi (esim. <code>0100</code>)


== ID Dip taulukko ==
Jos yhtään ID:tä ei ole vastaanotettu näytössä näkyy himmeästi "Waiting for message..."
{| class="wikitable"
 
!ID
Näytön ID:t skaalautuvat määrän mukaan. Kun on vastaanotettu 1-3 ID:tä näkyy teksti suurena. 4-8 näkyy kahdella rivillä ja sen jälkeen numerot jakautuvat kolmelle riville.
!DIP-koodi
 
|-
Korostetun ID:n viimeksi vastaanotettu lähetysaika näkyy minuutteina näytön oikeassa alareunassa. Maksimiajan ollessa 60min, jolloin lähetin kyseisellä ID:llä ei ole lähettänyt viestiä.
|1
 
|0000
Jos kaikki tallennetut ID:t ovat yli 60min vanhoja näyttö palaa ruutuun "Waiting for message..." ja näyttö himmenee.
|-
|2
|0001
|-
|3
|0010
|-
|4
|0011
|-
|5
|0100
|-
|6
|0101
|-
|7
|0110
|-
|8
|0111
|-
|9
|1000
|-
|10
|1001
|-
|11
|1010
|-
|12
|1011
|-
|13
|1100
|-
|14
|1101
|-
|15
|1110
|-
|16
|1111
|}


== Vastaanottimen kytkentäkaavio ja tarvittavat osat ==
=== Vastaanottimen kytkentäkaavio ja tarvittavat osat ===


== Tarvittavat osat: ==
==== Tarvittavat osat ====
{| class="wikitable"
{| class="wikitable"
!Komponentti
!Komponentti
!Määrä
!Määrä
!Hinta
!Linkki
|-
|-
|Arduino Nano v3
|Arduino Nano v3
|1
|1
|4,2 €
|[https://www.amazon.de/-/en/Development-Connector-Microcontroller-Compatible-Arduino/dp/B0CX1B4X7M?pd_rd_w=qUaQp&content-id=amzn1.sym.4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_p=4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_r=8GH37VYP9KNF34G3GX0V&pd_rd_wg=BU8DK&pd_rd_r=33638fa5-b549-49a6-be2e-478ec83cc529&pd_rd_i=B0CX1B4X7M&psc=1&ref_=pd_bap_d_grid_rp_0_1_ec_pd_rhf_ee_s_rp_c_d_sccl_1_3_i Binghe Development Board with Chip CH340 Type-C Connector 5V 16M Microcontroller Compatible with Arduino IDE Pack of 5]
|-
|-
|433 MHz ASK-radiovastaanotin
|433 MHz ASK-radiovastaanotin
|1
|1
|2,8 €
|[https://www.amazon.de/-/en/ALAMSCN-Receiver-Transmission-Antenna-Compatible/dp/B093PHFW64?pd_rd_w=qUaQp&content-id=amzn1.sym.4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_p=4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_r=8GH37VYP9KNF34G3GX0V&pd_rd_wg=BU8DK&pd_rd_r=33638fa5-b549-49a6-be2e-478ec83cc529&pd_rd_i=B093PHFW64&psc=1&ref_=pd_bap_d_grid_rp_0_8_t ALAMSCN Set of 5 433 MHz RF Receiver and Radio Transmission Module + RF 433 MHz Spring Antenna Kit Compatible with Arduino]     
|-
|-
|OLED-näyttö (128×32, I2C, SSD1306)
|OLED-näyttö (128×32, I2C, SSD1306)
|1
|1
|4,5 €
|[https://www.amazon.de/-/en/MakerHawk-Display-Module-SSD1306-Arduino/dp/B07BDFXFRK?pd_rd_w=qUaQp&content-id=amzn1.sym.4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_p=4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_r=8GH37VYP9KNF34G3GX0V&pd_rd_wg=BU8DK&pd_rd_r=33638fa5-b549-49a6-be2e-478ec83cc529&pd_rd_i=B07BDFXFRK&psc=1&ref_=pd_bap_d_grid_rp_0_2_pr_t MakerHawk I2C OLED Display Module I2C SSD1306 Tiny Screen Module 0.91 Inch, in White 128X32 I2C OLED Driver]
|-
|9V patteriliitin
|1
|0,8 €
|[https://www.amazon.de/-/en/dp/B0919H1113?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1 HeyNana 5 x Battery Clip 9 Volt Block Battery I Type Clip Snap with 15 cm Connection Cable for 9 V Blocks Plug Connection Cable]
|-
|-
|Momenttikytkin (painonappi)
|9V Paristo
|1
|1
|5 €
|
|-
|Yhteensä
|
|
|
|}
|}


Line 135: Line 97:
|D12
|D12
|Vastaanottodata
|Vastaanottodata
|-
|Antenni
| -
|32cm long single core cable, spiral wound
|}
|}


Line 152: Line 118:
|}
|}


==== Lisää tarvittavat kirjastot ====
=== Vastaanottimen lähdekoodi ===
[[Vastaanotin v1 lähdekoodi]]


* RadioHead (RH_ASK)
[[Vastaanottimen lähdekoodi V2]]
* Adafruit SSD1306
* Adafruit GFX
* Wire


== Lähettimen lähdekoodi ==
== Lähetinyksikkö ==
<syntaxhighlight lang="c++" line="1">#include <RH_ASK.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


#define SCREEN_WIDTH 128
=== Lähettimen käyttö ===
#define SCREEN_HEIGHT 32
Lähetinyksikön pohjassa on DIP kytkinkaavio, josta valitaan lähetettävä ID. ID tulisi olla jokaisessa lähettimessä oma, jotta hälytykset on identifioitavissa.
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


// Radiovastaanotin
Lähettimen pohjayksikkö on irtirepäistävä 360 astetta pyörivä pohja joka irrottuaan aktivoi lähetyksen välittömästi.
RH_ASK driver(1000, 12, 11, 10); // RX = D12


// Ajastukset
Lähetinyksikön voi myös laittaa omalla painollaan pohja edellä jollekkin tasaiselle alustalle ja mikäli se kaatuu alkaa lähetys.
const unsigned long ENTRY_TIMEOUT = 30 * 60 * 1000UL; // 30 min
const unsigned long DISPLAY_DURATION = 2500;        // 2.5 s


// Seuraava ruutu nappi
Järjestelmä toimii 9v paristolla.
#define BUTTON_PIN 2


// Kiinteät DIP-koodit (16 kpl)
=== Lähettimen kytkentäkaavio ja tarvittavat osat ===
const char* dipIdMap[16] = {
  "0000", "0001", "0010", "0011",
  "0100", "0101", "0110", "0111",
  "1000", "1001", "1010", "1011",
  "1100", "1101", "1110", "1111"
};


//Vilkku
==== Tarvittavat osat ====
bool blinkState = false;
{| class="wikitable"
unsigned long lastBlink = 0;
!Komponentti
const unsigned long BLINK_INTERVAL = 500;
!Määrä
!Hinta
!Linkki
|-
|Arduino Nano v3
|1
|4,2 €
|[https://www.amazon.de/-/en/Development-Connector-Microcontroller-Compatible-Arduino/dp/B0CX1B4X7M?pd_rd_w=qUaQp&content-id=amzn1.sym.4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_p=4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_r=8GH37VYP9KNF34G3GX0V&pd_rd_wg=BU8DK&pd_rd_r=33638fa5-b549-49a6-be2e-478ec83cc529&pd_rd_i=B0CX1B4X7M&psc=1&ref_=pd_bap_d_grid_rp_0_1_ec_pd_rhf_ee_s_rp_c_d_sccl_1_3_i Binghe Development Board with Chip CH340 Type-C Connector 5V 16M Microcontroller Compatible with Arduino IDE Pack of 5]
|-
|433 MHz ASK-radiolähetin
|1
|2,8 €
|[https://www.amazon.de/-/en/ALAMSCN-Receiver-Transmission-Antenna-Compatible/dp/B093PHFW64?pd_rd_w=qUaQp&content-id=amzn1.sym.4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_p=4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_r=8GH37VYP9KNF34G3GX0V&pd_rd_wg=BU8DK&pd_rd_r=33638fa5-b549-49a6-be2e-478ec83cc529&pd_rd_i=B093PHFW64&psc=1&ref_=pd_bap_d_grid_rp_0_8_t ALAMSCN Set of 5 433 MHz RF Receiver and Radio Transmission Module + RF 433 MHz Spring Antenna Kit Compatible with Arduino]     
|-
|9V patteriliitin
|1
|0,8 €
|[https://www.amazon.de/-/en/dp/B0919H1113?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1 HeyNana 5 x Battery Clip 9 Volt Block Battery I Type Clip Snap with 15 cm Connection Cable for 9 V Blocks Plug Connection Cable]
|-
|9V Paristo
|1
|5,0
|
|-
|Momenttikytkin (painonappi)
|1
|0,25 €
|[https://www.amazon.de/-/en/DAOKAI-Switch-Straight-Moment-Arduino/dp/B09WVMRD5V?pd_rd_w=O2Fz4&content-id=amzn1.sym.4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_p=4bc731ae-4eb4-4e98-9a86-3ba652c5b44e&pf_rd_r=ZVS0D9FANNXXFY26W3FV&pd_rd_wg=pSMHX&pd_rd_r=b5040f30-5385-4685-8609-4b1d19d0597b&pd_rd_i=B09WVMRD5V&psc=1&ref_=pd_bap_d_grid_rp_0_1_ec_pr_pd_rhf_ee_s_rp_c_d_sccl_2_5_t DAOKAI Micro Switch NC+NO Hinge Straight Lever Micro Limit Switch 125V 1A PDT Limit Micro Switch Moment Switch for Arduino (Pack of 20)]
|-
|Yhteensä
|
|
|
|}


==== Kytkentäkaavio ====


// Tallennetaan viimeisin aikaleima DIP-koodeille
===== Lähettimen kytkentä =====
unsigned long dipSeen[16] = {0};
{| class="wikitable"
!Vastaanottimen pinni
!Arduino Nano -pinni
!Selitys
|-
|VCC
|3.3V
|Virransyöttö
|-
|GND
|GND
|Maa
|-
|DATA (OUT)
|D12
|Lähetysdata
|-
|Antenni
| -
|Antennin optimaalinen pituus ~17cm (valmistajan suositus 25 cm ordinary multi-core or single-core cable.)
|}


// Painallusmuuttujat
=== Lähettimen lähdekoodi ===
bool buttonPressed = false;
[[Lähettimen lähdekoodi v1]]
unsigned long lastDisplaySwitch = 0;


// CRC8 Dallas/Maxim
[[Lähettimen lähdekoodi V2]]
byte crc8_dallas(const char* data, uint8_t len) {
  byte crc = 0x00;
  for (uint8_t i = 0; i < len; i++) {
    crc ^= data[i];
    for (uint8_t j = 0; j < 8; j++) {
      crc = (crc & 0x80) ? (crc << 1) ^ 0x31 : (crc << 1);
    }
  }
  return crc;
}


// Palauttaa ID:n 1–16 tai 0 jos tuntematon
== ID Dip taulukko ==
int getDipId(const char* dip) {
{| class="wikitable"
  for (int i = 0; i < 16; i++) {
|+DIP taulukko
    if (strncmp(dipIdMap[i], dip, 4) == 0) {
!Kytkin
      return i + 1;
!0000
    }
!1000
  }
!0100
  return 0;
!1100
}
!0010
 
!1010
void setup() {
!0110
  // Serial.begin(9600);
!1110
  // delay(1000);
!0001
 
!1001
  pinMode(BUTTON_PIN, INPUT_PULLUP);
!0101
 
!1101
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
!0011
    display.clearDisplay();
!1011
    display.setTextSize(1);
!0111
    display.setCursor(0, 0);
!1111
    display.println(F("OLED ei vastaa"));
|-
    display.display();
|ID
    while (1); // Pysäyttää ohjelman
|0
  }
|1
 
|2
  display.clearDisplay();
|3
  display.setTextSize(1);
|4
  display.setTextColor(SSD1306_WHITE);
|5
  display.setCursor(0, 0);
|6
  display.println(F("Odotetaan..."));
|7
  display.display();
|8
 
|9
 
|10
  if (!driver.init()) {
|11
    display.clearDisplay();
|12
    display.setCursor(0, 0);
|13
    display.println(F("Radio ei vastaa"));
|14
    display.display();
|15
    while (1); //
|-
  }
|
 
|OFF-OFF-OFF-OFF
 
|'''ON'''-OFF-OFF-OFF
  pinMode(12, INPUT);
|OFF-'''ON'''-OFF-OFF
}
|'''ON'''-'''ON'''-OFF-OFF
 
|OFF-OFF-'''ON'''-OFF
void loop() {
|'''ON'''-OFF-'''ON'''-OFF
  receiveRadio();
|OFF-'''ON'''-'''ON'''-OFF
  cleanExpiredEntries();
|'''ON'''-'''ON'''-'''ON'''-OFF
  checkButton();
|OFF-OFF-OFF-'''ON'''
  updateDisplay();
|'''ON'''-OFF-OFF-'''ON'''
  delay(10);
|OFF-'''ON'''-OFF-'''ON'''
}
|'''ON'''-'''ON'''-OFF-'''ON'''
 
|OFF-OFF-'''ON'''-'''ON'''
void checkButton() {
|'''ON'''-OFF-'''ON'''-'''ON'''
  static bool prevState = HIGH;
|OFF-'''ON'''-'''ON'''-'''ON'''
  bool state = digitalRead(BUTTON_PIN);
|'''ON'''-'''ON'''-'''ON'''-'''ON'''
 
|}
  if (prevState == HIGH && state == LOW) {
    buttonPressed = true;
  }
 
  prevState = state;
}
 
void receiveRadio() {
  uint8_t buf[32];
  uint8_t buflen = sizeof(buf);
 
  if (driver.recv(buf, &buflen)) {
    if (buflen < 8 || buf[0] != 'S' || buf[5] != 'E') return;
 
    byte expectedCrc = crc8_dallas((char*)buf, 6);
    char crcStr[3] = { (char)buf[6], (char)buf[7], '\0' };
    byte receivedCrc = strtoul(crcStr, NULL, 16);
    if (expectedCrc != receivedCrc) return;
 
    char dip[5];
    memcpy(dip, &buf[1], 4);
    dip[4] = '\0';
 
    int dipId = getDipId(dip);
   
    if (dipId <= 0) {
      //Serial.print(F("⚠️ Tuntematon DIP: "));
      //Serial.println(dip);
      return;
    }
    /*
    Serial.print(F("✅ DIP "));
    Serial.print(dip);
    Serial.print(F(" → ID "));
    Serial.println(dipId);
    */
 
    dipSeen[dipId - 1] = millis(); // Päivitä aikaleima
  }
}
 
void cleanExpiredEntries() {
  unsigned long now = millis();
  for (int i = 0; i < 16; i++) {
    if (dipSeen[i] != 0 && now - dipSeen[i] > ENTRY_TIMEOUT) {
      dipSeen[i] = 0; // Nollaa aikaleima = ei enää aktiivinen
    }
  }
}
 
void updateDisplay() {
  static int currentActiveIndex = -1;
  unsigned long now = millis();
 
  int allSeenIndices[16];
  int seenCount = 0;
  int activeCount = 0;
  int passiveCount = 0;
 
  // Kerätään vastaanotetut DIP:t ja lasketaan aktiiviset/passiiviset
  for (int i = 0; i < 16; i++) {
    if (dipSeen[i] != 0) {
      allSeenIndices[seenCount++] = i;
      unsigned long ageMin = (now - dipSeen[i]) / 60000UL;
      if (ageMin <= 5) {
        activeCount++;
      } else {
        passiveCount++;
      }
    }
  }
 
  display.clearDisplay();
 
  if (seenCount <= 0) {
    // Jos ei ole aktiivisia koodeja
    currentActiveIndex = -1;
    display.setTextSize(1);
    display.setCursor(0, 0);
    display.println(F("Kuunnellaan radiota..."));
 
    // Vilkku aina näkyviin
    if (now - lastBlink >= BLINK_INTERVAL) {
      blinkState = !blinkState;
      lastBlink = now;
    }
    if (blinkState) {
      display.fillRect(SCREEN_WIDTH - 3, SCREEN_HEIGHT - 3, 2, 2, SSD1306_WHITE);
    }
 
    display.display();
    return;
  }
 
  // Päivitä ruutu vain tarvittaessa
  if (now - lastDisplaySwitch >= DISPLAY_DURATION || buttonPressed) {
    currentActiveIndex = (currentActiveIndex + 1) % seenCount;
    lastDisplaySwitch = now;
    buttonPressed = false;
  }
 
  // Haetaan näytettävä DIP
  int dipIndex = allSeenIndices[currentActiveIndex];
  int id = dipIndex + 1;
 
  unsigned long ageMin = (now - dipSeen[dipIndex]) / 60000UL;
  bool isPassive = (ageMin > 5);
 
  // Vasemmalle iso ID-numero
  display.setTextSize(4);
  display.setCursor(0, 0);
  display.print(id);
  if (!isPassive) {
    display.print("!");
  }
 
  // Oikealle tilastorivi
  display.setTextSize(1);
  int xTextStart = SCREEN_WIDTH - 6 * 10;
  char indexStr[20];
  snprintf(indexStr, sizeof(indexStr), "%d/(%d)/[%d]", activeCount, passiveCount, seenCount);
  display.setCursor(xTextStart, 0);
  display.print(indexStr);
 
  // PASSIVE-merkinnät jos yli 5 min vanha
  if (isPassive) {
    char timeStr[10];
    snprintf(timeStr, sizeof(timeStr), "%lum", ageMin);
    display.setCursor(xTextStart, 8);
    display.print(timeStr);
 
    display.setCursor(xTextStart, 16);
    display.print(F("PASSIVE"));
  }
 
  // DIP-koodi alariville
  display.setCursor(xTextStart, SCREEN_HEIGHT - 8);
  display.print(dipIdMap[dipIndex]);
 
  // Vilkku (aina näkyvissä)
  if (now - lastBlink >= BLINK_INTERVAL) {
    blinkState = !blinkState;
    lastBlink = now;
  }
  if (blinkState) {
    display.fillRect(SCREEN_WIDTH - 3, SCREEN_HEIGHT - 3, 2, 2, SSD1306_WHITE);
  }
 
  display.display();
}</syntaxhighlight>

Latest revision as of 18:11, 6 October 2025

Järjestelmä on suunniteltu tilanteisiin, jossa halutaan ilmoitus jostain mekaanisesta liikkeestä tai kulusta. Lähettimestä voidaan säätää lähetystunnust 0-15 välille säädettävissä. Vastaanotin lukee radioviestin ja näyttää sen näytöltä ja laskee milloin lähetin on viimeksi vastaanottanut kyseisen ID numeron.

Vastaanotinyksikkö

Vastaanottimen käyttö

Vastaanotin vastaanottaa radiolähetystä, jossa mukana tarkistussuma, sekä lähettimen ID sekä näyttää sen näytöllä saapumisjärjestyksessä vanhimmasta uusimpaan. Lähetin päivittää myös ajan milloin ID on lähetetty viimeksi.

Mitä näyttö kertoo?

Näytöllä näkyvät ID:t suurina, kun näytössä on 1-3 ID:tä näkyvillä.

Näyttö näyttää kaikki sen hetken luletut ID:t. Mikäli ID:n vastaanotosta on yli tunti häviää se näytöstä. Näyttö päivittyy 2,5 sekunnin välein. Jokaisella näytön päivityssyklillä näytön vasemmassa alareunassa välkkyy piste, josta voit tarkistaa, että järjestelmä on vielä käyttökuntoinen.

Jos yhtään ID:tä ei ole vastaanotettu näytössä näkyy himmeästi "Waiting for message..."

Näytön ID:t skaalautuvat määrän mukaan. Kun on vastaanotettu 1-3 ID:tä näkyy teksti suurena. 4-8 näkyy kahdella rivillä ja sen jälkeen numerot jakautuvat kolmelle riville.

Korostetun ID:n viimeksi vastaanotettu lähetysaika näkyy minuutteina näytön oikeassa alareunassa. Maksimiajan ollessa 60min, jolloin lähetin kyseisellä ID:llä ei ole lähettänyt viestiä.

Jos kaikki tallennetut ID:t ovat yli 60min vanhoja näyttö palaa ruutuun "Waiting for message..." ja näyttö himmenee.

Vastaanottimen kytkentäkaavio ja tarvittavat osat

Tarvittavat osat

Komponentti Määrä Hinta Linkki
Arduino Nano v3 1 4,2 € Binghe Development Board with Chip CH340 Type-C Connector 5V 16M Microcontroller Compatible with Arduino IDE Pack of 5
433 MHz ASK-radiovastaanotin 1 2,8 € ALAMSCN Set of 5 433 MHz RF Receiver and Radio Transmission Module + RF 433 MHz Spring Antenna Kit Compatible with Arduino
OLED-näyttö (128×32, I2C, SSD1306) 1 4,5 € MakerHawk I2C OLED Display Module I2C SSD1306 Tiny Screen Module 0.91 Inch, in White 128X32 I2C OLED Driver
9V patteriliitin 1 0,8 € HeyNana 5 x Battery Clip 9 Volt Block Battery I Type Clip Snap with 15 cm Connection Cable for 9 V Blocks Plug Connection Cable
9V Paristo 1 5 €
Yhteensä

Näytön kytkentä

OLED-pinni Arduino Nano -pinni Selitys
VCC 5V Virransyöttö
GND GND Maa
SDA A4 I2C-data
SCL A5 I2C-kello

Vastaanottimen kytkentä

Vastaanottimen pinni Arduino Nano -pinni Selitys
VCC 5V Virransyöttö
GND GND Maa
DATA (OUT) D12 Vastaanottodata
Antenni - 32cm long single core cable, spiral wound

Näytön pikarullausnappi

Nappi Arduino Nano Selitys
1 D2 Luku (INPUT_PULLUP)
2 GND Painettaessa yhdistää maahan

Vastaanottimen lähdekoodi

Vastaanotin v1 lähdekoodi

Vastaanottimen lähdekoodi V2

Lähetinyksikkö

Lähettimen käyttö

Lähetinyksikön pohjassa on DIP kytkinkaavio, josta valitaan lähetettävä ID. ID tulisi olla jokaisessa lähettimessä oma, jotta hälytykset on identifioitavissa.

Lähettimen pohjayksikkö on irtirepäistävä 360 astetta pyörivä pohja joka irrottuaan aktivoi lähetyksen välittömästi.

Lähetinyksikön voi myös laittaa omalla painollaan pohja edellä jollekkin tasaiselle alustalle ja mikäli se kaatuu alkaa lähetys.

Järjestelmä toimii 9v paristolla.

Lähettimen kytkentäkaavio ja tarvittavat osat

Tarvittavat osat

Komponentti Määrä Hinta Linkki
Arduino Nano v3 1 4,2 € Binghe Development Board with Chip CH340 Type-C Connector 5V 16M Microcontroller Compatible with Arduino IDE Pack of 5
433 MHz ASK-radiolähetin 1 2,8 € ALAMSCN Set of 5 433 MHz RF Receiver and Radio Transmission Module + RF 433 MHz Spring Antenna Kit Compatible with Arduino
9V patteriliitin 1 0,8 € HeyNana 5 x Battery Clip 9 Volt Block Battery I Type Clip Snap with 15 cm Connection Cable for 9 V Blocks Plug Connection Cable
9V Paristo 1 5,0 €
Momenttikytkin (painonappi) 1 0,25 € DAOKAI Micro Switch NC+NO Hinge Straight Lever Micro Limit Switch 125V 1A PDT Limit Micro Switch Moment Switch for Arduino (Pack of 20)
Yhteensä

Kytkentäkaavio

Lähettimen kytkentä
Vastaanottimen pinni Arduino Nano -pinni Selitys
VCC 3.3V Virransyöttö
GND GND Maa
DATA (OUT) D12 Lähetysdata
Antenni - Antennin optimaalinen pituus ~17cm (valmistajan suositus 25 cm ordinary multi-core or single-core cable.)

Lähettimen lähdekoodi

Lähettimen lähdekoodi v1

Lähettimen lähdekoodi V2

ID Dip taulukko

DIP taulukko
Kytkin 0000 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 0111 1111
ID 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
OFF-OFF-OFF-OFF ON-OFF-OFF-OFF OFF-ON-OFF-OFF ON-ON-OFF-OFF OFF-OFF-ON-OFF ON-OFF-ON-OFF OFF-ON-ON-OFF ON-ON-ON-OFF OFF-OFF-OFF-ON ON-OFF-OFF-ON OFF-ON-OFF-ON ON-ON-OFF-ON OFF-OFF-ON-ON ON-OFF-ON-ON OFF-ON-ON-ON ON-ON-ON-ON