OiO - en skrivbordslampa som har en själ (5 / 7 steg)

Steg 5: Koden, själen



Den mest intressanta delen, det är där all din hård arbete hittills kommer att betala av. Vi har arbetat för att ta hand om alla fysiska detaljer, nu, vad är känslomässiga de? : p

Som en start, kommer att du behöva har Arduino IDE installerade för ditt OS, måste du manuellt installera Adafruit bibliotek för att kunna styra NeoPixel ifall du har beslutat att använda dem.

Bifogat är den fullständiga koden för oiO som av tiden jag skriver detta. Han får definitivt mer kod och utbildning som jag går :) Observera att koden är kalibrerad för att arbeta med sensorer och servon jag använde, så kanske det inte kommer att vara meningsfullt för dig när du försöker det. Du kommer att behöva gå igenom många prövningar tills du hittar de bra värdena (mer om detta i nästa avsnitt)

Introduktion

För mig är hela poängen bakom detta projekt att göra oiO interaktiva och autonoma, agerar på egen hand. han bör fortsätta att ge sin viktigaste funktion, ger dig ljus, men han har också sitt humör, och humörsvängningar, det ändrar hållning och interagerar med sina användare.

Men det var en utmaning för mig, sammanfattas i den nedan punkter

1) hur kan jag flytta 3 servon samtidigt, eller separat om det behövs

2) hur kan jag underlätta rörelser och införa vissa lättnader för att simulera en flytande rörelse. Också ha viss kontroll på hastigheten på servon att simulera olika beteenden.

3) hur kan jag läsa och kontrollera alla sensorer och servon samtidigt veta att Arduino inte inbyggt stöd för multitasking.

4) hur kan jag göra Oio's beteende trovärdigt, och undvika robotic svar på liknande ingångar, så vill jag honom att reagerar olika för samma input (ljud och närhet), alla här vet att Arduino bara läser koden från topp till botten och sedan loopar

5) oiO måste ha en känsla av tid förbi, en handling enligt den.

Allt detta ska göras med 32KB dynamisk minne tillgängligt på Arduino för koden, och samtidigt hålla det enkelt!

Efter 2 dagar att skriva kod, tror jag jag nått mitt mål och svarat på fem frågan på ett godtagbart sätt med några kompromisser.

Vi kan argumentera om hur bra jag gjorde detta och hur trovärdigt det är, men slutet av dagen, den video som du såg, använder bara 17 procent av koden minne och det finns ett stort utrymme för förbättringar, som jag kommer att fortsätta att driva. men eftersom du har koden, skriv mig ner några förslag, eller bara dela din förbättringar.

I nästa avsnitt kommer jag att dela några snuttar av koden jag kände jag måste diskutera, till er läsa den fullständiga koden och att göra känsla av det, det är tungt kommenterade också för att hjälpa bättre förståelse och för mig att komma ihåg Detaljer 3 månader från nu:). Jag hoppas jag gjorde över det inte!

Punkterna 1 & 2

Flytta 3 servon samtidigt på Arduino är inte möjligt inbyggt. så jag var tvungen att skriva en funktion som tar 3 servon och 3 mål lägen för varje, förutom en lättnader faktor att styra hastighet och användarvänlighet servon. Funktionen kontrollerna servon med writeMicroseconds() i stället för att anropa, vilket den före detta ger mer exakt kontroll på grund av sitt större antal värden, kontrollera servon genom att ange exakta PWM pulse bredd i millisekunder, i stället för den senare det användare kantiga grader.

Funktionen är:

Ogiltig < stark > move3Servos < / strong > (Servo < stark > servo1Name </strong >, float < stark > target_pos1 </strong >, Servo < stark > servo2Name </strong >, float < stark > target_pos2 </strong >, Servo < stark > servo3Name </strong >, float < stark > target_pos3 </strong >, float < strong > lättnader </strong >) < br >

- target_posX: har gränser å börja och avsluta positioner, mellan 600 och 2400 mS, några servon fungerar mellan 1000 och 2000... Kontrollera din servon gränser genom provning eller datablad innan du anger värdena

-lättnader: är ett värde mellan 0,0 och 5.0, där:

-värden mellan 0,0 till 1,0 orsak servon till start rörelse snabbt men avsluta nervcellerna, värden runt noll (ex: 0,05) ger mycket långsammare/önskas svar av utjämning, värdet av 0,1 är tillräckligt snabbt

-värden mellan 1,0 och 5.0, är inte ansett lätta faktorer, som de orsakar en förändring i beteende, orsakar servon att flytta linjärt börja att stoppa med x steg beroende på värdet i. Värdet av 2.0 är turtle hastighet, medan ett värde av 5.0 är relativt snabb.

