tiistai, 21. helmikuu 2017

Kameratolppa lämpökamerassa - 3

Seek Thermal Reveal XR. Tolpassa kamera. Ilman lämpötila noin -5.5 astetta.

IMGT0039.jpgIMGT0038.jpgIMGT0036.jpgIMGT0034.jpgIMGT0032.jpgIMGT0033.jpgIMGT0031.jpgIMGT0028.jpgIMGT0029.jpgIMGT0030.jpgIMGT0027.jpgIMGT0026.jpgIMGT0025.jpgIMGT0024.jpgIMGT0023.jpgIMGT0022.jpgIMGT0021.jpg

sunnuntai, 19. helmikuu 2017

Kameratolppa lämpökamerassa - 2

Seek Thermal Reveal XR. Tolpassa kamera. Ilman lämpötila noin 4 astetta.

IMGT0016.jpgIMGT0018.jpgIMGT0017.jpgIMGT0019.jpgIMGT0015.jpgIMGT0013.jpgIMGT0014.jpgIMGT0012.jpgIMGT0011.jpgIMGT0010.jpgIMGT0009.jpg

lauantai, 18. helmikuu 2017

Pankkiautomaatin näppäimistö lämpökamerassa

Seek Thermal Reveal XR. Näppäin jota on painettu vähän aikaa ennen kuvan ottamista erottuu kirkkaampana kuin muut näppäimet.

IMGT0008.jpg

torstai, 16. helmikuu 2017

Kameratolppa lämpökamerassa - 1

Seek Thermal Reveal XR. Tolpassa ei kameraa. Ilman lämpötila muutama pakkasaste.

IMGT0001.jpg

IMGT0003.jpg

IMGT0004.jpg

IMGT0002.jpg

IMGT0007.jpg

IMGT0005.jpg

IMGT0006.jpg

lauantai, 4. helmikuu 2017

Arduino SX127x - 1

Ebay:stä saa parilla kympillä SX1276/1278 piiriin pohjautuvia LORA shieldejä Arduinolle, http://wiki.dragino.com/index.php?title=Lora_Shield
Saatavilla on moduleja 433, 868 ja 915 MHz:n ISM bandeille. Semtechin SX127x piirit http://www.semtech.com/wireless-rf/rf-transceivers/sx1278/ soveltuvat LORA moden lisäksi myös FSK, GFSK, MSK, GMSK ja OOK lähetelajeihin. Piirin ohjelmointi on varsin mutkikasta, rekistereitä ja erilaisia asetuksia on paljon. Tässä juttusarjassa rakennetaan Arduinolle koodia piirin eri toimintojen käyttämiseksi, tarkoituksena on kasata FSK/OOK dekooderi, jota voisi käyttää erilaisten ISM bandilla toimivien laitteiden käyttämien protokollien analysointiin.

#include <SPI.h>

#define debug_mode 0
#define max_spi_speed 4000000 // 250 ns
#define spi_rw_delay 4 // 4 ms
#define sx127x_slave_num 0
#define sx127x_rw_setclr_bit 7
#define sx127x_max_curr 0x1B

// sx127x registers
#define REGISTER_OP_MODE      1  // 0x01
#define REGISTER_OCP          11 // 0x0B

const byte FSK_SLEEP_MODE   = 0;
const byte FSK_STDBY_MODE   = 1;
const byte FSK_RX_MODE      = 5;

SPISettings spi_Settings(max_spi_speed, MSBFIRST, SPI_MODE0);

void setup() {
  Serial.begin(9600);
  sx127x_setON();
}

void loop() {
}

void sx127x_setON() {
 
  #if (debug_mode > 0)
    Serial.println();
    Serial.println(F("sx127x_setON"));
  #endif
 
  pinMode(SS, OUTPUT);
  digitalWrite(SS, HIGH);
  SPI.begin();
}

void sx127x_setOFF() {
  #if (debug_mode > 0)
    Serial.println();
    Serial.println(F("sx127x_setOFF"));
  #endif
 
  SPI.end();
  pinMode(SS, OUTPUT);
  digitalWrite(SS, LOW);
}

void sx127x_writeReg(byte addr, byte data) {
  SPI.beginTransaction(spi_Settings);
  digitalWrite(SS, LOW);
  delay(spi_rw_delay);
  bitSet(addr, sx127x_rw_setclr_bit);
  SPI.transfer(addr);
  SPI.transfer(data);
  digitalWrite(SS, HIGH);
  SPI.endTransaction();

  #if (debug_mode > 0)
    Serial.println();
    Serial.println(F("sx127x_writeReg"));
    Serial.print(F("\tRegister "));
    bitClear(addr, sx127x_rw_setclr_bit);
    Serial.print(addr, HEX);
    Serial.print(F("\tData "));
    Serial.print(data, HEX);
    Serial.println();
  #endif
}

byte sx127x_readReg(byte addr) {
  byte val = 0;
  SPI.beginTransaction(spi_Settings);
  digitalWrite(SS, LOW);
  delay(spi_rw_delay);
  bitClear(addr, sx127x_rw_setclr_bit);
  SPI.transfer(addr);
  val = SPI.transfer(sx127x_slave_num);
  digitalWrite(SS, HIGH);
  SPI.endTransaction();

  #if (debug_mode > 0)
    Serial.println();
    Serial.println(F("sx127x_readReg"));
    Serial.print(F("\tRegister "));
    Serial.print(addr, HEX);
    Serial.print(F("\tValue "));
    Serial.print(val, HEX);
    Serial.println();
  #endif
}

void sx127x_setOCP(byte crate) {
  byte regValue;

  #if (debug_mode > 0)
    Serial.println();
    Serial.println(F("sx127x_setOCP"));
  #endif

  if (crate > sx127x_max_curr) {
      crate = sx127x_max_curr;
  }
 
  crate |= B00100000;
  regValue = sx127x_readReg(REGISTER_OP_MODE);

  sx127x_writeReg(REGISTER_OP_MODE, FSK_STDBY_MODE);
 
  sx127x_writeReg(REGISTER_OCP, crate);
  sx127x_writeReg(REGISTER_OP_MODE, regValue);
}