İçindekiler:
- Adım 1: Yazılım Mantığı: Sistem Mimarisi
- Adım 2: Adım 1: Donanım Kablolaması
- Adım 3: Adım 2: Arduino
- Adım 4: Adım 3: NodeJS
- Adım 5: Adım 4: Web Arayüzü
- 6. Adım: Sonuç
Video: Arduino Projesi: Nodejs + SQL Veritabanı ve Web Sitesi Kullanarak İnternet Üzerinden Elektroniği Kontrol Edin.: 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Proje Gönderen:Mahmed.tech
Yapım Tarihi: 14 Temmuz 2017
Zorluk Seviyesi: Biraz programlama bilgisi ile başlangıç.
Donanım Gereksinimi:
- Arduino Uno, Nano, Mega (Seri bağlantılı çoğu MCU'nun çalışacağını düşünüyorum)
- Tek LED ve Akım sınırlama direnci. Emin değilseniz bu hesap makinesini kullanın: Ohm Yasası Hesaplayıcı
- 10K Potansiyometre.
Yazılım Gereksinimi:
-Arduino IDE'si
- Node. JS (bu bir bilgisayardaki bir yazılımdır, kurulumu çok basittir)
- MySQL Sunucusu (bulduğum en kolay yol ucuz bir web barındırma kullanmaktır. Ayrıca ücretsiz alan adları da alabilirsiniz)
Kullanılan Programlama ve Komut Dosyası dili:
Arduino (Değiştirilmiş C/C++), JavaScript(Nodejs), PHP, HTML ve CSS
Giriş Özetle bu proje: Bir Arduino mikro denetleyicisini bir web arayüzünden kontrol etmek. Bu nedenle herhangi bir elektrikli cihazı internetin olduğu her yerden kontrol edin. Programlama ve web geliştirme konusundaki anlayışımı genişletmek istedim ve bunu yapmanın basit ama etkili bir proje yapmaktan daha iyi bir yolu var. Donanım minimumda tutuldu, böylece yazılıma daha fazla odaklanabildim. Bu yüzden basit bir LED, tencere kurulumu ile gittim. Pot veri gönderecek ve led alacak (PWM parlaklığı). NodeJS kullanılarak seri veriler okundu (potansiyometre değeri) ve yazıldı (led parlaklığı). Bu projenin zor kısmı, uzak bir konumdan (web sunucusu) girdi verilerini almaktı.
Adım 1: Yazılım Mantığı: Sistem Mimarisi
Potansiyometre Verileri:
Bu Arduino'da başlar, okunan pot değeri seri baskıdır. Ancak bu sefer değeri okumak için Node. JS kullanacağız. NodeJS, Arduino'nun bağlı olduğu aynı porta seri iletişimi açacak ve yazdırılan pot değerini okuyacaktır. NodeJS daha sonra verileri uzak bir SQL veritabanına yükler, bu her yeni pot değeri yazdırıldığında gerçekleşir. Bir web sayfası SQL veritabanı ayar aralığına bağlanacak ve potansiyometre değerini alacaktır. Bu daha sonra web sayfasında görüntülenecektir.
Led Verileri:
Led için PWM parlaklığı kullanıcı tarafından uzak bir web sayfasında ayarlanacaktır, bu nedenle yolculuğu spektrumun diğer ucunda başlar. Girilen veriler bir SQL veritabanına kaydedilir, her ayarlanan aralıkta veritabanı led PWM'de bir değişiklik için kontrol edilir, bu NodeJS tarafından yapılır. Değer önceki değerden farklıysa, yeni değer bir seri veri yolu aracılığıyla Arduino'ya gönderilecektir. Arduino, parlaklığını değiştirmek için ledin çıkış PWM değerini değiştirir.
Ohm kanunu hesaplayıcısı V = IR ve P = IV = I²R = V²/R formülünü kullanır. Bu proje için mavi led kullanacağım. Bu önemlidir çünkü ışık frekansı arttıkça voltaj düşüşü de artar. Mavi ışık, kırmızı led gibi bir şeye kıyasla daha yüksek bir frekansa sahip olduğundan. Bu, daha yüksek bir ileri voltaj anlamına gelir. Markaya, türe ve boyuta bağlı olarak çalışma aralığı değişecektir. Kurulumum için, Arduino'daki bir PWM pinine seri, toprağa negatif ve pozitif 220 Ω direnç kullandım. Pot bir analog pime bağlandı. 5VCC ile bir uç GND diğeri ve bir analog pime bağlı orta pim (benim durumumda A0).
Adım 2: Adım 1: Donanım Kablolaması
Bu çok basit: Sadece mevcut sınırlayıcı direncinizi LED ile seri olarak bağlayın, ledinizin doğru şekilde olduğundan emin olun. Bir nokta GND'ye, diğer uç Arduino pinine gidecek. Kurulumum için led için pin 12 ve Pot için A7 kullandım. Çok basit devresi olduğu için şematik yok. Ancak, bunu çevrimiçi buldum (resim)
Adım 3: Adım 2: Arduino
Öncelikle led ve potun beklendiği gibi çalışıp çalışmadığı kontrol edildi. Bu, pot değerinin led'i kontrol ettiği basit bir program tarafından yapıldı. 0 ila 1023 ila 0 ila 255 arasındaki pot aralığını değiştirmek için kısıtlama işlevini kullandım, ancak basit bir /4 de işe yarıyor. Pot değeri, art arda 10 okumadan ortalama ortalama alınarak düzeltildi, bu, ani yükselmeleri ortadan kaldırmak içindir. (Ancak, bu yumuşatma NodeJS ile ilgili sorunlara neden oldu, bu nedenle bu, projede daha sonra kaldırıldı - daha fazlası)
Arduino Kodu
Seri Okuma / Yazma Bir sonraki adım, parlaklığı ayarlamak için Arduino ide tarafından sağlanan seri monitör pencereleri aracılığıyla kullanıcı girdisini almaktır. Bunu yapmak için, bir tamsayı değeri alan ve dizeyi yok sayan serial.parseInt() kullanılır. Ayrıca, koda bir hata denetimi eklenir. Bir PWM değerinin geçerli aralığı 0 - 255'tir, bir kullanıcı >255 girdiğinde 255 değerini atar ve eğer kullanıcı değer girerse veya < +/-5 bunu, dalgalanma olduğu için okumayı daha kararlı hale getirmek için yaptım.. Bunun neden SQL güncellemesiyle ilgili büyük bir sorun olduğu, daha sonra anlatacağız.
Adım 4: Adım 3: NodeJS
Size SQL server'ı nasıl alacağınızı veya kuracağınızı göstermeyeceğim. Orada tonlarca öğretici var.
NodeJS programının 3 ana yönü vardır:
Seri Verileri Oku
Seri Verileri Yaz
SQL Veritabanını Güncelle
NodeJS içinde bir seri bağlantı yapmak için, npm komutu kullanılarak yapılabilen serialport adlı bir modülün indirilmesi gerekir. NodeJS programının tutulacağı klasörde CMD'yi açın, şunu yazarak kurun: npm install serialport Ayrıca sql veritabanına bağlanabilmek için SQL modülünün kurulu olması gerekiyor: npm install mysql NodeJS - Serial Port NodeJS ile ilk adımım program, yazdırılan verileri okumak ve Arduino'ya pwm parlaklığı göndermekti. Bu, aynı hız ve bağlantı noktasında seri bağlantı açılarak yapıldı. Bağlantı kurulduktan sonra gelen mesajları okudum ve konsol penceresine yazdırdım. Parlaklığı kontrol etmek için pwm değerini yazmaya çalıştığımda sorun oluştu.
Hatalar atmaya devam etti: Bağlantı Noktası Açık Değil, ilk çözümüm gelen veri olduğunda yazma işlevini çağırmaktı. Ancak bu kötü bir düzeltmeydi ve çözümden pek memnun kalmadım, işe yaramasına rağmen sadece pot değeri değiştiğinde gönderiyordu. Seri modül için örnek kod, aynı hatayı vererek çalışmaz. Daha sonra programın bağlantı noktasını açmadan yazma işlevini yürütmeye çalıştığını öğrendim ve bu hatayla sonuçlandı. setInterval() işlevini kullanarak bu sorunu çözdüm
NodeJS - MySQL SQL veritabanına bağlanmak için MySQL kütüphanesi (npm install MySQL) kullanıldı çünkü sunucu uzak bir lokasyonda localhost yerine sunucunun IP adresi kullanıldı.
var con, bağlantı bilgilerini JSON formatında tutar, bağlantı başarıyla yapıldıktan sonra veritabanı sorgulanabilir. Biri tabloyu güncellemek için diğeri SQL sorgusunu alan parametrelerle seçerek 2 fonksiyon oluşturuldu. Yeni bir pot değeri alındığında güncelleme tablosu çağrılır ve parlaklık kontrol sorgusu periyodik olarak çalışacaktır.
NodeJSCode Bağlantısı
Adım 5: Adım 4: Web Arayüzü
Web Arayüzü
Üniversitede CO323 Veritabanlarımdan ve Web modülünden biraz deneyimim olduğu için ana web sayfası PHP ile yazılmıştır. Sql verilerini görüntülemek için html tablosu ve formu kullanıldı.
PHP SQL Erişim Kodu: Bağlantı Web arayüzü bölümüne ilerleyin.
HTML & CSS * Javascript Web Sayfası Kodu: Bağlantı Aşağıya kaydırın
Son Web Sayfası
Önerilen:
Hava Durumu İstasyonu: ESP8266, Derin Uyku, SQL, Flask&Plotly ile Grafik Oluşturma: 3 Adım
Hava Durumu İstasyonu: ESP8266 Derin Uyku, SQL, Flask&Plotly ile Grafik Oluşturma: Balkonunuzdaki sıcaklık, nem veya ışık yoğunluğunu bilmek eğlenceli olur mu? Yapacağımı biliyorum. Bu tür verileri toplamak için basit bir hava durumu istasyonu yaptım. Aşağıdaki bölümler, bir tane oluşturmak için attığım adımlardır. Haydi başlayalım