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.








8 comments:

  1. Cor, om je projecten nog goedkoper te maken: als je het niet erg vindt een beetje te wachten, zijn de meeste arduino componenten voor een schijntje op eBay te koop. Selecteer dan wel eBay.com en locatie wereldwijd en sorteer op prijs. Dan komen er tientallen sensoren, componenten etc voor vaak een enkele dollars.
    Je pan/tilt kit is bv voor 7$ te vinden, incl. verzenden. Je IR camera voor rond de 6$. Dus als je de tijd hebt....
    (Ikzelf heb goede ervaringen met seller:gohankuu. Onderdelen vaak binnen week in huis, uit China! En het werkt gewoon zonder problemen....)

    Keep up the good work! VK maakbare wereld is stiekem t eerste dat ik lees op zaterdag! ;)

    ReplyDelete
    Replies
    1. Leuk om te horen :) Ik lees zelf ook altijd met plezier over de creaties van mijn collega's.
      Goeie tip, ik zal eens op Ebay gaan kijken. Op Amazon zijn de prijzen wel ok, maar als het goedkoper kan is dat natuurlijk nooit erg.

      Delete
    2. Hi Cor,
      Supergaaf, die projecten van je in de Volkskrant. Je maakt hiermee DIY elektronica bij een groot publiek zeer interessant. Heb je voor een nieuw project modules nodig, stuur dan een email naar mij: andre at antratek. Waarschijnlijk kunnen we de modules wel gratis aan je leveren.

      Delete
  2. Hallo Cor,

    Waarom niet een digitale camera en een Hoya R72 filter. Met een filter van zwart perspex schijnt het ook te gaan. Je krijgt dan fotos met een veel hogere resolutie. Googelen op Infrarood fotografie.

    ReplyDelete
  3. Hi,
    Goeie vraag. Ik denk dat je dan alleen IR licht opvangt die dichter bij het zichtbare licht zitten. Je kunt er zeker mooiere foto's mee maken, maar je ziet dan niet de warmte die van objecten afkomt. Een digitale camera is niet gevoelig voor die straling, maar wel voor IR golflengte, zoals bijv. door afstandsbedieningen wordt gebruikt. Mik het lampje van een afstandsbediening maar eens op een camera en je kunt het zien oplichten als je een knop indrukt, terwijl je het met je blote oog niet kunt zien.

    ReplyDelete
  4. Warme voorwerpen geven veel ir straling af. Ook dichter bij het zichtbare spectrum. Om een academische discussie te vermijden lijkt me een proefje het beste.

    ReplyDelete
  5. Hallo Cor
    Bij het compileren van de ino file voor de besturing van de servos
    krijg ik de volgende fout:
    Adafruit_MLX90614 mlx = Adafruit_MLX90614(); 'Adafruit_MLX90614' does not name a type
    Wat gaat hier fout?

    ReplyDelete
  6. Misschien staat de library niet in de juiste map.
    Op deze site beschrijven ze een boel nuttige dingen:
    https://learn.adafruit.com/using-melexis-mlx90614-non-contact-sensors/wiring-and-test
    Daar kun je de library downloaden als je hem nog niet hebt en er staat ook een uitleg hoe je een library installeert.(https://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use)
    En vooral niet vergeten de Arduino IDE weer opnieuw op te starten. Iets anders kan ik zo 1-2-3 niet bedenken.

    ReplyDelete