Ledbar

From Frack - Hackerspace Friesland
Jump to navigationJump to search
Project: Ledbar
Ledbar.jpg
Status voltooid
Betrokkenen
Jildou Achter de Bar.jpg Will-Do
Jildou Achter de Bar.jpgJildou Gerritsma (Will-Do) Rol: deelnemer, persvoorlichter, alg. bestuurslid Deskundig met: Design, GnuCash, Knutselen, Open Data Werkt aan: Geen projecten :(
,
Afbeelding Anoniem.png Lian
Lian (Lian) Rol: niet-deelnemer Deskundig met: Elektronica, LPD8806, Solderen Werkt aan: Geen projecten :(
,
Afbeelding Anoniem.png Martijn
Martijn (Martijn) Rol: deelnemer Deskundig met: Digitale Fabricatie, Elektronica, Hydroponics, Robotica, Software, Solderen, Stappenmotor Werkt aan: Geen projecten :(
,
Gebruiker CrazyA.jpg CrazyA
Gebruiker CrazyA.jpgCrazyA Rol: deelnemer Deskundig met: AVR, Arduino, Blender, Elektronica, GL-Inet, LPD8806, POV-Ray, RaspberryPi Werkt aan: Geen projecten :(
,
Gebruiker Elmer.jpg Elmer
Gebruiker Elmer.jpgElmer de Looff (Elmer) Rol: niet-deelnemer Deskundig met: Arduino, ENC28J60, Elektronica, GnuCash, HTML, LPD8806, Linux, MediaWiki, Mercurial, Netwerken, OpenVPN, Programmeren, Python, SSH, Software, Solderen Beginnend met: Dm-crypt, Javascript Werkt aan: Geen projecten :(
Kennisgebied(en) Solderen, LEDs
, AVR
Afgeleide projecten Led cube
ProjectoverzichtProject toevoegen

Eth0 is een high-tech-geek-outdoor-conferentie. Op dit event is een lounge aanwezig met een bar. Op basis hiervan is het idee ontstaan om een bar te ontwerpen in het thema van eth0.

Algemene omschrijving

Eth0 is een high-tech-geek-outdoor-conferentie die gepland staat deze zomer. Deze conferentie is gericht op delen van kennis op het gebied van IT-gerelateerde onderwerpen. o.a. Veiligheid, programmeren, netwerken, hacken en ethiek, nieuwe (open) technologieën. Het thema voor deze editie is "lights". Op dit event is een lounge aanwezig met een bar. Op basis hiervan is het idee ontstaan om een bar te ontwerpen in het thema van eth0. Deze bar is niet zomaar een bar. We creëren, doordat de bezoekers van eth0 een 'bijdrage' te laten leveren aan de bar, o.a. een sfeer waarbij de bezoekers zich verbonden voelen. Deze bar dient als een plaats waarbij de bezoekers zijn/haar drank kan aanschaffen, en de bezoekers ook met elkaar in contact komen. Om in het thema van eth0 de bar te ontwerpen, kiezen we voor het gebruik van leds.

Doel van het project

Het doel van deze bar is om tijdens eth0 een mooi project te demonstreren vanuit Frack. Met de bar hopen we ook alle community's "samen" af te beelden in een prominent onderdeel van eth0. De bar bestaat uit 3 platen, op de linkse plaat staat "Frack" de middelste plaat is leeg en de meest rechtse plaat staat "eth0" op. Het is de bedoeling dat de community's hun logo op de middelste plaat plakken (of iets anders afbeelden waarmee hun aanwezigheid gedemonstreerd wordt). De bar is natuurlijk een onderdeel waar vrijwel iedereen langs zal komen, dus iedereen zal kunnen zien welke community's vertegenwoordigd zijn.

Het thema van eth0 is lights. Door de bar van eth0 met leds te versieren is er, in de lounge, gelijk een groot onderdeel dat aan het thema voldoen. Jildou is coördinator van de Lounge, waardoor dit goed uitkomt.

Daarnaast zal de interface om de leds mee aan te sturen opengesteld worden voor iedereen die op eth0 is. Zo kunnen mensen samenwerken aan een zo leuk mogelijke bar.

Algemeen design

Het algemeen design van de bar bestaat uit drie losse platen. (We hebben voor drie losse platen gekozen om dit zo gemakkelijk mogelijk naar eth0 te vervoeren, en later de platen aan elkaar te bevestigen aan de hand van scharnieren). De twee buitenste platen bevatten de verschillende kleuren leds. De middelste plaat wordt gebruik om tijdens eth0 de verschillende aanwezige hackerspaces zijn of haar 'bericht' achter te laten d.m.v. stiften/verf. De twee buitenste platen die de leds bevatten, hebben een eigen desgin. De ene plaat geeft het logo van eth0 weer, de andere plaat geeft de tekst "Frack" weer. Deze teksten/logo's zijn uitgetekend op de platen, en vervolgens zijn er gaten geboord waardoor er leds door de plaat heen gestoken worden. Deze leds zijn d.m.v. een lijm pistool vastgelijmd in het desbetreffende uitgeboorde gat. Op deze manier worden de leds optimaal bevestigd.

Specificaties van het algemene design

Schematische weergave
  • Kleur van de platen: Grijs/zwart
  • Grootte boorgaten: 3 mm
  • Aantal platen: 3
  • 'Patronen' op de platen: Frack en eth0
  • Afmetingen per plaat: 81 cm bij 122 cm
  • Totale grootte van de bar: 243 cm bij 122 cm
  • Aantal leds: ±500
  • Kleuren van de leds: Wit, Rood, Geel, Blauw, Groen.

Benodigdheden

  • 1 grote plaat triplex
  • Verf
    • Verfroller
    • Terpetine
  • ~500 leds
  • Lijm
  • Electriciteitsdraad
  • Soldeertin

Leds

Voor het project worden de volgende leds gebruikt. Elke LED die in de bar wordt geplaatst moet voorzien worden van een voorschakelweerstand. De blauwe, groene en witte leds zijn identiek aan elkaar m.b.t. tot het gewenste potentiaalverschil over de leds. Hierdoor zijn dezelfde voorschakelweerstanden nodig. Dit geldt ook voor de rode en de gele leds. De leds zijn daarom in de volgende twee samenstellingen terug te vinden in de bar. Per letter zien we dus één van deze samenstellingen terug:

Samenstelling 1:

  • Groen
  • Blauw
  • Wit

Benodigde voorschakelweerstand: 56 Ω

Samenstelling 2:

  • Rood
  • Geel

Benodigde voorschakelweerstand: 120 Ω

Deze twee samenstellingen van leds bieden qua ontwerp van de PCB voordelen. Er is namelijk per letter, afhankelijk welke LED samenstelling deze letter heeft, maar één bepaalde PCB nodig met één bepaalde voorschakelweerstand. Je krijgt hierdoor twee verschillende PCB's met elk zijn eigen voorschakelweerstand.

Voorschakelweerstand bepalen

Waarom een voorschakelweerstand?

Een voorschakelweerstand dient als een spanningsdeler. Dit betekend dat door de voorschakelweerstand een deel van de spanning over de weerstand komt te staan, en een ander deel over de LED. Bij een LED hebben we te maken met een bepaald gewenst potentiaal verschil. Bij dit gewenste potentiaal verschil brand de LED met zijn maximale lichtsterkte. Afwijkend van dit potentiaal verschil geeft een LED wat minder vel brandt, of juist doorbrandt.

Om de desbetreffende voorschakelweerstand te bepalen van de LED zijn er een aantal gegevens nodig. Één van deze gegevens is het gewenste potentiaalverschil over de LED. Deze wordt in de specificaties van de leds gegeven. Om de voorschakelweerstand te bepalen hebben we te maken met de volgende voorbeeld situatie:

Een weerstand die in serie geschakeld staat met de LED, aangesloten op een spanningsbron. De spanningsbron levert een spanning van 5,0 Volt, en het gewenste potentiaalverschil over de LED is 2,0 Volt.

Om de voorschakelweerstand te berekenen gebruiken we de wet van Ohm, deze luidt als volgt: U = I × R

Omschrijven geeft: R = U ÷ I

Waarbij:

  • U = Gewenste potentiaal verschil over de weerstand
  • I = Stroomsterkte (In dit geval hebben we een serie schakeling, in een serie schakeling is de stroomsterkte overal gelijk)
  • R = Weerstand, de voorschakelweerstand waar we naar 'op zoek' zijn.

Het gewenste potentiaal verschil betekend dat er 2,0 Volt spanning staat over de LED. Het laatste component in de schakeling is de weerstand. Hierover staat een spanning van 5,0 - 2,0 = 3,0 Volt. De waarde van 3,0 Volt vullen we in de variabele U. De waarde van variabele I kunnen we bepalen aan de hand van de multi-meter. Hiermee kunnen we meten hoeveel stroomsterkte de LED kan 'verdragen'. De waarde die hierbij gevonden wordt vullen we in voor de variabele I.

Dan wordt de rekensom als volgt: R = 3,0 Volt ÷ x Ampère

Spanning (VR) Stroom (mA) Weerstand (Ω)
3 10 300
3 20 150
3 50 60
2.5 10 250
2.5 20 125
2.5 50 50


Bevestiging van elektronica aan de bar

Op de achterkant van de bar wordt de elektronica bevestigd die nodig zijn voor de werking van de bar. De volgende delen zullen aangesloten worden op de achterkant van de bar:

  • PCB's (Negen stuks)
  • Draden (Van de LED naar de PCB)

PCB bevestiging

De PCB bevat een aantal kwetsbare onderdelen. Deze willen we zo optimaal mogelijk beschermen, om ook later nog in dergelijke projecten in de space de componenten en/of de PCB's te kunnen her gebruiken.

Mogelijkheid 1

Om de PCB van boven af te beschermen, nemen we een stuk hout ten grootte van de PCB. Op de plaat bevestigen we naast de vier hoekpunten van de PCB, afstandsmoertjes. Hierop kan het stuk hout bevestigd worden. Er wordt op deze manier bescherming gecreëerd voor de PCB, en er is nog mogelijkheid om de PCB te demonteren wanneer dat nodig is.

Mogelijkheid 2

We plaatsen een stuk schuimrubber op de houten plaat. Op het stuk schuimrubber bevestigen we de PCB.

Draden bevestiging

De draden zijn een zwak punt binnen het geheel. Dit komt namelijk door de soldeer verbindingen tussen de draden en de leds. Soldeer verbindingen zijn slecht bestand tegen frequente en heftige trillingen, hierdoor kunnen ze los raken. Om het project optimaal te laten werken betekend het dat de draden ook optimale bescherming nodig hebben.

Mogelijkheid 1

Afzonderlijk worden de draden aan de leds gesoldeerd. Daarna worden deze draden gebundeld in groepen van 10, met behulp van tie wraps.

Mogelijkheid 2

We nemen per letter een aantal UTP kabels. In een UTP kabel zitten 8 andere kabels. Deze binnenste kabels kunnen gebruikt worden voor het aansluiten van de leds aan de PCB's. We knippen de UTP kabel deels open, aan zowel de uiteinde als het begin, en strippen vervolgens elk begin en einde van de 8 binnenste kabels. We kunnen dus acht leds aan sluiten op één stuk UTP kabel. Hierdoor komen we uit op 5 stukken UTP kabel per letter. (Immers, gemiddeld 40 De 8 verschillende draden binnen de UTP kabel worden omgeven door een plastic hulsel. Waardoor de draden 'georganiseerd' zijn en er geen warboel ontstaat. Deze 5 UTP kabels per letter kunnen gebundeld worden door een metalen beugeltje.

PCB

Een overzicht van het schema en het uiteindelijke ontwerp van de PCB.

Schema van de PCB

Het uiteindelijke printontwerp

Onderdelen

De PCB bestaat uit de volgende onderdelen:

  • ATTiny2313
  • 10x 74HC595
  • 10x ULN2803
  • 80x plaats voor een voorschakelweerstand
  • 2x aansluiting voor een voeding van 5 volt
  • 2x DB9 connector, 1 voor data in en 1 voor data out
  • MAX232 voor de RS232 communicatie

Algemene werking

Elke PCB heeft 1 ATTiny2313 microcontroller(μC) die 10 stuks 74HC595 (schuifregisters) aanstuurt, die elk via een ULN2803 de leds aansturen. De AVR kan via een RS232 aansluiting data ontvangen, en via een 2e aansluiting bytes doorsturen. De bedoeling is om met de PC een reeks bytes naar de eerste module te sturen. Deze module stript zijn eigen 10 bytes van de reeks waarna hij de rest doorstuurt naar de volgende printplaat. Als er een X aantal milliseconde geen data ontvangen is gaat de AVR de data uitklokken naar de schuifregisters waarna hij een update puls geeft en de leds aangestuurd worden.

Firmware

Software

Random drive

Gebruiker Elmer.jpg Elmer
Gebruiker Elmer.jpgElmer de Looff (Elmer) Rol: niet-deelnemer Deskundig met: Arduino, ENC28J60, Elektronica, GnuCash, HTML, LPD8806, Linux, MediaWiki, Mercurial, Netwerken, OpenVPN, Programmeren, Python, SSH, Software, Solderen Beginnend met: Dm-crypt, Javascript Werkt aan: Geen projecten :(

heeft voor demonstratie en testdoeleinden een simpele Python applicatie geschreven om de leds van de bar aan te sturen. Deze is de vinden in de Frack Mercurial repository in de map //frack/projects/ledbar/random_drive.py.

Light

Elke uitgang van de controller bordjes wordt in deze applicatie (en library om nieuwe applicaties op te bouwen) geabstraheerd als Light object. Deze objecten kennen een gewenste helderheid die in te stellen is op 17 niveaus (in stappen van een zestiende van nul naar 100%). Voor elk van de helderheden is er een 16-stappen bit-patroon dat met grote snelheid herhaald wordt.

Alle lichten worden met een helderheid van 0 geinitialiseerd en na elke run van een patroon (16 stappen) wordt gekeken of de gewenste helderheid nog overeenstemt met de huidige helderheid. Als dit niet het geval is wordt deze met een enkele stap aangepast in de richting van de gewenste helderheid. Hierna wordt er weer een volledit bit-patroon afgespeeld voordat de evaluatie opnieuw begint. Deze bit-patronen worden met ongeveer 200Hz verwerkt, is de verwachting, wat zorgt voor een goede kwaliteit pulsbreedtemodulatie. Ook betekent dit dat de helderheid maximaal elke 80 milliseconden met een zestiende verandert, ofwel een volledige overgang van aan naar uit doorloopt in 256 stappen (1.3 seconden).

Mixer en Demo applicatie

De Mixer is het onderdeel dat alle Light objecten bij elkaar houdt. Bij elke iteratie van de mixer worden alle 480 gekoppelde Light objecten geraadpleegt voor de volgende stand van de uitgang. Deze worden dan per 8 gegroepeerd om een byte samen te stellen en samen vormt dit een 60-karakter tekenreeks die teruggegeven wordt.

De demo-applicatie biedt deze tekenreeks vervolgens aan aan de Write methode van de OutputWriter, welke het commando naar de seriele poort stuurt, of print op het scherm (met in deze applicatie wat additionele stap-informatie).

Demo: Random

Het LED-bord wordt geïnitialiseerd met een deel van de LED aan. Deze leds zullen inschakelen en halverwege deze transisite wordt voor elk van de uitgangen weer willekeurig bepaald of deze naar een aan of uit stand zal schakelen. De standaardkans voor een uitgang om op deze wijze getoggled te worden is 25%. Dit betekent dat gemiddeld elke anderhalve seconde er 25% van de leds beginnen met een wisseling van intensiteit (ofwel 0->100%, ofwel 100->0%).

Hieronder links een demonstratie van de functionele test. Hier worden 9 leds aangestuurd (met commando's voor de volle 480) op ~160Hz bij vier niveaus pulsbreedtemodulatie.

Demo: Trail

Het tweede demonstratie programma is er een waar de leds zo geschakeld worden dat er een spoor van verlichting ontstaat. De code is op het moment vast ingesteld om een spoor van 50 leds te maken waarvan de kop en staart 4 leds lang zijn (het spoort gaat door terwijl de leds nog inschakelen).

Door een bug in de huidige LED-bar firmware ontstaan er een aantal sporen wanneer slechts een deel van de uitgangen wordt aangestuur. Wanneer er bijvoorbeeld 80 uitgangen worden aangestuurd, worden de statusen van de shiftregisters gekopieerd naar alle andere gekoppelde bordjes. Op deze manier is 5x meer bandbreedte beschikbaar voor uitermate nette pulsbreedtemodulatie. Dit is in het rechter filmpje te zien.

Gebruik applicatie

Wanneer de applicatie zonder verdere opties wordt gestart wordt de eerste beschikbare USB-seriele poort gebruikt om op 115,200 baud signalen te sturen. De standaard kans van wisselen is zoals genoemd 25%.

Usage: random_drive.py [demo_name] [options]

Options:
  -h, --help  show this help message and exit
  -d DEVICE   Serial device to write to, or "screen" for terminal.
  -p PERCENT  Percentage chance of toggling LED output state.
  -l LIGHTS   Number of lights to generate a pattern for.

Zoals hierboven te lezen kan de kans van wisselen aangepast worden met -p en het uitvoerapparaat kan gekozen worden met -d. Het aantal uitgangen waarvoor er een patroon gemaakt worden kan aangepast worden met -l. Wanneer er minder uitgangen aangestuurd worden zal de update-frequentie hoger liggen.

Voorbeeld van aansturen:

python random_drive.py random -d screen -p 5 -l 80

Bovenstaande zal de Random demo uitvoeren en alle LED-informatie naar de terminalsturen, dit om debugging makkelijker te maken. Tevens is veel scrollende output op een terminal een duidelijk kenmerk van een UNIX-guru ;-) Bovendien zal elk commando goed zijn om 80 leds aan en uit te schakelen (of in dit geval, 10 bytes te printen).

Hieronder de manier om de uitvoer naar de tweede USB-seriele poort te sturen, met een aangepaste 45% kans op wisselen van uitgang. Wanneer er geen aantal te schakelen uitgangen wordt aangegeven valt dit terug op de standaard 480 (80 uitgangen * 6 bordjes):

python random_drive.py random -d /dev/ttyUSB1 -p 45

Kostenoverzicht

Dit kostenoverzicht geeft weer wat de totale investering wordt om de Ledbar te realiseren. Hierbij nemen we de volgende ontwerp keuze in acht:

  • leds individueel aangestuurd, Meerdere effecten/overgangen zijn mogelijk.

Kosten PCB en componenten

Aantal (Bestelnummer) Product Per stuk Totaal
50 HKR10S-ND CONN SOCKET IDC 10POS W/STR TIN 0,26140 € 13,07
100 ULN2803APG(ONHZN-ND IC DRIVER DARL 8CH 50V .5A 18DIP 0,42870 € 42,87
10 ATTINY2313A-PU-ND IC MCU AVR 2K FLASH 20MHZ 20DIP 0,72640 € 7,26
12 296-6940-5-ND IC DUAL EIA-232 DRVR/RCVR 16-DIP 0,49000 € 5,88
50 1189-1421-ND CAP ALUM 1UF 50V 20% RADIAL 0,09520 € 4,76
135 490-5401-ND CAP CER 0.1UF 50V RADIAL 0,08460 € 11,42
12 CTX1081-ND CRYSTAL 14.7456 MHZ SERIES FUND 0,25600 € 3,07
25 BC1004CT-ND CAP CER 18PF 50V 5% RADIAL 0,22200 € 5,55
110 296-4619-5-ND IC 8BIT SHFT REG TRI-ST 16-DIP 0,34940 € 38,43
500 CF14JT56R0CT-ND Weerstand 56 ohm 0,01088 € 5,44
500 CF14JT120R0CT-ND Weerstand 120 ohm 0,01088 € 5,44
10 PCB € 169,77
Totaal € 312,96


Kosten platen + Leds

Product Aantal Totale prijs
Hout 1 €10,75
Scharnieren 4 €17,07
leds 800 €14,95

Kosten totaal

Bestaande uit:

  • PCB: € 312,96
  • Algemene designkosten: €42,75

Maakt een totaal van € 355,71.

Project fotoboek