找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6298|回復: 2
收起左側(cè)

公寓不讓養(yǎng)貓?那就自己做個機器貓

[復制鏈接]
ID:101489 發(fā)表于 2016-1-3 18:15 | 顯示全部樓層 |閱讀模式

想要養(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) ),需要你期望實現(xiàn)更多功能,向其中添加即可。
  1. //bool LEDIsOn = false;
  2. //bool LEDsChanged = false;
  3. bool isBeingPetted = false;
  4. int sensorValue = 0;
  5. int totalSensorValue = 0;
  6. float averageSensorValue;
  7. int count = 0;
  8. int randomMeowTime;

  9. bool defaultEyes [6] = {false, true, true,
  10.                         true, true, true};
  11. bool blinkEyes [6] = {false, false, false,
  12.                       true, true, true};
  13. bool purrEyes [6] = {false, true, false,
  14.                      true, false, true};
  15. bool meowEyes [6] = {true, true, false,
  16.                      false, false, true};
  17. bool mewEyes [6] = {false, true, false,
  18.                     false, true, false};

  19. int ledEyes [6] = {6,7,8,9,11,12};

  20. void setup() {
  21.   // put your setup code here, to run once:
  22.   // pin 6,7,8,9,11,12 is an LED, pin 2 is the speaker
  23.   for (int i = 0; i <= 5; i++){
  24.     pinMode(ledEyes[i], OUTPUT);
  25.   }
  26.   
  27.   pinMode(2, OUTPUT);

  28.   // pin A0 is the touch sensor input
  29.   pinMode(A0, INPUT);

  30.   changeEyes(defaultEyes);
  31. }

  32. void loop() {
  33.   randomSeed(analogRead(0));
  34.   randomMeowTime = random(0.0, 400.0);

  35.   // put your main code here, to run repeatedly:
  36.   sensorValue = analogRead(A0);
  37.   totalSensorValue += sensorValue;
  38.   count += 1;

  39.   if (count == 5){
  40.     averageSensorValue = totalSensorValue / 5;
  41.     if (averageSensorValue > 1005){
  42.       // kat wordt aangeraakt
  43.       isBeingPetted = true;
  44.       //delay(1000);
  45.     } else {
  46.       isBeingPetted = false;
  47.       // kat wordt niet (meer) aangeraakt
  48.     }
  49.    
  50.     if (isBeingPetted == true){
  51.       changeEyes(purrEyes);
  52.       purr();
  53.     } else {
  54.       changeEyes(defaultEyes);
  55.       if (randomMeowTime <= 4){ //randomly meow if not being petted
  56.         changeEyes(meowEyes);
  57.         meow();
  58.       } else if (randomMeowTime == 5){
  59.         changeEyes(meowEyes);
  60.         meow2();
  61.       } else if (randomMeowTime == 6){
  62.         changeEyes(mewEyes);
  63.         mew();
  64.       }
  65.     }

  66.     totalSensorValue = 0;
  67.     count = 0;
  68.   }
  69.   
  70.   delay(1);
  71. }

  72. //the sounds the cat makes, the meowing sounds are from here: https://learn.adafruit.com/adafruit-trinket-modded-stuffed-animal/animal-sounds
  73. void meow() {  // cat meow (emphasis ow "me")
  74.   uint16_t i;
  75.   playTone(5100,50);        // "m" (short)
  76.   playTone(394,180);        // "eee" (long)
  77.   for(i=990; i<1022; i+=2)  // vary "ooo" down
  78.      playTone(i,8);
  79.   playTone(5100,40);        // "w" (short)
  80. }

  81. void meow2() {  // cat meow (emphasis on "ow")
  82.   uint16_t i;
  83.   playTone(5100,55);       // "m" (short)
  84.   playTone(394,170);       // "eee" (long)
  85.   delay(30);               // wait a tiny bit
  86.   for(i=330; i<360; i+=2)  // vary "ooo" down
  87.      playTone(i,10);
  88.   playTone(5100,40);       // "w" (short)
  89. }

  90. void mew() {  // cat mew
  91.   uint16_t i;
  92.   playTone(5100,55);       // "m"   (short)
  93.   playTone(394,130);       // "eee" (long)
  94.   playTone(384,35);        // "eee" (up a tiny bit on end)
  95.   playTone(5100,40);       // "w"   (short)
  96. }

  97. void purr() { // cat purr
  98.   uint16_t i;
  99.   uint16_t h;
  100.   for(i=0; i<10; i++){
  101.     playTone(9750,2);
  102.     playTone(9250,2);
  103.     delay(15);//was 6
  104.   }
  105.   for(i=0; i<10; i++){
  106.     playTone(11750,2);
  107.     playTone(11250,2);
  108.     delay(15);
  109.   }
  110. }

  111. void playTone(uint16_t tone1, uint16_t duration) {
  112.   if(tone1 < 50 || tone1 > 15000) return;  // these do not play on a piezo
  113.   for (long i = 0; i < duration * 1000L; i += tone1 * 2) {
  114.      digitalWrite(2, HIGH);
  115.      delayMicroseconds(tone1);
  116.      digitalWrite(2, LOW);
  117.      delayMicroseconds(tone1);
  118.   }     
  119. }

  120. //this method changes the eyes.
  121. void changeEyes(bool eyes[]){
  122.   for (int i = 0; i <= 5; i++){
  123.     if (eyes[i]==true){
  124.       digitalWrite(ledEyes[i], HIGH);
  125.     } else {
  126.       digitalWrite(ledEyes[i], LOW);
  127.     }
  128.   }
  129. }
復制代碼



第四步:外形設(shè)計
創(chuàng)客們在設(shè)計一個項目的時候往往會忽視外形方面的設(shè)計,但外形設(shè)計實際上在創(chuàng)客項目上扮演著極其重要的角色。
而作為一只機器寵物貓,“萌值”的重要性想必是不用再提了。
這是作者的設(shè)計,看起來怎么樣,如果覺得不順眼,也可以自己修改或重新設(shè)計。
第五步:完成組裝因為這個機器貓項目相對比較簡單,組裝也并不復雜,實際上就是把LED燈放入到貓眼部位就夠了。鑒于Arduino的強大性能,實際上這個項目還有巨大的可擴展空間。比如通過和機器小車結(jié)合做一個可以運動的機器貓,或者和無人機結(jié)合做一只飛行的貓頭鷹,甚至還能直接做成貓的形狀,套上毛絨玩具就是一只如假包換的機器貓了,當然,做成哆啦A夢的樣子也不錯。接下來看一下展示吧:



回復

使用道具 舉報

ID:560595 發(fā)表于 2019-7-17 17:48 | 顯示全部樓層
厲害了
回復

使用道具 舉報

ID:579057 發(fā)表于 2019-7-29 07:13 | 顯示全部樓層
藍貓
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表