OiO - een bureaulamp met een ziel (5 / 7 stap)

Stap 5: De code, de ziel


Het meest interessante deel, het is waar al je harde werk tot nu toe vruchten zullen afwerpen. We hebben gewerkt om te zorgen voor alle fysieke details, nu, wat over de emotionele ones? : p

Om te beginnen moet u naar de Arduino IDE geïnstalleerd voor uw OS, dan u handmatig installeren de Adafruit bibliotheek moet om te kunnen bepalen van de NeoPixel in het geval dat je hebt besloten om ze te gebruiken.

Bijgevoegd is de volledige code van oiO vanaf het moment dat ik dit schrijf. Hij krijgt definitief meer code en onderwijs als ik ga :) Merk op dat de code gekalibreerd is om te werken met de sensoren en de servo's die ik gebruikte, dus misschien is dat het niet zinvol voor u wanneer u het probeert. U zult moeten vele proeven doorlopen totdat je de goede waarden (meer hierover in de volgende sectie)

Introductie

Voor mij is het hele punt achter dit project dat oiO interactieve en autonoom, op zijn eigen. Hij moet blijven verstrekken zijn hoofdfunctie, geeft je licht, maar hij heeft ook zijn humeur, en stemmingswisselingen, verandert van houding en communiceert met de gebruiker.

Maar er was een uitdaging voor mij, samengevat in de onderstaande punten

1) hoe kan ik 3 servo's verplaatsen op hetzelfde moment, of afzonderlijk indien nodig

2) hoe kan ik verlichten de bewegingen, en voeren sommige versoepelen om te simuleren een vloeiende bewegingen. Ook hebben sommige controle op de snelheid van de servo's te simuleren van verschillende gedragingen.

3) hoe kan ik lezen en controleren van alle sensoren en servo's parallel te weten dat Arduino niet natively multitasking steunt.

4) hoe kan ik van oiO gedrag geloofwaardig en vermijden van robotic reacties op soortgelijke ingangen, als ik wil hem anders reageren voor dezelfde input (geluid en nabijheid), alle dit wetende dat de Arduino gewoon de code van boven naar beneden en vervolgens lussen leest

5) oiO dient te beschikken over een gevoel voor tijd voorbij, een wet volgens het.

Dit alles gebeuren met 32KB dynamisch geheugen beschikbaar op de Arduino voor de code, en terwijl het houden van het eenvoudig!

Na 2 dagen van het schrijven van code, ik denk dat ik mijn doelen bereikt en beantwoordt de vijf vraag op een acceptabele wijze met enkele compromissen.

We kunnen debatteren over hoe goed ik deed dit en hoe geloofwaardig is, maar einde van de dag, de video die je zag, is met behulp van slechts 17% van het geheugen van de code, en er is veel ruimte voor verbeteringen, die ik zal blijven nastreven. maar omdat u de code hebt, schrijf me een suggestie, of gewoon het delen van uw verbeteringen.

In de volgende secties zal ik deel enkele fragmenten van code die ik voelde ik wil bespreken, laat ik aan jou lezen van de volledige code en gevoel van het maken, ook het is zwaar commentaar om te helpen beter te begrijpen, en voor mij te herinneren de details 3 maanden vanaf nu:). Ik hoop dat ik niet over doen!

Punten 1 & 2

3 servo's tegelijkertijd verplaatsen op Arduino is niet mogelijk native. dus moest ik een functie schrijven die duurt 3 servo's en 3 doel posities voor elk, naast een versoepeling factor om te controleren de snelheid en het gemak van servo's. De functie bepaalt de servo's met behulp van writeMicroseconds() in plaats van write(), als de voormalige geeft meer controle vanwege zijn breder scala van waarden, beheersing van de servo's door het instellen van de exacte pulsbreedte van PWM in milliseconden, in plaats van de laatste die gebruikers hoekige graden.

De functie is:

 void <strong>move3Servos</strong>(Servo <strong>servo1Name</strong>, float<strong> target_pos1</strong>,Servo <strong>servo2Name</strong>, float <strong>target_pos2</strong>,Servo <strong>servo3Name</strong>, float <strong>target_pos3</strong>,float <strong>easing</strong>)<br> 

- target_posX: grenzen aan begin en eind posities, tussen 600 en 2400 mS heeft, enkele servo's werken tussen 1000 en 2000... Please check je servo's grenzen tests of gegevensblad voordat u de waarden

-versoepeling: is een waarde tussen 0,0 en 5.0, waar:

-waarden tussen 0.0 te 1.0 oorzaak de servo's om te beginnen verkeer snel maar eindigen slowely, waarden van rond nul (ex: 0.05) geeft veel langzamer/gewenste reactie van vloeiendheid, waarde van 0.1 is snel genoeg

-waarden tussen 1.0 en 5.0, worden niet beschouwd als versoepeling van factoren, zoals ze een verandering in gedrag veroorzaken, veroorzaken servo's verplaatsen lineair beginnen om te stoppen met x stappen afhankelijk van de opgegeven waarde. Waarde van 2.0 is schildpad snelheid, terwijl een waarde van 5.0 relatief snel is.

