Inhoudsopgave:
- Stap 1: Belangrijkste onderdelen – Dingen die ik moest vinden/krijgen/kopen
- Stap 2: Waarom twee frambozentaarten?
- Stap 3: Hoe communiceren de twee taarten?
- Stap 4: Python-draden
- Stap 5: Jasper & Jasper-aanpassingen
- Stap 6: Twee assen aan de schedel toevoegen
- Stap 7: Adaifruit Hat Servo Driver
- Stap 8: Relaiskaart
- Stap 9: Teensy en de ogen
- Stap 10: tamboerijn
- Stap 11: Plasmalamp
- Stap 12: Hoe u het 120v-licht laat flikkeren?
- Stap 13: Het platform/tafel
- Stap 14: De rest
- Stap 15: Montage/Tuning/Tweaking
Video: Homunculus - het mechanische mystieke orakel waarzegster - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Ok - dus wat moet dit zijn … het achtergrondverhaal hierover dat ik mensen vertel, is dat de schedel van een 19e-eeuwse mysticus is wiens graf werd beroofd en dat zijn schedel in een of andere carnavalsshow in de vroege jaren 1900 belandde. Ik vond het in een kelder van een vervallen Victoriaans huis en bouwde het rekwisiet om tot een 21e-eeuwse waarzegger - 'wie kan de ether van het internet bereiken, vertel je je fortuin, wie je vrienden en vijanden zijn, vertel een grap en lees mijn e-mail en agenda voor de dag'.
Wat is het echt - Nou, het is de geweldige Jasper-software die op een Raspberry pi draait en ik heb een 2-kanaals pratende Linburg-schedel gemaakt die het woord doet, samen met een heleboel toeters en bellen (en een tamboerijn) om eraan toe te voegen.
Dit was een super ambitieus project. Veel verschillende media om mee te werken - meerdere taarten, houtbewerking, schilderen, veel bedrading, veel codering in python, ardunio-codering, veel kleine bedrading, 120v-bedrading, pi 'hats' externe borden, relaisstuurprogramma's en relais, 24v voedingen, dingen laten bewegen - een schedel met 2 assen en het bonzen van de tamboerijn.
Ik ga niet stuk voor stuk super gedetailleerd in op elk onderdeel, vooral de python-codering, maar ik zal proberen elk onderdeel kort te beschrijven en afbeeldingen toe te voegen.
Ook over de Python-voorbeelden - ja, ik had veel meer objectgericht kunnen zijn op de codering, maar mijn Python-ervaring toen ik aan het project begon, was vrij eenvoudig en natuurlijk is het gemakkelijker te knippen en plakken als je haast hebt vs. stop met wat je aan het doen bent, herschrijf het correct en ga verder.
Stap 1: Belangrijkste onderdelen – Dingen die ik moest vinden/krijgen/kopen
Raspberry Pi
Twee van hen
www.adafruit.com/products/1914?gclid=CjwKE…
Jasper
“Jasper is een open source platform voor het ontwikkelen van always-on, spraakgestuurde applicaties”
jasperproject.github.io/
Adafruit ‘ogen’
learn.adafruit.com/adafruit-1-44-color-tft…
Teensy – Hersenen voor de ogen
www.adafruit.com/product/2756
Hoe de 'ogen te maken met behulp van teensy en de 1-44 kleuren tft-schermen'
learn.adafruit.com/animated-electronic-eye…
16-kanaals Serveo-hoed
learn.adafruit.com/adafruit-16-channel-pwm…
De klassieke Lindberg-schedel
www.amazon.com/Lindberg-scale-Pirate-skull…
4-kanaals relaisbord dat werkt met een Raspberry Pi
www.amazon.com/Sizet-Channel-Module-Arduin…
Drukmagneet
(Dit is op veel verschillende plaatsen verkrijgbaar)
www.aliexpress.com/item/High-quality-DC-12…
USB-microfoon
Dit is op veel verschillende plaatsen verkrijgbaar
www.samsontech.com/samson/products/micropho…
Diversen
Twee servo's die ik had liggen, servohoorns die ik in de mand van $ 1 in de hobbywinkel vond. Servo verlengkabels, USB/Bluetooth speaker, moerbouten, MDF, Hot Glue, oude vacuümbuizen, diverse lampstukken & bits, een oude Samsung S5 mobiele telefoon, plaatstaal, koperdraad, kopertape, spijkers, gewone lijm, etc. enzovoort.
Stap 2: Waarom twee frambozentaarten?
Oorspronkelijk had ik de schedels willen synchroniseren met de spraak, maar nadat ik Jasper had geïnstalleerd en had bepaald wat ik allemaal wilde doen, alle dingen die bewegen, dacht ik dat het misschien beter was om al het werk in twee taarten te verdelen. Ik had een deadline om dit te laten doen en ik wilde niet terug moeten gaan als ik een soort prestatieprobleem had. Nu het werk gedaan is, geloof ik dat ik het met een enkele Pi had kunnen doen, op dat moment dacht ik dat het het beste was om een pi Jasper te laten besturen en een 2e pi de servo's en relais aan te drijven, zodat ik een duidelijke afbakening kon hebben tussen de werk. Het was ook gemakkelijker voor de ontwikkeling. Ik kon alles correct krijgen in Jasper zonder me zorgen te hoeven maken over servo's en relais. Op de andere pi kon ik me concentreren op het besturen van de servo's, de timing van dingen - lichten aanzetten, servo's verplaatsen, enz. En me geen zorgen hoeven te maken over problemen met stem / luidspreker / microfoon.
De keerzijde hiervan is dat ik de mogelijkheid verloor om de schedelsynchronisatie zijn kaak te laten bewegen met de spraak, maar na te hebben gekeken naar Grant Imahara's werk voor de The Late Late Show die 'Geoff' maakte, dacht ik dat het er goed genoeg uit zou zien.
www.popularmechanics.com/science/a5473/4350…
Stap 3: Hoe communiceren de twee taarten?
Er zijn een paar verschillende manieren waarop u dit kunt doen. Ik ging old school en besloot te gaan met een seriële verbinding. Het heeft slechts drie draden nodig tussen de twee Pies (Tx, Rx & gnd) en een kleine hoeveelheid code om een seriële verbinding van Pi#1 naar Pi#2 te openen en er iets naar te sturen. Pi # 2 opent een seriële verbinding om gegevens te lezen en stelt in een strakke lus die van zijn seriële verbinding leest. Wanneer het wat tekst ontvangt, kijkt het of het overeenkomt met een commando (Spreken, lichten aan, lichten uit, praten uit, enz.) en doet wat het moet doen. De keerzijde van de seriële verbinding is dat er een kleine vertraging is vanaf het moment dat de opdracht wordt verzonden en het proces van de opdracht. Pi#2 zit in een lus met een kleine vertraging bij het lezen. Dus ik moest een beetje tempo maken. Ook voor toekomstige multi-pi-projecten is het goed om te weten dat ik twee Pies kan laten communiceren en GEEN internet nodig heb om het te doen.
Stap 4: Python-draden
Om wat extra complexiteit aan alles toe te voegen, moest ik uiteindelijk Python-threads op Pi # 2 gebruiken, zodat ik meerdere verzoeken kon verwerken en ze tegelijkertijd kon verwerken. Ik moest bijvoorbeeld kunnen beginnen met praten - het hoofd van de schedel naar links / rechts bewegen terwijl de kaak op en neer gaat, maar wat als Pi # 1 om de een of andere reden een fout heeft en Pi # 2 niet kan vertellen om te stoppen met praten, zou de schedel voor altijd praten. Dus ik moest de schedel laten zeggen dat hij zichzelf na een tijdje moest afsluiten. Om dit te doen was het het gemakkelijkst om een draad af te spinnen. Binnenin de draadroutine om te praten is er een code die na een bepaalde tijd stopt met praten, het hoofd en de kaak reset en verlaat. Hetzelfde voor de tamboerijn, ik had het nodig om af te trappen net voordat de schedel stopte met praten, dus ik draai nog een draad voor de tamboerijn en alles werkt samen en de code voor de hoofdbeweging is volledig gescheiden van het bonzen van de tamboerijn - hetzelfde voor het aanzetten van de lichten en de ogen alle draden kunnen allemaal tegelijk lopen.
De hoeveelheid code die in Python nodig is om threads te gebruiken, is vrij klein, maar het is stompzinnig en het kostte wat tijd om mijn hoofd erbij te krijgen, maar het blijkt heel goed te werken. De mogelijkheid om threads te gebruiken is een goed hulpmiddel om in de gereedschapskist te hebben als je een Raspberry Pi-ontwikkelaar bent.
Stap 5: Jasper & Jasper-aanpassingen
De Jasper-site is DE bron om het op een pi te installeren, welke voice reco's te gebruiken, hoe te configureren, nieuwe modules te schrijven, alles - en het is gratis! Het is echter geen eenvoudige installatie. Veel stappen, veel pakketten om te installeren en vervolgens te configureren. Ik doe dit soort werk voor de kost en het was nog steeds iets dat ik als een uitdaging zou beschouwen. Tegen de tijd dat ik klaar was met dit project, raakte ik behoorlijk diep in Japer en maakte ik veel aanpassingen om tegemoet te komen aan wat ik probeerde te doen.
Enkele wijzigingen die ik heb aangebracht:
Passief luisteren verwijderd en een GPIO-poort gebruikt om actief luisteren te starten met een zelfgemaakte snijschakelaar. Dit zorgde voor meer een soort 'arcade' versus het gebruik van passief luisteren.
Ik heb de parameters zo nodig gewijzigd om met mijn microfoon te werken - ik moest door drie verschillende USB-microfoons gaan totdat ik er een vond die goed voor mij zou werken. Ik moest ook enkele van de drempelwaarden in de code aanpassen. Dit was voor mij persoonlijk het meest pijnlijke deel van het gebruik van Jasper.
De seriële verbindingscode toegevoegd aan alle modules om een seriële verbinding te openen, vertel de slaaf pi wat hij moet doen 'ogen op', 'praten', 'bang tamboerijn'
Modules 'wie zijn mijn vrienden', 'vertel me een grap', 'lees mijn schema uit mijn CRM-agenda', 'vertel me mijn fortuin' toegevoegd. Sommige daarvan vereisten het maken van REST-aanroepen naar cloudgebaseerde software om gegevens te verkrijgen. Er zijn veel kant-en-klare modules die ik als voorbeelden heb gebruikt, samen met documentatie op de site om me te helpen krijgen wat ik nodig had.
Stap 6: Twee assen aan de schedel toevoegen
Ik begon met de basis Lindberg-schedel. Ik had oorspronkelijk gedacht aan een schedel met 4/5 assen, maar de tijd die het zou kosten om de python-code te schrijven om de bewegingen te coördineren en de hardware voor de beweging uit te bouwen, zou de tijd overschrijden die ik had om de rest van het project af te ronden. (Ik weet niet of het al bestaat, maar een stukje software op een Pi of Ardunio om een schedel met meerdere assen aan te drijven, dat zou op zich al een heel gaaf project zijn.) Dus één as – de beweging van de kaak was te zwak, dus Ik heb de hoofdbeweging toegevoegd en met de LCD-ogen die werken, ben ik blij met de resultaten.
Dus door te kijken naar werk dat anderen met pratende schedels hebben gedaan, kwam ik erachter wat ik moest doen, twee servo's en servohoorns, een stuk MDF, hete lijm, kabelbinders, vallen en opstaan - ik had het fysieke deel hiervan op zijn plaats. Basis Pi-programmering van het uurwerk duurde eigenlijk langer. Ik moest de waarden voor de PWM voor beide servo's achterhalen. Ik ben begonnen met de basis helemaal open/dicht draai het hoofd helemaal naar links/rechts. Maar het zag er niet goed uit. Dus maakte ik tussenbewegingen, kaak volledig open, vertraging.1, kaak gedeeltelijk gesloten, geen vertraging, pot gedeeltelijk open, vertraging,.etc, enz. Hetzelfde voor de hoofdbeweging, heen en weer slaan zag er waardeloos uit, dus tussentijdse bewegingen en vertragingen maken het ziet er beter uit.
Een ongelukkig ding waar ik geen tijd voor had om door te werken, is dat al het materiaal dat ik op de schedelkap heb aangebracht - de metalen strip, spikes, koperen kroon en bedrading de algehele schedel zwaarder heeft gemaakt en de servo het moeilijk maakt, dus het gaat langzamer en niet zo ver. Een servo met een hoger koppel zou hier waarschijnlijk helpen, maar ik had geen tijd en geld meer …
Stap 7: Adaifruit Hat Servo Driver
Adafruit heeft geweldige voorbeelden van het gebruik van hun producten. Wat een uitdaging was, was uitzoeken wat precies de waarden waren voor elk van de servo's - midden, uiterst links en rechts. Het is niet 0, 90, 180 zoals je zou denken. Het was maar een paar regels lang python-programma, maar het kostte enkele uren aan tweaken om dit voor beide servo's te doorstaan.
Stap 8: Relaiskaart
Ik heb dit op Amazon opgepikt. Veel websites verkopen wat lijkt op exact dezelfde eenheid. Het kostte wat experimenteren hier, maar het omdraaien van de relais kost slechts een paar regels code en je hebt een NC- en NO-verbindingen op de relais, waardoor het nog eenvoudiger wordt. Een andere uitdaging hier is dat een GPIO-poort / pin geen 1: 1-overeenkomst is met de pin op de Pi. Het kostte wat moeite om mijn hoofd erbij te krijgen.
Stap 9: Teensy en de ogen
Ik heb dit 100% van de Adafruit-site gehaald. Oorspronkelijk had ik een paar kreupele LED-verlichte pingpongballen die ik ging gebruiken, maar toen ik dit eenmaal op hun site zag, moest ik het hebben. Ik had hiervoor geen Ardunio-ervaring, maar ik volgde blindelings de voorbeelden op hun site en had deze in ongeveer ½ van een dag werkend. Ook - sinds ik het programma naar de tiener heb geflitst, behoudt het het en wanneer je het opstart. De Ardunio start in ongeveer 3 seconden op en verlicht de ogen. Dus alles wat ik moest doen om de ogen aan het werk te krijgen, was 12v aansluiten op een van de relais en de teensy & eyes aanzetten en magie gebeurt!
Het monteren van de LCD-schermen in de schedel was SUPER pijnlijk. 7 kleine draden op elk LCD-scherm, dus in totaal 14 draden en proberen de schedel eruit te slijpen en ze recht te krijgen en geen draad te breken - wat vaak gebeurt, was erg pijnlijk. Dus programmeren van gemiddelde moeilijkheidsgraad - moeilijk monteren. Net het tegenovergestelde van wat ik had verwacht. De Teensy zit achter de ogen onder de MDF-plaat die de twee servo's vasthoudt.
Stap 10: tamboerijn
Nou, ik herinner me altijd het hoofd in de kristallen bol in het Haunted Mansion en de tamboerijn die ronddreef terwijl ze contact maakte met de geesten, dus ik moest zoiets hebben voor dit project. Aangezien de schedel van een voormalige gedachtenlezer/ziener was, moeten de geesten mensen laten weten wanneer ze aanwezig zijn J. Ik vond het grootste krachtigste push-pull-relais dat ik kon vinden. Daarna heb ik het van 12v naar 24v overgeschakeld met een reserve-laptoplader die ik had. Ik moest een aantal verschillende versies van het mechanisme maken, maar mijn derde iteratie werkte het beste. Ik moest knoeien met hefboomlengte, uitlijning, enz. Mijn grote fout was om dit allemaal met hout/MDF te doen. Toen ik dit voor het eerst in elkaar zette, draaiend op 24v, sloeg de solenoïde zo hard op de tamboerijn dat hij zichzelf uit elkaar scheurde. (Bij 12v was het niet sterk genoeg) Na verloop van tijd met een houten as gemonteerd in MDF en dingen schilderend werd het hele ding moeilijker / moeilijker te verplaatsen, wat betekende dat de solenoïde het moeilijker had om naar buiten te duwen als hij bekrachtigd was EN een moeilijkere tijd om terug te keren. Dus moest ik een extra terugstelveer toevoegen - waarvoor de solenoïde energie moet verspillen wanneer deze wordt bekrachtigd. Dus het eindigde met het bonzen van de tamboerijn aan de trage kant. De volgende keer bouw ik dat deel ervan in metaal - bronzen bus, metalen as, enz. En vermijd dit probleem.
Stap 11: Plasmalamp
Omdat ik geen Jacobs-ladder of een andere slechte energiebron voor gekke wetenschappers ging bouwen voor het project, had ik een soort 'energie' nodig om de schedel aan te drijven. Ik nam mijn oude Samsung Galaxy S5, deed een fabrieksreset en laadde er een energiebal-app op. Ik moest een andere app laden die de telefoon niet in de schermbeveiligingsmodus zou laten gaan om hem actief te houden in de app.
Stap 12: Hoe u het 120v-licht laat flikkeren?
WAARSCHUWING –
Dit is knoeien met 120v AC-stekker in de wandstroom hier. Als je niet weet wat je doet, doe het dan niet
WAARSCHUWING -
halloweenpropmaster.com/u-build-it3.htm
Op deze site staat de beste uitleg hoe je dit kunt doen. De kosten van de starter zijn super goedkoop en ik heb een reserve verlengsnoer gestript dat ik had. Ik heb er een paar gebouwd en heb ze tijdens Halloween gebruikt en ze werken heel goed, er zijn geen zekeringen gesprongen, geen oververhitting, enz. Ik heb ze zonder problemen uren achter elkaar gebruikt. Dus voor dit project heb ik een van de verlengsnoeren met de starter inline genomen en deze aangesloten op een van de vier relais op het bord. Een paar regels GPIO-code zullen het uit- en inschakelen. Het begint ook meteen te werken, geen opwarmtijd.
Stap 13: Het platform/tafel
Ik heb nogal wat 'schedel op een tafel', 'Frankenstein's hoofd op een tafel' gekke wetenschapper-achtige rekwisieten gezien en ik besloot dat ik die weg wilde gaan. Het zou me een kans geven om meer dan alleen de pratende schedel uit te proberen. Ik ontdekte de basistafelgrootte en bouwde deze uit ¼ MDF. Het gebruik van een tafelzaag maakt dat vrij eenvoudig. Mijn projecten zijn meestal metalen dingen, dus bouwen met hout was enigszins nieuw voor mij. Ik knipte de basisstukken uit en had mijn 4 zijkanten van de doos en een bovenkant vrij snel gemaakt. Waar ik een harde les mee heb geleerd, is dat ik een lijmpistool heb gebruikt om ze in elkaar te zetten. Wat ik ontdekte is dat dit niet de manier is om het te doen. Alle stukjes vielen uit elkaar zodra ik dat verdomde ding oppakte! Dus ik sneed wat extra stukken van 1 vierkant om de hoeken te versterken en hout aan elkaar gelijmd / genageld. Lesje geleerd. Ik legde wat trim tussen de bovenkant en zijkanten van het platform, gelijmd en genageld op zijn plaats. Spot plamuur om de gaten op te vullen en het was klaar om de rest van de componenten erop te monteren.
Voor de rest heb ik me laten inspireren door afbeeldingen die ik op internet heb gezien. Om de schedel te ‘antieken’ heb ik geprobeerd een donkere vlek te gebruiken. Het werkte niet; het plakte niet aan het plastic. Dus ik probeerde de schedel te schilderen met een gebroken wit en legde toen de vlek erop. Het werkte veel beter. Ik weet dat er veel technieken zijn om dit te doen en ik ben blij met de manier waarop het is verlopen. Kopertape die ik nog had liggen van een ander project dat ik gebruikte voor de schedelkap en rond de jukbeenderen. Ik schilderde op de vlek op de rest van de niet-zwart geverfde items om het die antieke/oude look te geven.
De rest van de stukjes en bobbels had ik nog liggen van andere projecten. Alle koperen stukken zijn afkomstig uit een lampenwinkel. Ik heb de snijschakelaar gemaakt van wat afvalmateriaal en de knop aan het uiteinde is nog een lampstuk. De buizen vond ik samen met de isolatoren op een elektronische overschotplaats. Punk rocker spikes die ik had van een ander post-apocalyptisch project. Plaatstaal en koperdraad van de ijzerhandel en wat PVC-buis voor zijn wervels.
Voor de poster vond ik een posterafbeelding van een oude goochelaar op internet en met wat Photo Shop-magie veranderde de naam.
Stap 14: De rest
Ik heb inspiratie gehaald uit afbeeldingen die ik op internet heb gezien. Om de schedel te ‘antieken’ heb ik geprobeerd een donkere vlek te gebruiken. Het werkte niet; het plakte niet aan het plastic. Dus ik probeerde de schedel te schilderen met een gebroken wit en legde toen de vlek erop. Het werkte veel beter. Ik weet dat er veel technieken zijn om dit te doen en ik ben blij met de manier waarop het is verlopen. Kopertape had ik nog liggen van een ander project dat ik gebruikte voor de schedelkap en rond de jukbeenderen. Ik schilderde op de vlek op de rest van de niet-zwart geverfde items om het die antieke/oude look te geven.
De rest van de stukjes en bobbels had ik nog liggen van andere projecten. Alle koperen stukken zijn afkomstig uit een lampenwinkel. Ik heb de snijschakelaar gemaakt van wat afvalmateriaal en de knop aan het uiteinde is nog een lampstuk. De buizen vond ik samen met de isolatoren op een elektronische overschotplaats. Punk rocker spikes die ik had van een ander post-apocalyptisch project. Plaatstaal en koperdraad van de ijzerhandel en wat PVC-buis voor zijn wervels.
Stap 15: Montage/Tuning/Tweaking
Dus hier was mijn bouwproces:
#1 Installeer Jasper op een Pi en laat het werken.
#2 Meerdere microfoons gekocht en tweaken totdat ik enig succes heb.
# 3 Installeer op de 2e Pi de Adafruit-hoed en begrijp hoe u de servo's moet verplaatsen. Haal de servo's in de schedel en begrijp de waarden die ik nodig had om ze te verplaatsen.
#4 Bouw een testbasis voor de schedel, zodat ik er in mijn kantoor aan kan werken. Tweak, re-tweak, tweak nog wat.
#5 Monteer alle elektrische componenten op een plexiglas bord. Taarten, relaiskaart, USB-voedingen en gerelateerde draden.
# 6 Bouw de Adafruit-ogen. Bewijs voor mezelf dat ze gewoon spanning nodig hebben om alles te laten werken. Ik wist dit niet toen ik aan dit deel begon.
#7 Doe een proof of concept van het verzenden en ontvangen van seriële gegevens tussen de twee taarten. Schrijf een lusroutine voor de 2e Pi met de commando's die ik nodig had - praat aan/uit, enz. Test het met wat voorbeeldcode op Pi#1. Nog geen Jasper.
#8 Voeg de seriële code toe aan de Jasper-code - bewijs dat ik basisbewegingen kan krijgen als Jasper praat.
#9 Begin te rommelen met het relaisbord. Voeg de code toe om de ogen in te schakelen.
#10 Voeg code toe om de 120v aan te zetten. Bouw de solenoïde en tamboerijn op een apart platform om erachter te komen hoe het zou moeten werken.
# 11 Zorg dat de ogen in de schedel worden gemonteerd.
#12 Bouw het platform waarop alles wordt geassembleerd. Monteer alle stukken op het platform, maak de stalen basis van de schedel om deze vast te houden, voeg de tamboerijncomponenten toe.
#13 Probeer de taarten en het bord van het huis naar de garage te krijgen en zoek uit hoe je het binnen in het platform kunt krijgen.
# 14 Begin met afstemmen. Meer afstemmen, doorgaan met afstemmen. Realiseer me dat ik de Python-code multi-threaded moet maken, zodat alle acties kunnen samenwerken.
#15 Besluit om de energiebal onder de vacuümbuizen toe te voegen. Zoek uit dat ik dit kan doen met een oude mobiele telefoon. Maakte dat werk in minder dan een dag.
# 16 Ga door met het toevoegen van details. Spikes, koperdraad, buizen, antiek de schedel. Blijf afstemmen en testen. Verf, retoucheer en repareer dingen die losraken, re-engineer/versterk dingen die uit elkaar vallen.
#17 Test & tweak Maak je klaar om het aan andere mensen te laten zien.
Aanbevolen:
Anna, de waarzegster: 3 stappen (met afbeeldingen)
Anna, de waarzegster: Dit is een inspiratie van Zoltar. Er zijn zoveel versies en ik wilde mijn eigen cabineversie maken. We hebben een waarzegster in een hokje die naar haar kristallen bol staart en je toekomst vertelt :) De build is een mashup van papierambachten, licht