Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Single-LED Lichtschilderen: Bouw Dynamische Afbeeldingen met een DIY Gemotoriseerd Systeem

Onderdelen en benodigdheden

NEMA17 Stappenmotor 2
Theremino Driver DRV8825 voor Stappenmotoren 2
SD-kaartlezer 1
Arduino Mega 2560 1
Verschillende tijmriemen en V-wielen 1

Benodigde tools en machines

  • 3D-printer (generiek)

Apps en online services

  • Arduino IDE
  • GIMP
  • Autodesk Fusion 360

Over dit project

Idee

Na het bekijken van verschillende video's en artikelen over lichtschilderen (light painting), besloot ik het zelf te proberen. Lichtschilderen houdt in dat je een camera met een zeer lange belichtingstijd gebruikt om een kleine lichtbron vast te leggen. Hierdoor wordt een enkel punt licht uitgerekt tot een lange streep in één afbeelding.

Maar wat als iemand een gedetailleerdere afbeelding wil maken of veel verschillende kleuren wil gebruiken? Zo kwam ik op het idee om een 2-as CNC-machine te bouwen met een enkele RGB LED die kleur kan veranderen en zo een afbeelding "schilderen".

Het plan

Dit project vereist vier hoofcomponenten: een 2-as CNC-machine, RGB LED, SD-kaart, en een camera die lange belichtingstijden aan kan. Eerst leest de Arduino Mega de SD-kaart en zoekt een bitmap om af te drukken. Vervolgens beweegt hij horizontaal en laat de overeenkomstige LED's oplichten, terwijl hij na elke rij een stap naar beneden maakt. Tot slot wacht hij even en zoekt de volgende bitmap, en stopt wanneer er geen afbeeldingen meer zijn.

De rig bouwen

Door mijn ervaring met het ontwerpen en bouwen van CNC-machines was deze stap niet al te moeilijk. Ik wilde iets modulairs maken dat ook uitgebreid kon worden voor andere projecten, dus ik koos voor een simpel ontwerp met twee tijmriemen bevestigd aan dwarsbalken die langs parallele aluminium profielen bewegen. Hierdoor is de lengte van elke as heel goed aanpasbaar. De uiteinden van de X-as hebben 3D-geprinte eindkappen, waarvan er een een bevestiging voor de X-as stappenmotor en lager heeft.

Bitmaps uitlezen

Ik koos het BMP-bestandsformaat vanwege de eenvoud en hoe makkelijk het te lezen is. Op basis van het bestandsformaat zijn er een paar belangrijke adressen in het bestand die uitgelezen moeten worden: 0x12 (breedte), 0x16 (hoogte), 0x1C (kleurdiepte), 0xA (locatie pixeldata), en 0x36 (waar de pixeldata meestal begint). De data wordt in stukjes van twee of vier bytes (16 of 32 bits) gelezen, wat de pointer ook naar het volgende adres verplaatst. De leesfunctie haalt alle belangrijke data op, inclusief offsets en formaten. Vervolgens gaat het door elke pixel, rij voor rij.

Afbeeldingen voorbereiden

Omdat de meeste cameras beperkt zijn tot een maximum van 30 seconden belichtingstijd, is er een limiet van ongeveer 288 totale pixels die in die tijd getoond kunnen worden. Dit komt neer op ongeveer een 18 x 16 afbeelding. Voor mijn afbeeldingen laadde ik GIMP en maakte eenvoudige pixelart: een Pokébal, een hart, en een springende Mario. Deze drie afbeeldingen plaatste ik in een map "bitmaps" in de root van de SD-kaart. Het programma leest alle afbeeldingen uit deze map.

Schilderprogramma

Omdat stappenmotoren geen interne positioneringsfeedback hebben, moeten hun posities door software bijgehouden worden. Het programma dat ik schreef houdt de LED-positie bij met een roostersysteem voor eenvoudige schaling. Bij opstarten worden de stappenmotorposities op 0,0 gezet en wordt de eerste afbeelding gevonden en uitgelezen. De LED knippert vijf keer om de fotograaf te laten weten dat het bijna tijd is om te beginnen vastleggen. De bitmap wordt gelezen door door elke rij te lopen, en binnen elke rij elke kolom. Door de huidige rij en kolom te weten, kunnen de stappenmotoren naar die posities bewogen worden. Op elke positie verandert de LED in de kleur van die corresponderende pixel.

(Re-)creëren van een afbeelding

Na het invoegen van de SD-kaart en het aansluiten van een 12V voeding voor de motors, was het tijd om de machine aan te zetten. Op mijn camera stelde ik een belichtingstijd van 20 seconden in, diafragma F36, ISO 100, en belichtingscompensatie van -5 stops om ghosting te minimaliseren. De eerste getekende afbeelding was een Pokébal. Hoewel iets vervaagd, is de vorm duidelijk herkenbaar. Vervolgens werd een hartbitmap getekend. Omdat deze afbeelding maar 9x9 pixels was, is elk individueel pixel minder scherp. Tot slot schilderde ik een afbeelding van Mario die springt. Deze afbeelding heeft zware ghosting, voornamelijk door de grote hoeveelheid helder gekleurde pixels.

Toekomstige ideeën voor verbeteringen

De lichtschilderijen zijn veel beter geworden dan ik initieel dacht, maar er is nog ruimte voor verbetering. Het belangrijkste wat ik wil doen is de vervaging verminderen door de LED te laten bewegen terwijl hij uitstaat, en alleen aan te zetten wanneer hij stilstaat. Deze techniek zou de scherpgheid van de gereconstrueerde afbeeldingen aanzienlijk verbeteren.

Productieproces

  1. FMEA Meesteren: Stap-voor-Stap Gids voor Onderhoudsmanagers om Failure Mode and Effects Analysis te Bouwen en Gebruiken
  2. Waarom ontwerpers terugkeren naar natuurlijke materialen in productontwerp
  3. Een LED Besturen met een PIR-bewegingssensor op Raspberry Pi
  4. Temperatuur- en vochtigheidsdata overdragen tussen twee Arduinos via Firebase
  5. Arduino Coffin Dance Melodie Project – Bouw & Speel de Virale Tune
  6. Oude afstandsbedieningen hergebruiken: Bouw slimme apparaten met Arduino
  7. Bestuur een Arduino-rover naadloos met Firmata en een Xbox One-controller
  8. Geluidsgeactiveerd 8-LED Lichtdisplay met Arduino
  9. Bouw een Slimme Arduino Vierpotige Robot: Stap-voor-Stap Handleiding
  10. Draadloze Dataoverdracht via LED (Li-Fi) – Arduino Project
  11. Twee Python-variabelen moeiteloos wisselen zonder tijdelijke variabele