Om te simuleren gelijktijdige controle van de 3 servo's, het besturingselement van de functie elke servo één stap tegelijk, maar in een rij, dat wil zeggen, verplaatst servo1 een heel klein stapje, dan beweegt servo 2 een heel klein stapje, vervolgens servo3 op dezelfde manier, dan dit weer doet en agin in een lus tot alle servo's had bereikt de standpunten van hun doel. Het eindresultaat, alle servo's lijken te hebben verplaatst op hetzelfde moment naar hun doel-posities.

Punten 3 & 4

Om aan te pakken dit, was de truc om te scheiden lezen de sensoren waarde van daadwerkelijk optreden op de servo's en de ogen. Dit kan ik maken tellers die geluid tellen en de daaruit voortvloeiende detecties nabijheid en timing tussen die keren ook te meten. Deze tellers en tijdstempels kunnen later zelfstandig worden gebruikt in het deel die inwerken op de servo's en de ogen. Ik test voor waarden van de items en zie hoe lang het duurde de gebruiker tussen elke detectie. Dit is bijvoorbeeld hoe oiO onderscheid kan maken tussen een gebruiker hem 3 keer op snelle wijze benadert, aldus oiO boos met rode ogen en schokkerige bewegingen te maken, of als de gebruiker hem achter elkaar in een langzame manier benaderde, waardoor oiO rustiger met warmere kleur van de ogen en sierlijke bewegingen...

In een notendop, sensoren waarde eerste krijgen, dan treden later. maar aangezien de Arduino loop snel genoeg loopt, de gebruiker zal de vertraging merken.

Punt 5

Aangezien de Arduino niet met een externe timing bron verbonden is, kan niet dus het vertellen de absolute tijd, dus oiO is met behulp van de interne timing van Arduino met behulp van de functie millis() die het aantal milliseconden sinds de start/reset van de Arduino telt. De toonbank rolt over na de aprox. 50 dagen, meer dan genoeg voor de hele levenscyclus van oiO. Dit moet genoeg zijn voor het berekenen van bijvoorbeeld: 15 minuten verstreken zo doen dit en dat, of is het 60 seconden die de gebruiker niet met oiO communiceren.

Dit is bijvoorbeeld hoe oiO zal detecteren die de gebruiker niet interactief met hem sinds 1 uur, en dienovereenkomstig begint Dommelen, gevolgd door diepe slaap!

 ... 
 //oiO will go to sleep if no action by user for more than 'sleepIfNoActionTimer' seconds 
 if((millis() - lastAction) > sleepIfNoActionTimer) { doseOff(); } 
< p > //oiO elke min van de 'sneezeTimer' (zal niet worden opgenomen als een handeling van de gebruiker) zal niezen < /p > if(millis() % sneezeTimer == 0) {sneeze();} <p>//oiO will sneeze each 'sneezeTimer' min (will not be recorded as a user action)</p>if(millis() % sneezeTimer == 0) { sneeze(); } ... 

Controle van de ogen

Ik heb de Adafruit bibliotheek gebruikt als ze bieden interessante functies om te controleren de NeoPixels, voegde ik heb enkele functies zoals setEyesColor() en dimmer() te gemakkelijk toegang hebben tot het instellen van beide ogen kleuren en ook bepalen het dimmen op een bepaalde kleur met een bepaalde snelheid en richting.

 void dimmer(int a, int b, int red, int green, int blue,int fadeDirection, int stepSpeed) 

een: min helderheid

b: max helderheid

r, g, b: zijn de RGB-kleuronderdelen, elke kan hebben een waarde tussen 0-255

fadeDirection: 1 kan = omhoog, 2 = omlaag, 3 = updown

stepSpeed, vertraging in milliseconden tussen kleur vervagen stappen

Conclusie

Ik sterk aanbevelen lezen van de code en begrijpen en breng indien nodig wijzigingen. Alle variabelen in de fase van de initialisatie van de code (dwz vóór en binnen de setup()) moet worden ingesteld volgens uw behoeften.

Gerelateerde Artikelen

Hoe te maken van een ziel monster hiphop beat

Hoe te maken van een ziel monster hiphop beat

dit is de kunst om een ziel monster hiphop beat. vergelijkbaar met de werken van de vroege kanye west op college dropout en gewoon blaze op diplomatieke onschendbaarheid.Stap 1: Get Some motiverende voedsel Dit is essentieel! U moet een goed function
Arduino Bluetooth gecontroleerde bureaulamp - met Relay Kluisje

Arduino Bluetooth gecontroleerde bureaulamp - met Relay Kluisje