För att simulera samtidig kontroll av 3 servon, funktionskontroll varje servo ett steg i taget, men i rad, det vill säga flyttar servo1 en liten steg sedan flyttar servo 2 ett litet steg, sedan servo3 på samma sätt, då den gör detta igen och igen i en loop tills alla servon hade nått sina mål positioner. Slutresultatet, alla servon tycks ha flyttat på samma gång till sina mål positioner.

Punkterna 3 och 4

Motverka detta, var tricket att separera läser de sensorer värde från faktiskt agerar på servon och ögon. Detta gör att jag kan skapa räknare som räknar ljud och närheten därav följande upptäckter, och även mäta timing mellan dessa händelser. Dessa räknare och tidsstämplar kan användas senare självständigt i den del som lag om servon och ögon. Jag testa för Räknare-värden och se hur länge det tog användaren mellan varje upptäckt. Detta är exempelvis hur oiO kan skilja mellan en användare närmar sig honom 3 gånger på snabbt sätt, alltså att göra oiO arg med röda ögon och ryckiga rörelser eller om användaren kontaktat honom efter varandra i en långsam sätt, vilket gör oiO lugnare med varmare ögonfärg och graciösa rörelser...

I ett nötskal, få sensorer värde först och sedan agera senare. men eftersom den Arduino loop() kör tillräckligt snabbt, användaren kommer inte att märka förseningen.

Punkt 5

Eftersom Arduino inte är ansluten till en extern timing källa, kan inte det således tala om absolut tid, så oiO använder interna tidpunkten för Arduino använder funktionen millis() som räknar antalet millisekunder sedan start/Nollställning av Arduino. Räknaren rullar över efter ca. 50 dagar, mer än tillräckligt för oiO livscykel. Detta bör vara tillräckligt för att beräkna exempelvis: 15 min har gått så gör det och det, eller har det varit 60 sekunder som användaren inte interagera med oiO.

Detta är exempelvis hur oiO kommer att upptäcka att användaren inte interagera med honom sedan 1 timme, och därmed börjar slumra, följt av djup sömn!

...

oiO kommer att gå till sova om ingen åtgärd av användaren för mer än 'sleepIfNoActionTimer' sekunder

IF((Millis() - lastAction) > sleepIfNoActionTimer) {
doseOff();
}

< p > //oiO kommer att nysa varje "sneezeTimer" min (inte kommer att registreras som en användaråtgärd) < /p > if(millis() % sneezeTimer == 0) {
sneeze();
}
...

Kontrollera ögonen

Jag har använt Adafruit biblioteket eftersom de ger intressanta funktioner för att styra NeoPixels, jag har lagt till några funktioner som setEyesColor() och dimmer() att ha enkel tillgång till inställning båda ögon färgerna och även styra dimming på en viss färg med en given hastighet och riktning.

void dimmer (int a, int b, int rött, int grön, int blå, int fadeDirection, int stepSpeed)

en: min ljusstyrka

b: max ljusstyrka

r, g, b: är RGB färgkomponenter, varje kan ha ett värde mellan 0-255

fadeDirection: kan vara 1 = upp, 2 = ner, 3 = updown

stepSpeed, fördröjning i millisekunder mellan färgen blekna steg

Slutsats

Jag högt rekommendera läsa koden och förstå det och ändra det som behövs. Alla variabler i initiering av koden (dvs före och inuti setup()) bör fastställas efter dina behov.

Se Steg
Relaterade Ämnen

ESL klass spel: "kom ihåg vem som har vad"

Bra spel att få unga studenter tränar enkel konversation som "Har du---?"Steg 1: Lära och utöva innehållLära och öva på ditt innehåll. Idealiskt för detta spel du skulle lära "Har du?" stil frågor och svar, såsom "Har du äpplen?&q...

Förvandla en kontorsstol till en skidhållare som har monterats

under den sista Snösäsongen fick jag till längdskidåkning i stort sätt. Jag köpte en komplett uppsättning av redskap för mig själv och jag fann mig själv på stigar på bara om någon gång du kan tänka dig. I själva verket tillbringade jag mesta tiden s...

Raspberry Pi Bluetooth in/ut styrelsen eller "som har hem"

jag ville skapa en elektronisk in/ut styrelsen. Typ du kan ha till posten som är närvarande eller inte i ett företag eller hem. Den är oftast placerad av huvudentrén så alla kan se vem som är in eller ut.Jag ville också ett annat projekt för min Rasp...

Hur hjälpa en Person som har ett beslag

när jag började att arbeta som en CNA, jag var överväldigad. Det är en sak att läsa om kramper, slaganfall, hjärtstillestånd och andra typer av medicinska akutfall, och en annan att faktiskt se dessa saker i verkliga livet. Sanningen för att säga, ja...

Hur får man på kameran i Studio publik från en kille som har gjort det fyra gånger

Så vill du få visas på kameran i studio publik tycker du? Det är väl egentligen inte så svårt om du kan uppbringa lite kreativitet. Jag har visat på kamera på CONAN vid fyra olika tillfällen. En gång jag var på kameran i 60 sekunder och pratade med C...

