• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino UNO wysyłanie danych enkodera do bazy MySql
#1
Exclamation 
Witam serdecznie, tematem mojej pracy na uczelni jest skonstruowanie urządzenia którego zadaniem będzie:
Wykrycie obiektu poprzez czujnik fotoelektryczny odbiciowy uruchamia zliczenie drogi w milimetrach, gdy obiekt zniknie z pola wykrywania czujnika fotoelektrycznego chciałbym by wartość została wysłana na zewnętrzny serwer. Od strony MySql oraz php mam pomoc kolegi, z poziomu przeglądarki wykonałem testy i zadane wartości są zapisywane prawidłowo w tabeli.

Spis części które posiadam:
Arduino UNO
Wyświetlacz LCD 2*16 I2C
moduł ETHERNET ENC28J60
enkoder DFRobot 400P/R
czujnik fotoelektryczny NPN NO E18-D18NK

Lolin NodeMcu v3 (mam duże problemy z tym modułem, arduino IDE nie chce kompilować kodu do tej płytki, sprawdzałem już na trzech komputerach i różnych wersjach arduino IDE i bibliotek esp8266 community)
Rezystory

Skrypt napisany do serwera:
``````````````````````````````````````````````````````````````````````````````````````````````
<?php

$mysqli = new mysqli('localhost', 'root', '', 'testowa');
if ($mysqli->connect_error) {
    die('Connect Error ('.$mysqli->connect_errno.') '. $mysqli->connect_error);
   
    if (mysqli_connect_error()) {
      die('Connect Error (' . mysqli_connect_errno() . ') '
      . mysqli_connect_error());
    }
}

if(isset($_GET["value"])){

$sql = "INSERT INTO testowa (value1) VALUES ('".$_GET["value"]."')";

$mysqli->query($sql);
}

?>

````````````````````````````````````````````````````````````````````````````````````````````````

Bardzo proszę o pomoc jak najlepiej ugryźć temat, przy poradach od razu proszę o podanie wersji Arduino IDE z jakiej mam skompilować kod, nie jestem programistą lecz elektronikiem stąd być może moje trywialne pytanie. Na razie testowałem części polegając na monitorze portu serial, udało mi się złożyć licznik impulsów enkodera:

````````````````````````````````````````````````````````````````````````````````````````````````


#define encoder0Pin              2

volatile int count, countold;

void setup()
{
  count = 0;
  countold = 0;
  pinMode(encoder0Pin, INPUT_PULLUP);
  attachInterrupt(0, sensor1, FALLING);

  Serial.begin(115200); // initialize serial communication:

}

void loop()
{
  if (countold != count)
  {
    Serial.println(count);
      countold = count;
  }
}

void sensor1()
{
  count++;
}


```````````````````````````````````````````````````````````````````````````````````````````````
Teraz czas na stworzenie stałej, żeby impulsy tworzyły wartość w milimetrach, średnica koła pomiarowego dostosuję w praktyce, zmienię też wtedy wartość średnicy w kodzie, nie wiem jak uruchomić zliczanie jaki zastosować kod.
Następnie chciałbym by droga z enkodera była zliczana tylko wtedy gdy obiekt jest w polu czujnika E18-D18NK, gdy obiekt opuści pole czujnika chciałbym by zliczona wartość w milimetrach była wysyłana na serwer MySql. Dziękuje za każdą pomoc. Pozdrawiam
 
Odpowiedź
#2
(15-10-2019, 16:55)benex napisał(a): Spis części które posiadam:
Arduino UNO
moduł ETHERNET ENC28J60
Utrudniłeś sobie zadanie. UNO ma uC mega328 z 2kB RAM, ramka Ethernetowa ma ok 1,5kB.
ENC28J60, popularny ale nie najlepszy, może komunikować się po SPI 10Mb/sz, mega328, realnie, 4 jak się namęczysz może 6Mb/s. Trochę szybciej byłoby gdyby taktować uC 20MHz a nie 16 jak w UNO.

Nie twierdze, że się nie da się zrealizować zadania na UNO ale będziesz napotykał różne problemy.
 
Odpowiedź
#3
(15-10-2019, 17:29)semi napisał(a):
(15-10-2019, 16:55)benex napisał(a): Spis części które posiadam:
Arduino UNO
moduł ETHERNET ENC28J60
Utrudniłeś sobie zadanie. UNO ma uC mega328 z 2kB RAM, ramka Ethernetowa ma ok 1,5kB.
ENC28J60, popularny ale nie najlepszy, może komunikować się po SPI 10Mb/sz, mega328, realnie, 4 jak się namęczysz może 6Mb/s. Trochę szybciej byłoby gdyby taktować uC 20MHz a nie 16 jak w UNO.

Nie twierdze, że się nie da się zrealizować zadania na UNO ale będziesz napotykał różne problemy.
Zamówiłem jeszcze ethernet shield oparty na W5100, co może pomóc w dopasowaniu bibliotek do sprzętu. Pozdrawiam
 
Odpowiedź
#4
(16-10-2019, 08:32)benex napisał(a): Zamówiłem jeszcze ethernet shield oparty na W5100, co może pomóc w dopasowaniu bibliotek do sprzętu.
Nadam masz UNO. To zabawka, dobre do zegarka czy jakiegoś demo. Owszem, moża uzyskać czasem niezłe efekty https://www.youtube.com/channel/UCQ3i4Kf...r8PTMODyHw ale trzeba wspomagać się, w przypadku demo z kanału z linku, STM32F105RB z 64kB RAM!

Generalnie, jeśli chcesz pracować z jakimś układem peryferyjnym, bufor powinien zmieścić się w uC. Ramka ETH to ok 1,5kB. W zasadzie powinny byc dwa bufory, nadawczy i odbiorczy, potrzebujesz więc 3kB a UNO ma 2!

Porzuć UNO, weź co najmniej MEGA. Tam masz 8kB RAM, no chyba, że lubisz wyzwania i liczyć każdy bajt. W zasadzie, do projektów z ETH, LCD, AVR się nie nadaje. Trzeba się wspomagać dodatkowymi układami co zwiększa koszt, zmniejsza niezawodność. ETH bez problemu zrealizujesz na STM32F107. MAC ma wbudowany, 64kB RAM, co ważne DMA.

W moich wypowiedziach często pada argument DMA. Proponuję zobaczyć na analizatorze logicznym jak wygląda transmisja niby 8Mb/s po SPI. Wychodzi bajt, pauza długości mniej więcej bajtu, kolejny bajt itd. realny transfer to 4Mb/s. Niestety, arduinowcy żyją w błogiej nie świadomości, ze mają 8MHz a to fikcja. Problem rozwiązuje DMA, którego AVR nie maja, chyba, że Xmega ale te są drogie w stosunku do ARM.

 
Odpowiedź
#5
Tu na forum jest opisanych kilka sposobów użycia Arduino i bazy danych + PHP. Najłatwiej z ESP8266, ale na shieldach W5100/W5500 też działa. Ja właśnie pisałem sobie kiedyś kod dla ESP i korzystałem z przykładu do UNO: http://www.homeguard24.pl/arduino-i-mysql/.
Ile Ci zostanie RAM/flash po tym to sobie możesz sprawdzić sam.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości