İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Merhaba
Selamlar..!!
Dcube teknoloji girişimleri adına ben (Somanshu Choudhary), Arduino nano ve MCP23008 kullanarak I2C protokolü aracılığıyla Röleleri kontrol edeceğim.
1. Adım: Genel Bakış
- MCP23X08 cihazı, I2C veri yolu veya SPI uygulamaları için 8 bit, genel amaçlı, paralel G/Ç genişletmesi sağlar.
- MCP23X08, giriş, çıkış ve polarite seçimi için çoklu 8 bitlik konfigürasyon kayıtlarından oluşur. Sistem yöneticisi, G/Ç yapılandırma bitlerini yazarak G/Ç'leri giriş veya çıkış olarak etkinleştirebilir. Her giriş veya çıkış için veriler, karşılık gelen Giriş veya Çıkış kaydında tutulur. Giriş Port kaydının polaritesi, Polarite Ters Çevirme kaydı ile tersine çevrilebilir. Tüm kayıtlar sistem yöneticisi tarafından okunabilir.
- VERİ SAYFASI BAĞLANTISI:
Adım 2: İhtiyacınız Olan Şeyler / Bağlantılar
1. Arduino Nano BAĞLANTISI:
2. Arduino Nano BAĞLANTISI için Kalkan:
3. USB Kablo Tip A'dan Mikro Tip B'ye 6 Feet Uzunluk
4. I²C Kablo BAĞLANTISI:
5. Sekiz SPDT I²C Kontrollü Röle
6. Adaptör BAĞLANTISI:
Adım 3: Devre Şeması
Adım 4: Programlama - I
- Bu kodda Fonksiyon Programlama Paradigmasını kullanıyorum
- İşlev tanımı ve işlev çağrısı için farklı sekmeler kullandım
SEKME ALTINDAKİ KOD q:
// Basit fonksiyon çağırma kodu
#include void kurulumu()
{
// MCP23008'in I2C adresi
#define MCP_ADDR 0x20
// I2C Bus'a master olarak katıl
Wire.begin();
// Seri iletişimi başlat ve baud hızını ayarla
Seri.başla(9600);
// I2C veriyolunda verilen cihazla iletimi başlat
Wire.beginTransmission(MCP_ADDR);
// IODIR – G/Ç YÖNÜ KAYIT kaydını seçin
Wire.write(0x00);
// Gerekli işlemi seçin (çıktı)
Wire.write(0x00);
// YAPILANDIRMA kaydını seçin
Wire.write(0x05);
// Gerekli işlemi seçin
Wire.write(0x0E);
// iletimi sonlandır
Wire.endTransmission();
}
boşluk döngüsü()
{
a1_on();
gecikme(1000);
a1_off();
gecikme(1000);
a2_on();
gecikme(1000);
a2_off();
gecikme(1000);
a3_on();
gecikme(1000);
a3_off();
gecikme(1000);
a4_on();
gecikme(1000);
a4_off();
gecikme(1000);
a5_on();
gecikme(1000);
a5_off();
gecikme(1000);
a6_on();
gecikme(1000);
a6_off();
gecikme(1000);
a7_on();
gecikme(1000);
a7_off();
gecikme(1000);
a8_on();
gecikme(1000);
a8_off();
}
SEKME ALTINDAKİ KOD q1:
// Bu kod, gemide röle 1'i açıp kapatmak içindir.
geçersiz a1_on() {
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x01);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
geçersiz a1_off()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x00);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
SEKME ALTINDAKİ KOD q2:
// Bu kod, gemide röle 2'yi açıp kapatmak içindir.
geçersiz a2_on() {
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x02);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
geçersiz a2_off()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x00);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
SEKMESİ ALTINDAKİ KOD q3:// Bu kod, gemideki röle 3'ü açıp kapatmak içindir.
geçersiz a3_on()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x04);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
geçersiz a3_off()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x00);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
Adım 5: Programlama - II
SEKME ALTINDAKİ KOD q4:
// Bu kod, gemide röle 4'ü açıp kapatmak içindir
geçersiz a4_on()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x08);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
geçersiz a4_off()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x00);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
SEKME q5 ALTINDAKİ KOD:
// Bu kod, gemide röle 5'i açıp kapatmak içindir
geçersiz a5_on()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x10);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
geçersiz a5_off()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x00);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
SEKME ALTINDAKİ KOD q6:// Bu kod, gemideki röle 6'yı açıp kapatmak içindir
geçersiz a6_on()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x20);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
geçersiz a6_off()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x00);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
SEKME ALTINDAKİ KOD q7:// Bu kod, gemide 7 numaralı röleyi açıp kapatmak içindir
geçersiz a7_on() {
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x40);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
geçersiz a7_off()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x00);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
SEKMESİ ALTINDAKİ KOD q8:// Bu kod, gemide röle 8'i açıp kapatmak içindir
void a8_on() {
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x80);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
geçersiz a8_off()
{
// İletimi başlat
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x09);
Wire.write(0x00);
gecikme(1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ekrana çıktı
Serial.print("GPIO değeri:");
Seri.println(GPIO, BIN);
}
6. Adım: Video
Daha fazla bilgi için sitemizi ziyaret etmekten çekinmeyin:
www.dcubetechnologies.com