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ää
Edit: Löytyi vielä tällainen tieto Arduinon Wire-kirjastosta:
Ei tahdo mennä jakeluun, olen testaillut sataa eri koodia
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: —
jarani
January 9, 2011, 9:49pm
4
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);
}