Friday, January 15, 2016

Infrarood Camera met een Arduino

In de Maakbare Wereld van 16 januari staat mijn stukje over de infrarood camera die ik heb gemaakt.
De camera bestaat grofweg uit drie onderdelen: Een Arduino Uno, een Pan Tilt, en een infrarood sensor. Om een beeld te krijgen hoe het werkt een kort kort filmpje van de sensor die heen en weer beweegt.


Later heb ik een klein kartonnen buisje om de sensor geplaatst, zodat er geen licht van opzij valt.

Draadjes

De motoren van de pan tilt zijn redelijk eenvoudig aan te sluiten. Ze gebruiken allebei 5 Volt.  Het is nodig om een flinke condensator tussen de plus en min aansluitingen te plaatsen die spanningspieken op kan vangen bij het aanzetten van de motoren. Als je dit niet doet daalt de spanning zoveel dat de Arduino steeds opnieuw opstart.
De infrarood sensor heeft vier aansluitingen; er is een uitstekend stukje als oriëntatie punt. Aangezien er een duidelijk beschrijving hier staat ga ik dit niet herhalen. Er worden twee 10 kOhm weerstanden gebruikt die op de plus kant aangesloten worden. Ik vond dat niet heel duidelijk uit de foto. Let op dat deze sensoren in verschillende types bestaat. Ik heb de 3V versie gebruikt en daarom moest ik de 3.3 Volt aansluiting van de Arduino gebruiken, dus niet dezelfde als voor de motoren.

Het complete schema ziet er ongeveer zo uit. (hopelijk zonder fouten :) )


Voor de geïnteresseerde; deze afbeelding is gemaakt met Fritzing, een gratis programma om schakeling e.d. te tekenen.
Resultaten zijn natuurlijk ook leuk om te zien. Ik heb foto gemaakt van een glas bierglas gevuld met warm water.

Glas warm water scannen
Foto van het warme glas water
De kleuren zijn wat willekeurig gekozen, blauw is warm en rood is koud. Maar het idee is duidelijk lijkt me. Ik plaatste het glas toen de sensor al heen en weer bewoog, waardoor er strepen kwamen. Verder was ik erg tevreden of dit resultaat. De sensor heeft normaal een blikveld van ongeveer 90 graden, maar met het kokertje is het een aardig scherp beeld geworden. Het glas stond natuurlijk dichtbij. Misschien zou een lens kunnen helpen, maar de vraag is of een gewone lens wel goed werkt met infrarood licht.

Code

Motoren en sensoren gaan niet uit zichzelf werken en je computer maakt ook niet vanzelf afbeeldingen, dus kort daar wat over. De motoren kun je vertellen om naar een bepaalde stand te gaan van 0 tot 180 graden heen en weer en 0 tot 150 graden op en neer. Ik heb niet dat volledige gebied afgescand, maar van 0 tot 90 graden in beide richtingen. We gaan steeds één plekje opzij tot we de rand bereikt hebben, dan één plaatsje naar beneden en de andere kant weer op. 
Na elke beweging vragen we aan de infrarood sensor wat de gemeten temperatuur is. Deze sensor geeft omgevingstemperatuur en de voorwerpstemperatuur, Daarbinnen gebeurd dus ook al genoeg blijkbaar. 
De Arduino Uno is het hart van de operatie. Deze doet het aansturen van de motoren en het opvragen van de temperatuur. Als dat gebeurd is stuurt het een bericht naar de laptop via de USB kabel, een serial message. Op de laptop draait een Processing programma dat wacht op berichten, graden Celsius in dit geval. De graden worden omgezet in gehele waarden tussen de 0 en 255, waarbij 0 overkomt met bijv. 24 graden en 255 met 30 graden. Met deze waarde wordt een vierkantje ingekleurd, zo wordt 0 helemaal rood en 255 volledig blauw en alles er tussen in mooie mengkleuren.

Er zat wat verschil tussen de heen rijen en de terug rijen waardoor ze wat verschoven waren ten opzichte van elkaar en dus heb ik ze wat opgeschoven.
Beide programma's zijn hier te vinden. Je kunt ze ook openen in elk tekstverwekingsprogramma, zoals notepad.

Als iemand nog vragen heeft (zoals over code die niet werkt :) ) plaats ze hieronder.