Vandaag zal ik u tonen hoe te bouwen uw eigen Bluetooth gecontroleerde bureaulamp met arduino uno.Voor dit project zul je om te bouwen van de kluis van het ralay dat u kunt het hier vinden:(Opmerking: als u niet wilt om te bouwen van een kluisje kunt
Retro Fit een bureaulamp met LEDs

Retro Fit een bureaulamp met LEDs

dit instructable detailleert de stappen die ik heb uitgevoerd als u wilt wijzigen een bureaulamp, al moest ik gebruik maken van LED's in plaats van een fluoro-buis.De projectkosten van dit me bij dit $49.95 Australische tijd voor de strip 30 LEDs.Ik
LED bureaulamp met behulp van sugru, ikea kit voor nick-nacks en kitronik

LED bureaulamp met behulp van sugru, ikea kit voor nick-nacks en kitronik

Ik heb nooit lijken te hebben genoeg licht op mijn bureau deze dagen, het licht van mijn bureaulamp lijkt te werpen te veel schaduw en duurt een beetje te lang worden helder met een moderne energiebesparende lamp.Ik zag de nieuwe Kitronik Desk Lamp K
How To Cook Gebakken Turkije vleugels met creatieve ziel!

How To Cook Gebakken Turkije vleugels met creatieve ziel!

Items:Glazen ovenschaal en aluminiumfolieIngrediënten:Turkije vleugelsUw favoriete merk kruiden worden opgeslagen of maak uw eigen!3 tsp. zout en peper mengsel2 tsp. kruiden knoflookzout1/4 kopje appel cider azijn1/4 kopje extra vergine olijfolieik g
CONVERTEERBARE hoofd-BUREAULAMP (met USB ingangsvermogen)

CONVERTEERBARE hoofd-BUREAULAMP (met USB ingangsvermogen)

na Lees zaklamp wedstrijd aankondiging, ik probeer om een instructable hoewel mijn Engels niet goed genoeg isIn dit project wijzigen ik hoofd LEDLAMP zodat het als een hoofd-LAMP met USB Power gebruiken kan.Hier is het materiaal & gereedschap:Goedkoo
Bureaulamp, met scharnierarm

Bureaulamp, met scharnierarm

Hallo iedereen. Dit is mijn 1e instructable, ook wanneer niet is mijn 1ste diy-project.Excuseer mijn grammatica, dit is niet mijn standaardtaal, maar ik hoop dat de instructies en de foto's worden genoeg voor begrip.Ik hoop om te uploaden meer projec
Ziel In een pot

Ziel In een pot

In dit instructable ik zal u tonen hoe maak je een ziel in een pot. Een ziel in een pot Is een pot laser gegraveerd met knipperen en fading leds waardoor de laser gegraveerd gezicht blik verlicht.Stap 1: Onderdelen en ToolsHier zijn de delen en de hu
Ziel cyclus moederschip, een gegoten glasvezel luidspreker kabinet voor fietsen.

Ziel cyclus moederschip, een gegoten glasvezel luidspreker kabinet voor fietsen.

Na het maken van 5 of zo volledig aangepaste ziel cycli, nauwgezet, één in een tijd, moest ik een manier aantrekkelijk kasten maken in een fractie van de tijd. Ik investeerde dus extra tijd in het proces van het maken van een mal te kunnen reproducer
Bouwen van een ventilator met LEGO en faya-nugget

Bouwen van een ventilator met LEGO en faya-nugget

Als een kind, ik gedroomd om te bouwen alles met LEGO, vooral die kon bewegen en zelfs vormen een robot. Helaas was de eerste generatie Mindstorm terug in de late 90 's, gewoon veel te duur voor mij.Toen ik voor het eerst Arduino ontmoette, realiseer
"SOUNDESK", een bureau met subwoofer, versterker en luidsprekers ingebouwde

"SOUNDESK", een bureau met subwoofer, versterker en luidsprekers ingebouwde

Hey is mijn naam er KirilIk ben een grafisch ontwerper en ik graag een leuke werkplek. Het probleem was dat ik niet heb een Bureau voor al mijn hardware, dus ik had een idee en...Stap 1: Een oude bureau kopenIk kocht een oude Bureau voor ongeveer $10
Hoe een betere muzikant "Jam"

Hoe een betere muzikant "Jam"

dit Instructable zal worden beschrijven welke stappen u kunt ondernemen om te leren "jam", als je wil, met andere music(ians) zonder aarzeling. Ik zou veronderstellen dat dit instructable kan nuttig zijn voor iedereen die op zoek om te beginnen
De Choprical vis: een Human Powered partij Bike

De Choprical vis: een Human Powered partij Bike

Fietsen en muziek zijn beide fantastische manieren om ervaring van de Gemeenschap. Het combineren van hen neemt de hele zaak naar een nieuw niveau.Ik heb het creëren van fiets correcte systemen sinds 2002. Mijn vrienden en ik gebruik ze voor het geïm
Bureaulamp reparatie met oogoo en Epoxy lijm

Bureaulamp reparatie met oogoo en Epoxy lijm

In dit instructable zal ik een gebroken bureaulamp met behulp van Oogoo te maken van een mal die zullen worden aangewend om gegoten epoxi lijm (of epoxi hars als u uw handen op sommige krijgen kunt..) oplossen.Hoewel dit instructable is een zeer spec