top of page
Buscar

Projeto incrível utilizando a huskylens, arduino e um motor LEGO!

Neste post, veremos como fazer um portão de LEGO conectado ao arduino e ativado a partir da câmera huskylens(veja nosso post em que a conectamos ao lego EV3)!



Vemos nesse vídeo que, ao a huskylens detectar um rosto "familiar" e já salvo em sua memória, ela permite que o portão se abra. Caso contrário, um alarme é ativado.


O portão foi feito utilizando um motor power functions pequeno. Seu cabo foi cortado e conectado via uma ponte H ao arduino.


Segue o código do projeto:


/***************************************************

 HUSKYLENS An Easy-to-use AI Machine Vision Sensor

 

 ***************************************************

 This example shows the full function of library for HUSKYLENS via I2c.

 

 Created 2020-03-13

 By [Angelo qiao](Angelo.qiao@dfrobot.com)

 

 GNU Lesser General Public License.

 See <http://www.gnu.org/licenses/> for details.

 All above must be included in any redistribution

 ****************************************************/


/***********Notice and Trouble shooting***************

 1.Connection and Diagram can be found here

 2.This code is tested on Arduino Uno, Leonardo, Mega boards.

 ****************************************************/


#include "HUSKYLENS.h"


HUSKYLENS huskylens;

//HUSKYLENS green line >> SDA; blue line >> SCL

int ID0 = 0; //not learned results. Grey result on HUSKYLENS screen

int ID1 = 1; //first learned results. colored result on HUSKYLENS screen

int ID2 = 2; //second learned results. colored result on HUSKYLENS screen

// and so on.....


const int back = A0;

const int front = A1;

const int buzzer = 8;


int ant;

int ant2;


void printResult(HUSKYLENSResult result);


void setup() {

    pinMode(front, OUTPUT);

    pinMode(back, OUTPUT);

    pinMode(buzzer, OUTPUT);

    Serial.begin(115200);

    Wire.begin();

    while (!huskylens.begin(Wire))

    {

        Serial.println(F("Begin failed!"));

        Serial.println(F("1.Please recheck the \"Protocol Type\" in HUSKYLENS (General Settings>>Protocol Type>>I2C)"));

        Serial.println(F("2.Please recheck the connection."));

        delay(100);

    }

    

    // Uncomment one of the following code to switch the algorithm on HUSKYLENS:

    // huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);

    // huskylens.writeAlgorithm(ALGORITHM_OBJECT_TRACKING);

    // huskylens.writeAlgorithm(ALGORITHM_OBJECT_RECOGNITION);

    // huskylens.writeAlgorithm(ALGORITHM_LINE_TRACKING);

    // huskylens.writeAlgorithm(ALGORITHM_COLOR_RECOGNITION);

    // huskylens.writeAlgorithm(ALGORITHM_TAG_RECOGNITION);

}


