
想要養(yǎng)只貓當寵物,但是又擔心“貓老爺”的吃喝拉撒睡和掉毛?那就自己做一只機器貓吧!首先讓我們從最簡單的開始:做一只會隨機發(fā)出貓叫聲的機器貓;另外,它還有一雙可以變化的眼睛,當你撫摸它的時候,它還會發(fā)出咕嚕咕嚕的聲音。而更重要的是,因為本項目是基于Arduino開發(fā)的,你還可以為這只可愛的機器貓設(shè)計更多功能!
第一步:準備材料- Arduino UNO
- 面包板
- 喇叭
- 觸控傳感器(FSR-Interlink 406)
- 12個5mm LED
- 6個220Ω電阻
- 47kΩ電阻
- 15條母對母跳線
- 16條24條母對公跳線
- 3D打印組件若干
第二步:線路設(shè)計首先確定各個輸入輸出引腳的定義,然后畫出電路圖。如圖所示,除了基本的接地連接外,喇叭連接引腳2,而觸控傳感器則連接5V和A0,另外,注意在觸控傳感器上串聯(lián)一個47kΩ的電阻,這個電阻的阻值大小是可調(diào)的,這取決你想要的觸控靈敏度。
接下來將LED連接到6、7、8、9、11、12引腳。
第三步:編程確定好連接方式之后就開始編程,基本功能的代碼已經(jīng)寫好(點擊這里下載
機器貓.rar
(46.17 KB, 下載次數(shù): 10)
2016-1-3 18:12 上傳
點擊文件名下載附件
),需要你期望實現(xiàn)更多功能,向其中添加即可。
- //bool LEDIsOn = false;
- //bool LEDsChanged = false;
- bool isBeingPetted = false;
- int sensorValue = 0;
- int totalSensorValue = 0;
- float averageSensorValue;
- int count = 0;
- int randomMeowTime;
- bool defaultEyes [6] = {false, true, true,
- true, true, true};
- bool blinkEyes [6] = {false, false, false,
- true, true, true};
- bool purrEyes [6] = {false, true, false,
- true, false, true};
- bool meowEyes [6] = {true, true, false,
- false, false, true};
- bool mewEyes [6] = {false, true, false,
- false, true, false};
- int ledEyes [6] = {6,7,8,9,11,12};
- void setup() {
- // put your setup code here, to run once:
- // pin 6,7,8,9,11,12 is an LED, pin 2 is the speaker
- for (int i = 0; i <= 5; i++){
- pinMode(ledEyes[i], OUTPUT);
- }
-
- pinMode(2, OUTPUT);
- // pin A0 is the touch sensor input
- pinMode(A0, INPUT);
- changeEyes(defaultEyes);
- }
- void loop() {
- randomSeed(analogRead(0));
- randomMeowTime = random(0.0, 400.0);
- // put your main code here, to run repeatedly:
- sensorValue = analogRead(A0);
- totalSensorValue += sensorValue;
- count += 1;
- if (count == 5){
- averageSensorValue = totalSensorValue / 5;
- if (averageSensorValue > 1005){
- // kat wordt aangeraakt
- isBeingPetted = true;
- //delay(1000);
- } else {
- isBeingPetted = false;
- // kat wordt niet (meer) aangeraakt
- }
-
- if (isBeingPetted == true){
- changeEyes(purrEyes);
- purr();
- } else {
- changeEyes(defaultEyes);
- if (randomMeowTime <= 4){ //randomly meow if not being petted
- changeEyes(meowEyes);
- meow();
- } else if (randomMeowTime == 5){
- changeEyes(meowEyes);
- meow2();
- } else if (randomMeowTime == 6){
- changeEyes(mewEyes);
- mew();
- }
- }
- totalSensorValue = 0;
- count = 0;
- }
-
- delay(1);
- }
- //the sounds the cat makes, the meowing sounds are from here: https://learn.adafruit.com/adafruit-trinket-modded-stuffed-animal/animal-sounds
- void meow() { // cat meow (emphasis ow "me")
- uint16_t i;
- playTone(5100,50); // "m" (short)
- playTone(394,180); // "eee" (long)
- for(i=990; i<1022; i+=2) // vary "ooo" down
- playTone(i,8);
- playTone(5100,40); // "w" (short)
- }
- void meow2() { // cat meow (emphasis on "ow")
- uint16_t i;
- playTone(5100,55); // "m" (short)
- playTone(394,170); // "eee" (long)
- delay(30); // wait a tiny bit
- for(i=330; i<360; i+=2) // vary "ooo" down
- playTone(i,10);
- playTone(5100,40); // "w" (short)
- }
-
- void mew() { // cat mew
- uint16_t i;
- playTone(5100,55); // "m" (short)
- playTone(394,130); // "eee" (long)
- playTone(384,35); // "eee" (up a tiny bit on end)
- playTone(5100,40); // "w" (short)
- }
- void purr() { // cat purr
- uint16_t i;
- uint16_t h;
- for(i=0; i<10; i++){
- playTone(9750,2);
- playTone(9250,2);
- delay(15);//was 6
- }
- for(i=0; i<10; i++){
- playTone(11750,2);
- playTone(11250,2);
- delay(15);
- }
- }
- void playTone(uint16_t tone1, uint16_t duration) {
- if(tone1 < 50 || tone1 > 15000) return; // these do not play on a piezo
- for (long i = 0; i < duration * 1000L; i += tone1 * 2) {
- digitalWrite(2, HIGH);
- delayMicroseconds(tone1);
- digitalWrite(2, LOW);
- delayMicroseconds(tone1);
- }
- }
- //this method changes the eyes.
- void changeEyes(bool eyes[]){
- for (int i = 0; i <= 5; i++){
- if (eyes[i]==true){
- digitalWrite(ledEyes[i], HIGH);
- } else {
- digitalWrite(ledEyes[i], LOW);
- }
- }
- }
復制代碼
第四步:外形設(shè)計創(chuàng)客們在設(shè)計一個項目的時候往往會忽視外形方面的設(shè)計,但外形設(shè)計實際上在創(chuàng)客項目上扮演著極其重要的角色。
而作為一只機器寵物貓,“萌值”的重要性想必是不用再提了。
這是作者的設(shè)計,看起來怎么樣,如果覺得不順眼,也可以自己修改或重新設(shè)計。
第五步:完成組裝因為這個機器貓項目相對比較簡單,組裝也并不復雜,實際上就是把LED燈放入到貓眼部位就夠了。鑒于Arduino的強大性能,實際上這個項目還有巨大的可擴展空間。比如通過和機器小車結(jié)合做一個可以運動的機器貓,或者和無人機結(jié)合做一只飛行的貓頭鷹,甚至還能直接做成貓的形狀,套上毛絨玩具就是一只如假包換的機器貓了,當然,做成哆啦A夢的樣子也不錯。接下來看一下展示吧:
|