PURRo Emotion Cat

by Kurry in Circuits > Arduino

108 Views, 1 Favorites, 0 Comments

PURRo Emotion Cat

IMG_8335.jpeg
IMG_0489.jpeg
IMG_0488.jpeg
IMG_8336.jpeg

Dit project heb ik een robot gemaakt. Genaamd PURRo. Het is geen standaard robot die kan lopen en praten. Het ging vooral om de emoties. Mijn inspiratie was dan ook een Furby. Met verschillende inputs de robot een emotie laten uiten. Met eigen gemaakte gezichtjes op het LCD scherm komt de emotie naar voren. De uitdaging was hier om het uiterlijk te vormen zo dat het je maatje kan worden. Als dat lukt, dan komen de emoties ook beter bij de gebruiker binnen. 

De robot kat (PURRo) heeft op de voorkant vier onderdelen zitten. LCD scherm, LDR sensor, Button (onder de vacht) en een potmeter. Elke input zorgt voor een aparte emotie. Zo zorgt de button voor een kietel emotie. De LDR laat tonen dat hij niks ziet als het donker is. De potmeter voor het warm en koud hebben. Deze emoties zijn te zien op het scherm. 

Ik heb vooral geleerd hoe je het beste kan solderen. En om je onderdelen zo efficiĆ«nt mogelijk in te zetten. Ik heb een printplaat moeten gebruiken voor beide kanten. Dat was even improviseren en dat ging vaak net niet goed. Je hoofd erbij houden is wel erg handig heb ik geleerd. Je doet snel iets verkeerd. 


Supplies

Elektronica

  • Arduino TFT-display 1.8 inch
  • 2x Joy-it COM-KY051VT
  • 2x TRU COMPONENTS T1906SA040 Printplaat
  • Arduino Uno
  • Micro SD kaart
  • Push button
  • LDR sensor
  • Potentiometer
  • 2x weerstanden
  • 1x 10k weerstand
  • 1x 330ohm weerstand
  • Dupont jumper kabels
  • Male-female
  • Female-female
  • Male-male
  • Soldeerset

Behuizing

  • MDF houten plaat
  • 3D geprinten oortjes en voetjes
  • Scharnieren voor deur achterkant
  • Pluche stof
  • Schroeven
  • Lijm
  • Schaar

Test

IMG_0487.jpeg
RenderedImage.jpeg
70179436131__9CED0B67-CEAE-482F-98E6-5086A1F9CC3C.jpeg
IMG_8250.jpeg

Alle vier de onderdelen (LDR, LCD, button en potentiometer) met elkaar combineren en testen. Eerst los getest en toen alles gecombineerd. In het begin wilde ik een temperatuur sensor gebruiken. Maar dat ging lastig met het veranderen van de temperatuur op de robot. Hoe je het heel koud kan maken of heel warm. Dus ben ik voor de potentiometer gegaan.

Ook geprobeerd om het eerst zonder SD kaart te doen. Dat ging niet door heel veel errors en te weinig opslag. Je moet namelijk je afbeelding dan omzetten in code. Dat wordt heel groot.

#include <Adafruit_GFX.h>         // Core graphics library
#include <Adafruit_ST7735.h>      // Hardware-specific library
#include <SdFat.h>                // SD card & FAT filesystem library
#include <Adafruit_SPIFlash.h>    // SPI / QSPI flash library
#include <Adafruit_ImageReader.h> // Image-reading functions


// Comment out the next line to load from SPI/QSPI flash instead of SD card:
#define USE_SD_CARD


// TFT display and SD card share the hardware SPI interface, using
// 'select' pins for each to identify the active device on the bus.


//LCD screen
#define SD_CS    4 // SD card select pin
#define TFT_CS  10 // TFT select pin
#define TFT_DC   8 // TFT display/command pin
#define TFT_RST  9 // Or set to -1 and connect to Arduino RESET pin


#if defined(USE_SD_CARD)
  SdFat                SD;         // SD card filesystem
  Adafruit_ImageReader reader(SD); // Image-reader object, pass in SD filesys
#else
  // SPI or QSPI flash filesystem (i.e. CIRCUITPY drive)
  #if defined(__SAMD51__) || defined(NRF52840_XXAA)
    Adafruit_FlashTransport_QSPI flashTransport(PIN_QSPI_SCK, PIN_QSPI_CS,
      PIN_QSPI_IO0, PIN_QSPI_IO1, PIN_QSPI_IO2, PIN_QSPI_IO3);
  #else
    #if (SPI_INTERFACES_COUNT == 1)
      Adafruit_FlashTransport_SPI flashTransport(SS, &SPI);
    #else
     Adafruit_FlashTransport_SPI flashTransport(SS1, &SPI1);
    #endif
  #endif
  Adafruit_SPIFlash    flash(&flashTransport);
  FatFileSystem        filesys;
  Adafruit_ImageReader reader(filesys); // Image-reader, pass in flash filesys
#endif


Adafruit_ST7735      tft    = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
Adafruit_Image       img;        // An image loaded into RAM
int32_t              width  = 160, // BMP image dimensions
                     height = 125;


//potentiometer
int potPin = A2;
int potVal = 0;