Lindra smärtan av ett barn som har Cancer 2

MEDDELANDE - detta Instructable förespråkar inte hugga ditt barns huvud och placera den mellan pumpor att göra henne lycklig!!!Jag mooching runt Instructables.com igår och jag kom över två inspirerande Instructables som helt ändrat min syn på denna u...

Fastställande en nyckelbricka som har varit till städare.

Jag blev ombedd att ta en titt på en tidiga 2000-talet GM fjärrkontroll som hade gått igenom tvätten. Det var inte fungerar men tidigare erfarenhet med nyckelbrickor, hade visat dem vara ganska motståndskraftiga mot sådana saker. Jag var övertygad om...

Hur man fixar öronproppar som har förlorat sina gummi

Jag råkar älska öronproppar som kom med min iPod. När den gummerade delen kom bort av en, sedan den andra, försökte jag par efter par ersättare bara för att finna mig själv som önskar jag hade min gamla earbuds tillbaka. Min musik ljud inte bara dets...

Presenten till den som har allt... anpassade ornament.

Inte säker på vad du behöver så och så för x-mas?Du har en vän som verkligen gillar sengångare, men vart fan ska du hitta lättja något?Du fick Kviga internationella donationer för någon, men vill ge dem mer än en kort?Du vill göra någons x-mas kort e...

[UPPDATERAD] Lindra smärtan av ett barn som har Cancer med papper flygplan

uppdatering: här är en video av jägaren och hans plan som visar bara hur många som bryr sig om honom och sin sak.VideoLedsen att jag inte kunde bädda in denna video.Det är en förälders värsta mardröm: livsförändrande ord "ditt barn har cancer".F...

Som har hem?

Hemma hyr vi ut gratis rummen som var mina bröder, så för det mesta det finns folk med olika scheman som bor i samma hus. Vi har ett larm, så den sista en lämnar är tänkt för att sätta den på när han lämnar men det är ofta svårt att veta vem som är s...

Hur man fixar en kostym som har lösa trådar.

Bara en snabb bakgrund om hur jag lärt mig denna konst. Jag tjänade ett 2 års uppdrag för min kyrka (i Skottland och Irland). Du bära en kostym för det mesta, och slitaget är gemensamma. Jag slutade med några lösa trådar (främst från katter och bär r...

Min nerf vapen som har ändrats

alla dessa vapen har ändrats, på camo longshot finns det en olika fat än i min andra bildspel, gul longshot är mina bröder som jag modifierat den för honom.vapnen som finns i detta är 2 longshots, 1 recon, 1night finder och 1buzz bee shot gun.Om du v...

Knappen, knappen, som har fått en knapp?

Skulle du spendera timmar limning knappar till en stol om det inte var för en Gorilla lim tävling? Ja kanske. Jag började faktiskt detta projekt sent en natt och några dagar senare fick reda på lim tävlingen så detta är min post. Jag använde Gorilla...

Laserskurna valnöt smårätter Pick - perfekta presenten till värd(Inna) som har allt

en söt liten tack gåva är i ordning efter en stor middag part. Denna tutorial ska show dig hur man utformar din egen Hors-d'œuvres plockar för att göra en uppsättning eller en en-av-en-slag.Valnöt är ett bra material att använda eftersom det är tradi...

Spela korthållare för barn och personer som har svårt att hålla kort.

Nyligen min fru och jag började spela bilar med några vänner, en av dem har MS, så det är svårare för honom att hålla större antal kort, mer än tio. Så började jag leta efter något att hjälpa honom och för mina barn också.Jag kom med detta lätt fixa...

Ändra om på koder på en HC-05 med koden ZS-040 som har EN PIN-koden i stället för nyckel pin

Samtidigt söka om hur du ändrar på inställningarna för HC-05 det blev det uppenbart fanns ett antal styrelser som hade olika nummer till de flesta av tutorials jag hittade. Den kommer jag att arbeta med här är HC-05 med en kod för ZS-040. Detta har e...

Hur du kör Kommandotolken på en dator som har det låst, och få in administratörer lösenordet

namnet säger allt.Detta instructable kommer att berätta hur till springa CMD (befalla snabb) och ändra lösenordet.Steg 1: Att få saker Nu behöver du programmet.Gå till http://portableapps.com/apps/utilities/command_prompt_portableJag rekommenderar at...

Att göra en Pop Up-kort som har en bild av ett hjärta och ordet kärlek

I detta DIY göra jag kortet bilden ovan.Steg 1: Ladda ner PDF härSteg 2: I den här videon som jag går igenom de steg jag tar för att göra kortetSteg 3: Gör Pop upp kortetVerktyget som jag använder i videon kallas GyroCut.Jag säljer GyroCut på...