[PRZYKŁAD] Kamera śledząca źródła ciepła oraz KAmduino Uno

W przykładzie pokazano użycie kamery śledzącej źródła ciepła. Może być ona wykorzystana np. w robocie podążającym za źródłem ciepła.
Do realizacji projektu będą potrzebne:
- płytka rozwojowa KAmduino UNO
- kamera IR śledząca źródła ciepła
- przewody męsko-męskie

Rys 1. Kamera IR śledząca źródła ciepła
Kamera użyta w przykładzie reaguje na światło podczerwone. Posiada wbudowany układ przetwarzający obraz. Umożliwia śledzenie oraz określanie współrzędnych do czterech źródeł ciepła jednocześnie. Rozdzielczość kamery wynosi 128×96 pikseli. Do komunikacji wykorzystuje magistralę I2C, dzięki której możliwa jest współpraca z Arduino lub innymi systemami, które obsługują ten interfejs. Kąty widzenia kamery to 23 stopnie w pionie oraz 33 stopnie w poziomie. Kamera pozwala na detekcję źródła ciepła w odległości do 3 metrów. Na obudowie znajduje się czerwona dioda LED, która sygnalizuje zasilanie modułu. Posiada 4 wyprowadzenia: VCC (przewód czerwony), GND (przewód czarny), SCL (przewód zielony) oraz SDA (przewód żółty).
Połączenie jest bardzo proste – należy podłączyć zasilanie 3,3 V lub 5 V oraz linie danych interfejsu I2C. Sposób połączenia modułu z płytką KAmduino UNO został przedstawiony w poniższej tabeli.
| Pin KAmduino UNO | Pin kamery śledzącej źródło światła |
| +5V | VCC (czerwony) |
| GND | GND (czarny) |
| SCL | SCL (zielony) |
| SDA | SDA (zółty) |
Kamera podłączona do płytki KAmduino UNO prezentuje się następująco:

Rys 2. Zmontowany układ – Kamera śledząca źródła ciepła oraz KAmduino UNO
Wykorzystałem przykład przygotowany przez producenta (plik programu Arduino znajduje się w sekcji „do pobrania”). Program inicjuje działanie kamery, a następnie sprawdza czy w polu widzenia nie pojawiło się źródło ciepła. Jeżeli tak, program wysyła na port szeregowy (UART) jego współrzędne x i y.

Rys 3. Monitor portu szeregowego – współrzędne do 4 źródeł ciepła (na rysunku współrzędne dwóch źródeł ciepła)
Dodatkowo przygotowany został skrypt do programu Processing, który pozwala zobrazować źródła ciepła. Program można znaleźć na stronie processing.org w sekcji Download. Po pobraniu należy rozpakować archiwum .zip, a następnie uruchomić program. Ukaże się następujący widok:

Rys 4. Okno programu Processing
W oknie programu Processing należy wkleić poniższy kod (pliki projektowe znajdują się w sekcji do pobrania).
// Example by Tom Igoe
// Modified for http://www.DFRobot.com by Lumi, Jan. 2014
// Modyfikacje: Patryk Mądry
// Mikrokontroler 2017 r.
/*
This code should show one colored blob for each detected IR source (max four) at the relative position to the camera.
*/
import processing.serial.*;
int lf = 10; // Linefeed in ASCII
String myString = null;
Serial myPort; // The serial port
void setup() {
// List all the available serial ports
println(Serial.list());
// Open the port you are using at the rate you want:
myPort = new Serial(this, Serial.list()[0], 19200);
myPort.clear();
// Throw out the first reading, in case we started reading
// in the middle of a string from the sender.
myString = myPort.readStringUntil(lf);
myString = null;
size(800,800);
//frameRate(30);
}
void draw() {
background(77);
//while (myPort.available() > 0) {
myString = myPort.readStringUntil(lf);
if (myString != null) {
int[] output = int (split(myString, ','));
println(myString); // display the incoming string
int xx = output[0];
int yy = output[1];
int ww = output[2];
int zz = output[3];
int xxx = output[4];
int yyy = output[5];
int www = output[6];
int zzz = output[7];
ellipseMode(RADIUS); // Set ellipseMode to RADIUS
fill(255, 0, 0); // Set fill to white
ellipse(xx, 1023-yy, 20, 20);
ellipseMode(RADIUS); // Set ellipseMode to RADIUS
fill(0, 255, 0); // Set fill to white
ellipse(ww, 1023-zz, 20, 20);
ellipseMode(RADIUS); // Set ellipseMode to RADIUS
fill(0, 0, 255); // Set fill to white
ellipse(xxx, 1023-yyy, 20, 20);
ellipseMode(RADIUS); // Set ellipseMode to RADIUS
fill(255); // Set fill to white
ellipse(www, 1023-zzz, 20, 20);
}
}
Należy pamiętać, aby w trakcie uruchamiania kodu monitor portu szeregowego w Arduino był zamknięty. W przeciwnym wypadku kod nie wgra się prawidłowo.
Działanie skryptu zostało przedstawione na poniższym filmie:

Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



