SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

Dziś kontynuujemy temat cyfrowych czujników prądu i mocy, współpracujących z Arduino - a konkretnie zajmiemy się układem INA226, który jest bardziej rozbudowaną wersją opisywanego niedawno INA219. Układ ten oferuje zwiększony zakres pomiarowy napięcia z przedziału 0 ± 36V, 16-bitową rozdzielczość oraz o rząd większą dokładność pomiaru na poziomie ±0.1%. Podobnie jak w przypadku  INA219, komunikujemy się z mikrokontrolerem za pomocą szyny I2C. Ten miniaturowy układ posiada również dodatkowy sygnał ALERT, który może pracować w kilku konfiguracjach. Brzmi ciekawie?

Zapraszam do pełnego artykułu: Dwukierunkowy cyfrowy czujnik prądu/mocy INA226

Reklama

Jeśli próbowaliście kiedyś wdrożyć w swoim projekcie pomiar napięć i prądu za pomocą standardowych metod z wykorzystaniem wejść analogowych Arduino, to zapewne spotkaliście się z problem dokładności takich pomiarów, a w szczególności małych jego wartości. Posiadam dwukanałowy moduł AVT5399, jednak jego dokładność pozostawia wiele do życzenia. Poszukując lepszych rozwiązań, natknąłem się na bardzo fajny układ INA219 komunikujący się z mikrokontrolerem za pomocą szyny I2C, pozwalający na bardzo dokładny pomiar nawet bardzo małych wartości z dokładnością ±1% i rozdzielczością 0.1μA. Jak się sprawuje? Jak działa? Dowiecie się z nowego artykułu w dziale Arduino.

Pełny artykuł: Dwukierunkowy cyfrowy czujnik prądu/mocy INA219

Jeśli zastanawialiście się kiedyś nad bezprzewodowym zasilaniem własnych projektów, to najwyższy czas o tym pomyśleć. W ramach ciekawostki sprawdziłem, jak radzą sobie dostępne na naszym rynku dostępne moduły zasilające z zakresu 3.3V - 12V. Macie jakieś ciekawe pomysły zastsowania ich w praktyce?

Pełny artykuł: Bezprzewodowe moduły zasilania

Zapraszam do wyczerpującego artykułu na temat wykorzystania technologii NFC oraz RFID w projektach Arduino. Znajdziecie w nim między innymi porównanie technologii oraz sposoby dostępu do pamięci EEPROM w kartach standardu MIFARE. Dowiecie  się również w jaki sposób zmienić klucze dostępowe oraz jak ustawić bardziej zaawansowane reguły dostępu do bloków pamięci.

Artykuł:
https://www.jarzebski.pl/arduino/komponenty/czytnik-rfid-nfc-nxp-pn532.html

Kalkulator Access Bits:
https://www.jarzebski.pl/arduino/narzedzia/bity-dostepu-do-pamieci-kart-mifare.html

W dzisiejszym odcinku na temat Iteaduino Plus zajmiemy się interfejsem GPIO, który udostępnia 123 piny I/O. Większość pinów jest wielofunkcyjnych, oferując między innymi: I2C, SPI, UART, RGB/LVDS oraz CSI/TS. Na spodzie znajdziemy również 4 gniazda Grove oraz w pełni zgodny z Raspberry Pi interfejs.

Mapa pinów GPIO

Mapa pinów Grove oraz RaspberryPI

Jestem Arduino

System IteadOS pozwala na pisanie  programów w języku C /  C++, udostępniając dobrze znane funkcje z Arduino, takie jak: digitalRead, digitalWrite, analogWrite, delay itp. SDK umożliwia również z korzystania z szyn danych 8- i 16 bitowych.

Pełną listę funkcji można znaleźć w dokumentacji SDK 0.1b 20130823. My zaczniemy jednak klasycznie - od mrugania diodą LED, którą podłączyłem do pinu 59. Tworzymy sobie w edytorze plik o nazwie blink.c, do którego wpisujemy taki oto programik:

  1. #include <itead.h>
  2.  
  3. int main()
  4. {
  5.     pinMode(59,OUTPUT);
  6.  
  7.     while(1)
  8.     {
  9.         digitalWrite(59, HIGH);
  10.         delay(250);
  11.         digitalWrite(59, LOW);
  12.         delay(250);
  13.     }
  14. }

Kiedy mamy już nasz program, musimy go skompilować za pomocą polecenia iteadcompile:

# sudo iteadcompile blink blink.c

[/bash]

Jeśli wszystko przebiegnie prawidłowo, możemy przystąpić do uruchomienia programu wynikowego blink, a dioda powinna radośnie mrugać w odstępach 250ms.

  1. # sudo blink

Pojawia się pytanie - jak szybkie jest GPIO w Iteaduino Plus. Możemy zmierzyć czas, jaki jest potrzebny na wystawienie na wyjściu dwóch milionów przełączeń, pomiędzy stanem wysokim, a stanem niskim. Po krótkim teście można stwierdzić, że prędkość GPIO sięga jedynie do 967 kHZ, podczas gdy Raspberry Pi potrafi rozpędzić się do 4.7 MHz. Zakładam, że jest to problem optymalizacji biblioteki libiteadIO, która nie do końca została dopracowana w wersji beta systemu.

GPIO via Python

Do GPIO również mamy dostęp z poziomu Pythona, który również korzysta z biblioteki libiteadIO. Dzięki Pythonowi możliwe jest tworzenie aplikacji graficznych, które mają dostęp do interfejsu GPIO. Tutaj sprawdzimy działanie funkcji analogWrite, która posłuży nam jako PWM dla diody RGB.

  1. from ctypes import *
  2. from Tkinter import *
  3.  
  4. def pwm(ev=None):
  5.     clib.analogWrite(c_int(59), c_int(scale.get()))
  6.  
  7. clib = cdll.LoadLibrary("/usr/local/lib/libiteadIO.so")
  8.  
  9. root=Tk()
  10. scale = Scale(root, from_ = 0, to = 255, resolution = 1, orient = HORIZONTAL, command = pwm)
  11. scale.pack()
  12.  
  13. root.mainloop()

Po uruchmieniu otrzymujemy suwak, którym regulujemy wypełnienie PWM.

Tutaj pojawia się przeszkoda. PWM realizowane jest w sposób symulacji, poprzez dodanie wątka thread przez bibliotekę libiteadIO. Problem polega na tym, że biblioteka nie radzi sobie z więcej niż jednym pinem w trybie PWM, ponieważ wątki są nadpisywane :) Ale, że jest to wersja beta - wybaczam. Na szczęście, źródła biblioteki libiteadIO są ogólnie dostępne i z chęcią wcisnę z tego więcej możliwości. Póki co, aby wysterować np.: diodę RGB, musimy przygotować trzy skrypty :) każdy z własnym wątkiem symulacji PWM.

Jest to o tyle pocieszające, że nie jest to problem sprzętowy, a jedynie programowy, który można poprawić w przyszłości.


Sprzęt do testu dostarczył sklep
ArduinoSolutions.