//button
int switchPin = 2;
int switchState = LOW;


//LDR
int LDRValue = 0;
int LDRpin = A0;


void setup(void) {
   // put your setup code here, to run once:
  ImageReturnCode stat; // Status from image-reading functions
 
  Serial.begin(9600);


  //button
  pinMode(switchPin, INPUT);
 
   //LCD screen
#if !defined(ESP32)
  while(!Serial);       // Wait for Serial Monitor before continuing
#endif


  tft.initR(INITR_BLACKTAB); // Initialize screen


  // The Adafruit_ImageReader constructor call (above, before setup())
  // accepts an uninitialized SdFat or FatFileSystem object. This MUST
  // BE INITIALIZED before using any of the image reader functions!
  Serial.print(F("Initializing filesystem..."));
#if defined(USE_SD_CARD)
  // SD card is pretty straightforward, a single call...
  if(!SD.begin(SD_CS, SD_SCK_MHZ(10))) { // Breakouts require 10 MHz limit due to longer wires
    Serial.println(F("SD begin() failed"));
    for(;;); // Fatal error, do not continue
  }
#else
  // SPI or QSPI flash requires two steps, one to access the bare flash
  // memory itself, then the second to access the filesystem within...
  if(!flash.begin()) {
    Serial.println(F("flash begin() failed"));
    for(;;);
  }
  if(!filesys.begin(&flash)) {
    Serial.println(F("filesys begin() failed"));
    for(;;);
  }
#endif
  Serial.println(F("OK!"));


  // Fill screen blue. Not a required step, this just shows that we're
  // successfully communicating with the screen.
  tft.fillScreen(ST7735_BLUE);


  tft.setRotation(1);


  // Load full-screen BMP file 'emoties-kat_neutraal.bmp' at position (0,0) (top left).
  // Notice the 'reader' object performs this, with 'tft' as an argument.
  Serial.print(F("Loading image to screen..."));
  stat = reader.drawBMP("/emoties-kat_neutraal.bmp", tft, 0, 0);
  reader.printStatus(stat);   // How'd we do?


  //delay(2000); // Pause 2 seconds before moving on to loop()


}

void loop() {
  // put your main code here, to run repeatedly:
 
  //potmeter
  potVal = analogRead(potPin);
  Serial.println(potVal);


  if (potVal >= 900){
    reader.drawBMP("/emoties-kat_koud.bmp", tft, 0, 0);
    LDRValue = false;
    switchState = false;


    Serial.println("its cold");
  }


  if (potVal <= 300){
    reader.drawBMP("/emoties-kat_zweterig.bmp", tft, 0, 0);
    LDRValue = false;
    switchState = false;


    Serial.println("its hot");
  }


  if (potVal == 550){
    reader.drawBMP("/emoties-kat_neutraal.bmp", tft, 0, 0);
    //LDRValue = false;
    //switchState = false;


    Serial.println("its nice now");
  }  


  //button
  switchState = digitalRead(switchPin);
  Serial.println(switchState);


  if (switchState == HIGH){
    reader.drawBMP("/emoties-kat_verliefd.bmp", tft, 0, 0);
    potVal = false;
    LDRValue = false;
    // Serial.println("love");
  } else {
    reader.drawBMP("/emoties-kat_neutraal.bmp", tft, 0, 0);
    // Serial.println("normal");
  }


  //LDR
  LDRValue = analogRead(LDRpin);
  //Serial.println(LDRValue);
  delay(100);


  if (LDRValue <= 60){
    reader.drawBMP("/emoties-kat_zietniks.bmp", tft, 0, 0);
    potVal = false;
    switchState = false;
     //Serial.println("i see nothing");
  } else {
    reader.drawBMP("/emoties-kat_neutraal.bmp", tft, 0, 0);
    //Serial.println("its clear");
 
  }
}


Build

IMG_0490.png
IMG_8270.jpeg
IMG_8269.jpeg

Het MDF hout is met de laser cutter uitgesneden. Eerst op https://en.makercase.com/#/ een bestand gemaakt en verder in Illustrator gewerkt.

Solder/3D Print

IMG_8304.jpeg
IMG_0486.jpeg
IMG_8309.jpeg
IMG_8306.jpeg

De voetjes en oortjes 3D geprint en gesoldeerd. Hier heb ik twee kanten van de printplaat gebruikt. De inputs naar buiten en de draden naar binnen toe. Zodat de draden in de behuizing komen.

IMG_8314.jpeg
IMG_8315.jpeg
IMG_8319.jpeg
IMG_8318.jpeg
IMG_8316.jpeg
IMG_8334.jpeg

De print plaat eerst op de behuizing geschroefd. De draden met elkaar verbonden met een stukje tape. Dan raken ze niet door de war met de rest. Daarna met de rest van de kabels naar achteren door het gat. En stukje voor stukje het stof eroverheen gedaan. Wel in 1 stuk proberen. Dan heb je geen losse naden.

End

FUXABJVLH4UUSFO.jpg
FI6W7E4LH4UUSHI.jpg
Arduino PURRo Emotion Cat

Met de laatste dingetjes erbij voor decoratie. Is hij helemaal af.