Arduino ja TCN75A

Olen alottanut opiskelemaan arduino ohjelmointia, ledit saatu vilkkumaan millä tavalla vaan, servon ohjaus onnistuu.

Kolvikin pysyy kädessä ja jonkinverran elektroniikasta kokemusta.

Nyt tuntui että olisi vähän apua tarpeen, jotenkin ei mene jakeluun tuon lämpöanturin lukeminen.
(TCN75A robomaa.com/index.php?main_p … ucts_id=73)

Kytkin
VCC = 5v
GND = maa
SCL = digital pin 2

Tulosti vuorontellen sattumanvaraisesti 1 ja 0.(Ilmeisesti jollakin koodilla muutetaan asteiksi…)
Yritin koko eilenillan googletella ja etsiä tuolle anturille esimerkkikoodia, että pääsisi siitä kärryille ja pääsisi kehittelemään omia sovelluksia.

Tuosta kytkennästäkään en ole varma, onko oikein kytketty.

Kannattaa aivan ensimmäisenä selata anturin datalehti läpi. Anturi näyttää käyttävän liikennöintiin I2C-väylää. Eli data siirtyy SDA:n läpi ja kello annetaan SCL:llä, yeensä I2C:n kellona on 100 kHz tai 400 kHz. Ihan hyvä tutoriaali I2C:stä löytyy tuolta:

robot-electronics.co.uk/acat … orial.html

Luulisin, että tuossa anturipiirillä on ylösvetovastukset valmiina, joten niistä ei tarvinne huolehtia. Mikäli ei ole, niin sitten lisätään esim. 4,7 kilo-ohmin vastukset SDA- ja SCL-linjoihin yllä olevan tutoriaalin mukaisesti.

Arduinossa I2C:n käyttö on tehty aika helpoksi, siihen kannattaa hakea tietoa täältä:

arduino.cc/playground/Learning/I2C

Mikäli näillä avuilla alkaa pelaamaan, niin hieno juttu. Mikäli ei, niin saa kysellä tietysti lisää :wink:

Edit: Löytyi vielä tällainen tieto Arduinon Wire-kirjastosta:

Ei tahdo mennä jakeluun, olen testaillut sataa eri koodia :smiley:

Kytketty:
vcc +5
gnd maa
sda = analocg in 4
scl =analocg in 5

Koodi mikä tällä hetkellä testissä

Ei oikeen yksinkertasta esimerkkikoodia löytynyt…

[code]#include “Wire.h”
//wire library

#define address 0x4F
//address of the temperature sensor

#define delayC 1000
//delay count in ms

#define baudrate 9600
//baudrate for communication

void setup()
{
Wire.begin();
Serial.begin(baudrate);
}

void loop()
{
Serial.print("temperature in Celsius: ");
//let’s signal we’re about to do something

int temperature;
//temperature in a byte

Wire.beginTransmission(address);
//start the transmission

Wire.send(0x00);

Wire.requestFrom(address, 1);
if (Wire.available()) {
temperature = Wire.receive();
Serial.println(temperature);
} else {
Serial.println("—");
}

Wire.endTransmission();
//end the transmission

delay(delayC);
}[/code]

Tulostaa vaan.
temperature in Celsius: —
temperature in Celsius: —
temperature in Celsius: —
temperature in Celsius: —

Mistä tiedät että sinun laitteen osoite on tuo määrittelemäsi:
#define address 0x4F ?

Itse muokkailin löytämistäni koodiesimerkeistä seuraavanlaisen joka ainakin tuntuisi reagoivan tuon anturin hypistelyyn (lämpötilavaihteluun):

/*                                      */
/*               A6 A5 A4 A3 A2 A1 A0   */
/* TCN75A osoite  1  0  0  1  x  x  x   */
/* A0 - A2 LSB, user selectable bits    */
/* Arduino analog input 5 - I2C SCL     */
/* Arduino analog input 4 - I2C SDA     */

#include <Wire.h>
int mittaus = 0;

void setup()
{
  Wire.begin();
  Serial.begin(115200);
}

void loop()
{
  Wire.beginTransmission(0x48); /* anturin osoite 0x48 : 1001000 */
                            /* koska anturin A2, A1 ja A0 liittimet ovat irti */
  Wire.requestFrom(0x48, 2);

 if(2 <= Wire.available())
  {
    mittaus = Wire.receive();
    Serial.print("Lampotila : ");
    Serial.println(mittaus);  
    mittaus = 0; /* mittaustulos nollaan */
  }
  Wire.endTransmission(); 
  delay(3000);
}