void loop() {

    if (huskylens.request())                    //request all blocks and arrows from HUSKYLENS

    // if (huskylens.requestBlocks())           //request only blocks from HUSKYLENS

    // if (huskylens.requestArrows())           //request only arrows from HUSKYLENS

    // if (huskylens.requestLearned())          //request blocks and arrows tangged ID != 0 from HUSKYLENS

    // if (huskylens.requestBlocksLearned())    //request blocks tangged ID != ID0 from HUSKYLENS

    // if (huskylens.requestArrowsLearned())    //request arrows tangged ID != ID0 from HUSKYLENS

    // if (huskylens.request(ID1))              //request blocks and arrows tangged ID == ID1 from HUSKYLENS

    // if (huskylens.requestBlocks(ID1))        //request blocks tangged ID == ID1 from HUSKYLENS

    // if (huskylens.requestArrows(ID1))        //request arrows tangged ID == ID1 from HUSKYLENS

    // if (huskylens.request(ID2))              //request blocks and arrows tangged ID == ID2 from HUSKYLENS

    // if (huskylens.requestBlocks(ID2))        //request blocks tangged ID == ID2 from HUSKYLENS

    // if (huskylens.requestArrows(ID2))        //request arrows tangged ID == ID2 from HUSKYLENS

    {

        Serial.println("###################################");

        Serial.println(String()+F("Count of learned IDs:")+huskylens.countLearnedIDs());//The count of (faces, colors, objects or lines) you have learned on HUSKYLENS.

        Serial.println(String()+F("frame number:")+huskylens.frameNumber());//The number of frame HUSKYLENS have processed.


        Serial.println("#######");

        Serial.println(String()+F("Get all blocks and arrows. Count:")+huskylens.count());

        for (int i = 0; i < huskylens.count(); i++)

        {

            HUSKYLENSResult result = huskylens.get(i);

            printResult(result);

        }


        Serial.println("#######");

        Serial.println(String()+F("Get all blocks. Count:")+huskylens.countBlocks());

        for (int i = 0; i < huskylens.countBlocks(); i++)

        {

            HUSKYLENSResult result = huskylens.getBlock(i);

            printResult(result);

        }


        Serial.println("#######");

        Serial.println(String()+F("Get all arrows. Count:")+huskylens.countArrows());

        for (int i = 0; i < huskylens.countArrows(); i++)

        {

            HUSKYLENSResult result = huskylens.getArrow(i);

            printResult(result);

        }


        Serial.println("#######");

        Serial.println(String()+F("Get all blocks and arrows tagged ID0. Count:")+huskylens.count(ID0));

        for (int i = 0; i < huskylens.count(ID0); i++)

        {

            HUSKYLENSResult result = huskylens.get(ID0, i);

            printResult(result);

        }


        Serial.println("#######");

        Serial.println(String()+F("Get all blocks with learn ID equals ID0. Count:")+huskylens.countBlocks(ID0));

        for (int i = 0; i < huskylens.countBlocks(ID0); i++)

        {

            HUSKYLENSResult result = huskylens.getBlock(ID0, i);

            printResult(result);

        }


        Serial.println("#######");

        Serial.println(String()+F("Get all arrows tagged ID0. Count:")+huskylens.countArrows(ID0));

        for (int i = 0; i < huskylens.countArrows(ID0); i++)

        {

            HUSKYLENSResult result = huskylens.getArrow(ID0, i);  

            printResult(result);

        }


        if(huskylens.count(ID1) == 1 && ant == 0) {

          digitalWrite(front, HIGH);

          delay(50);

          digitalWrite(front, LOW);

          delay(2000);

          digitalWrite(back, HIGH);

          delay(50);

          digitalWrite(back, LOW);

          

        }


        ant = huskylens.count(ID1);


        if(huskylens.count(ID0) == 1) {

          digitalWrite(buzzer, HIGH);

          

        }


        if(huskylens.count(ID0) == 0) {

          digitalWrite(buzzer, LOW);

          

        }


        Serial.println("#######");

        Serial.println(String()+F("Get all blocks and arrows tagged ID1. Count:")+huskylens.count(ID1));

        for (int i = 0; i < huskylens.count(ID1); i++)

        {

            HUSKYLENSResult result = huskylens.get(ID1, i);

            printResult(result);

        }


        Serial.println("#######");

        Serial.println(String()+F("Get all blocks and arrows tagged ID2. Count:")+huskylens.count(ID2));

        for (int i = 0; i < huskylens.count(ID2); i++)

        {

            HUSKYLENSResult result = huskylens.get(ID2, i);

            printResult(result);

        }

    }

    else

    {

        Serial.println("Fail to request objects from Huskylens!");

    }

}


void printResult(HUSKYLENSResult result){

    if (result.command == COMMAND_RETURN_BLOCK){//result is a block

        Serial.println(String()+F("Block:xCenter=")+result.xCenter+F(",yCenter=")+result.yCenter+F(",width=")+result.width+F(",height=")+result.height+F(",ID=")+result.ID);

    }

    else if (result.command == COMMAND_RETURN_ARROW){//result is an arrow

        Serial.println(String()+F("Arrow:xOrigin=")+result.xOrigin+F(",yOrigin=")+result.yOrigin+F(",xTarget=")+result.xTarget+F(",yTarget=")+result.yTarget+F(",ID=")+result.ID);

    }

    else{//result is unknown.

        Serial.println("Object unknown!");

    }

}


 
 
 

Comments


Seja o primeiro a saber das novidades

2024 Mundo do Arduino

bottom of page