{"id":559,"date":"2022-01-12T23:40:34","date_gmt":"2022-01-12T22:40:34","guid":{"rendered":"https:\/\/spotonfun.pl\/?p=559"},"modified":"2022-01-12T23:41:14","modified_gmt":"2022-01-12T22:41:14","slug":"projekt-arduino-czesc-3-zmiana-na-plytke-pro-mini-z-konwenterem-ftdi","status":"publish","type":"post","link":"https:\/\/spotonfun.pl\/index.php\/2022\/01\/12\/projekt-arduino-czesc-3-zmiana-na-plytke-pro-mini-z-konwenterem-ftdi\/","title":{"rendered":"Projekt Arduino &#8211; cz\u0119\u015b\u0107 3 &#8211; zmiana na p\u0142ytk\u0119 Pro Mini z konwenterem FTDI"},"content":{"rendered":"<p>W pierwotnym planie chcia\u0142am wykorzysta\u0107 p\u0142ytk\u0119 Arduino Nano. Ze wzgl\u0119du na mnogo\u015b\u0107 tzw. &#8222;klon\u00f3w&#8221;, kupi\u0142am jeden z nich, bo pomy\u015bla\u0142am, \u017ce nie ma co przep\u0142aca\u0107. Niestety, sporo si\u0119 nam\u0119czy\u0142am zanim uda\u0142o mi si\u0119 wgra\u0107 cokolwiek na t\u0105 p\u0142ytk\u0119 (MH-Tiny ATTINY88 ATmega328 Arduino Nano) &#8211; Moje Arduino IDE nie rozpoznawa\u0142o pod\u0142\u0105czonego urz\u0105dzenia, wygrzeba\u0142am gdzie\u015b w sieci sterowniki do ATTiny88 (ju\u017c nawet nie pami\u0119tam gdzie) i uda\u0142o mi si\u0119 wgra\u0107 program&#8230;. Ale nie tak jak &#8222;standardowo&#8221; &#8211; program si\u0119 wgra\u0142, ale nie by\u0142o opcji podgl\u0105du co si\u0119 dzieje na Serial Monitorze. Poniewa\u017c sp\u0119dzi\u0142am nad tym naprawd\u0119 duuu\u017co czasu, uzna\u0142am, \u017ce wystarczy.<\/p><h2 class=\"wp-block-heading\">P\u0142ytka ProMini i testowe pod\u0142\u0105czenie z programem Blink<\/h2><p>Dlatego zamiast Arduino Nano zdecydowa\u0142am si\u0119 wykorzysta\u0107 p\u0142ytk\u0119, kt\u00f3r\u0105 wcze\u015bniej kupi\u0142 ju\u017c m\u00f3j m\u0105\u017c &#8211; te\u017c klon &#8211; Arduino Pro Mini (z chipem Atmel Mega328P). Pomy\u015bla\u0142am te\u017c, \u017ce mo\u017ce nawet- jak zadzia\u0142a &#8211; b\u0119dzie lepsza, bo jeszcze mniejsza :D. <\/p><p>Najpierw pod\u0142\u0105czy\u0142am do komputera sam\u0105 p\u0142ytk\u0119 konwentera i sprawdzi\u0142am w Mened\u017cerze urz\u0105dze\u0144, czy m\u00f3j system odnalaz\u0142 urz\u0105dzenie (szuka\u0142am pod &#8222;Porty (COM i LPT)&#8221;) &#8211; moje urz\u0105dzenie by\u0142o jako &#8222;USB Serial Port (COM4)&#8221;<\/p><div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/spotonfun.pl\/wp-content\/uploads\/2022\/01\/FTDI232_urzadzenie.png\" alt=\"\" class=\"wp-image-561\"\/><figcaption>Mened\u017cer urz\u0105dze\u0144 &#8211; odnalezione urz\u0105dzenie USB<\/figcaption><\/figure><\/div><div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/spotonfun.pl\/wp-content\/uploads\/2022\/01\/FTDI232_urzadzenie_szczegoly.png\" alt=\"\" class=\"wp-image-562\"\/><figcaption>Mened\u017cer urz\u0105dze\u0144 &#8211; szczeg\u00f3\u0142y potwierdzaj\u0105, \u017ce jest to m\u00f3j konwenter FTDI<\/figcaption><\/figure><\/div><p>Szybciutko wi\u0119c przylutowa\u0142am dostarczone w zestawie &#8222;n\u00f3\u017cki&#8221; i pod\u0142\u0105czy\u0142am p\u0142ytk\u0119 FTDI232 do mojego Arduino Pro Mini wg poni\u017cszego schematu:<\/p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/spotonfun.pl\/wp-content\/uploads\/2022\/01\/arduino_ftdi_kable_polaczenie-1-1024x276.png\" alt=\"\" class=\"wp-image-571\"\/><figcaption>Schemat pod\u0142\u0105czenia Arduino Pro Mini z FTDI232<\/figcaption><\/figure><p>A tak wygl\u0105da to &#8222;na \u017cywo&#8221;:<\/p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/spotonfun.pl\/wp-content\/uploads\/2022\/01\/arduino_z_ftdi-1024x220.jpg\" alt=\"\" class=\"wp-image-566\"\/><\/figure><p>Nast\u0119pnie otworzy\u0142am Arduino IDE i za\u0142adowa\u0142am projekt przyk\u0142adowy &#8222;Blink&#8221; (File->Examples->Basics->Blink). Nast\u0119pnie wybra\u0142am Tools->Boards i wyszuka\u0142am Arduino Pro or Pro Mini oraz wybra\u0142am port COM4 (zgodnie z tym, kt\u00f3ry by\u0142 w Mened\u017cerze urz\u0105dze\u0144. Moje Arduino IDE pokazywa\u0142o wykrzyknik przy urz\u0105dzeniu, ale program si\u0119 kompilowa\u0142 i da\u0142 wgra\u0107. \u017beby potwierdzi\u0107, \u017ce program si\u0119 wgrywa, zmodyfikowa\u0142am cz\u0119stotliwo\u015b\u0107 migania diody:<\/p><pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp line-numbers\">void loop() {\r\n  digitalWrite(LED_BUILTIN, HIGH);   \/\/ turn the LED on (HIGH is the voltage level)\r\n  delay(50);                       \/\/ wait for a second\r\n  digitalWrite(LED_BUILTIN, LOW);    \/\/ turn the LED off by making the voltage LOW\r\n  delay(100);                       \/\/ wait for a second\r\n  digitalWrite(LED_BUILTIN, HIGH);   \/\/ turn the LED on (HIGH is the voltage level)\r\n  delay(50);                       \/\/ wait for a second\r\n  digitalWrite(LED_BUILTIN, LOW);    \/\/ turn the LED off by making the voltage LOW\r\n  delay(1000);         \r\n}<\/code><\/pre><p>Tak zmodyfikowany program wgra\u0142am na p\u0142ytk\u0119 i zobaczy\u0142am nieregularnie migaj\u0105c\u0105 diod\u0119 &#8211; zgodnie z oczekiwaniami. A wi\u0119c wszystko dzia\u0142a. I posz\u0142o naprawd\u0119 sprawnie w por\u00f3wnaniu z moim Arduino Nano!<\/p><h2 class=\"wp-block-heading\">A teraz pora pod\u0142\u0105czy\u0107 \u017cyroskop<\/h2><p>Zatem teraz pozostaje pod\u0142\u0105czy\u0107 \u017cyroskop i sprawdzi\u0107, czy nadal wszystko dzia\u0142a. Ja niestety z\u0142apa\u0142am ma\u0142e op\u00f3\u017anienie &#8211; bo okaza\u0142o si\u0119, \u017ce nie wlutowa\u0142am n\u00f3\u017cek do pin\u00f3w A4 i A5, kt\u00f3re to w\u0142a\u015bnie s\u0105 potrzebne do \u017cyroskopu. Po pod\u0142\u0105czeniu (i na mniejszej p\u0142ytce stykowej) ca\u0142o\u015b\u0107 wygl\u0105da tak:<\/p><p>Przy okazji znalaz\u0142am te\u017c gotowe biblioteki do obs\u0142ugi p\u0142ytki \u017cyroskopu. W Arduino IDE mo\u017cna je do\u0142\u0105czy\u0107\/zainstalowa\u0107 za pomoc\u0105 Tools->Manage libraries. Tam wystarczy odszuka\u0107 bibliotek\u0119 &#8222;MPU6050_light&#8221; i j\u0105 zainstalowa\u0107. Po zmianach program wygl\u0105da tak:<\/p><pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp line-numbers\">#include &lt;Wire.h>\r\n#include &lt;MPU6050_light.h>\r\n\r\n\r\nconst int gyroDataProbeDelay = 1000; \/\/1 second\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/ GYROSCOPE \/\/\/\/\/\/\/\/\/\/\/\/\r\nMPU6050 gyro(Wire);\r\nlong timer = 0;\r\n\r\n\/\/\/\/\/\/\/\/\/\/ PULSE &amp; SPO2 \/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/ TODO \r\n\r\n\/\/\/\/\/\/\/\/\/ AMBIENT LIGHT MAGNITUDE \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n\/\/ TODO\r\n\r\n\/\/\/\/\/\/\/\/ NOISE \/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n\/\/ TODO \r\n\r\n\/\/\/\/\/\/\/\/ TGAM EEG \/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n\/\/ TODO\r\n\r\n\/\/\/\/\/\/\/\/ BLUETOOTH \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n\/\/ TODO\r\n\r\n\/\/\/\/\/\/\/\/ BATTERY &amp; CHARGER \/\/\/\/\/\r\n\r\n\/\/ TODO\r\n\r\n\r\n\r\nvoid setup() {\r\n  \/\/ put your setup code here, to run once:\r\n  Serial.begin(9600);\r\n  Wire.begin();\r\n\r\n  byte status = gyro.begin();\r\n  Serial.print(F(\"MPU6050 status: \"));\r\n  Serial.println(status);\r\n  while(status!=0) { status = gyro.begin(); } \/\/stop everything if could not connect to MPU6050  \r\n  Serial.println(\"Status OK.\");\r\n  \r\n  Serial.println(F(\"Calculating offsets, do not move MPU6050\"));\r\n  delay(1000);\r\n  gyro.calcOffsets(true, true); \/\/ gyroscope and acceleromenter\r\n  Serial.println(\"Done!\\n\");\r\n}\r\n\r\nvoid loop() {\r\n  \/\/\/ gyro \/\/\/\/\r\n  gyro.update();\r\n  if(millis() - timer > gyroDataProbeDelay) { \/\/print data every second\r\n    Serial.print(F(\"TEMPERATURE: \"));Serial.println(gyro.getTemp());\r\n    Serial.print(F(\"ACCELERO  X: \"));Serial.print(gyro.getAccX());\r\n    Serial.print(\"\\tY: \");Serial.print(gyro.getAccY());\r\n    Serial.print(\"\\tZ: \");Serial.println(gyro.getAccZ());\r\n\r\n    Serial.print(F(\"GYRO      X: \"));Serial.print(gyro.getGyroX());\r\n    Serial.print(\"\\tY: \");Serial.print(gyro.getGyroY());\r\n    Serial.print(\"\\tZ: \");Serial.println(gyro.getGyroZ());\r\n\r\n    Serial.print(F(\"ACC ANGLE X: \"));Serial.print(gyro.getAccAngleX());\r\n    Serial.print(\"\\tY: \");Serial.println(gyro.getAccAngleY());\r\n\r\n    Serial.print(F(\"ANGLE     X: \"));Serial.print(gyro.getAngleX());\r\n    Serial.print(\"\\tY: \");Serial.print(gyro.getAngleY());\r\n    Serial.print(\"\\tZ: \");Serial.println(gyro.getAngleZ());\r\n    Serial.println(F(\"=====================================================\\n\"));\r\n    timer = millis();\r\n  }\r\n\r\n  Serial.println();  \r\n\r\n}\r\n<\/code><\/pre><p>A oto wyniki programu:<\/p><figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/spotonfun.pl\/wp-content\/uploads\/2022\/01\/gyro_po_przerobkach.png\" alt=\"\" class=\"wp-image-569\"\/><\/figure><h2 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h2><ol class=\"wp-block-list\"><li>https:\/\/www.youtube.com\/watch?v=Vawhrr4COjI&amp;ab_channel=JulianIlett <\/li><\/ol><p>2. https:\/\/github.com\/rfetick\/MPU6050_light<\/p>","protected":false},"excerpt":{"rendered":"<p>W pierwotnym planie chcia\u0142am wykorzysta\u0107 p\u0142ytk\u0119 Arduino Nano. Ze wzgl\u0119du na mnogo\u015b\u0107 tzw. &#8222;klon\u00f3w&#8221;, kupi\u0142am jeden z nich, bo pomy\u015bla\u0142am, \u017ce nie ma co przep\u0142aca\u0107. Niestety, sporo si\u0119 nam\u0119czy\u0142am zanim uda\u0142o mi si\u0119 wgra\u0107 cokolwiek na t\u0105 p\u0142ytk\u0119 (MH-Tiny ATTINY88 ATmega328 Arduino Nano) &#8211; Moje Arduino IDE nie rozpoznawa\u0142o pod\u0142\u0105czonego urz\u0105dzenia, wygrzeba\u0142am gdzie\u015b w sieci&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"categories":[69],"tags":[],"class_list":["post-559","post","type-post","status-publish","format-standard","hentry","category-projekt-arduino"],"_links":{"self":[{"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/posts\/559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/comments?post=559"}],"version-history":[{"count":7,"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/posts\/559\/revisions"}],"predecessor-version":[{"id":573,"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/posts\/559\/revisions\/573"}],"wp:attachment":[{"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/media?parent=559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/categories?post=559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spotonfun.pl\/index.php\/wp-json\/wp\/v2\/tags?post=559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}