怎么利用单片机 红外遥控 实现小车向左转和向右转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么利用单片机 红外遥控 实现小车向左转和向右转相关的知识,希望对你有一定的参考价值。

是用直流电机还是步进电机好一点啊

    使用L298N芯片驱动直流电机控制小车车轮,直流电机转速使用PWM控制,PWM不懂可以百度。

    单片机可以通过控制L298N芯片的引脚高低电平控制车轮转或者不转,左轮转  右轮不转,这就是右转弯啦。这样一个思路就可以让小车前进后退左转右转,PWM可以让小车加速或者减速。

    步进机一般不拿来当车轮的,自动开关窗帘这方面更适合步进机。拿来控制车轮跑得太慢了。直流电机更灵活一点。控制PWM值一样可以让小车转到你想要的角度。

参考技术A 使用L298N芯片驱动直流电机控制小车车轮,直流电机转速使用PWM控制,PWM不懂可以百度。单片机可以通过控制L298N芯片的引脚高低电平控制车轮转或者不转,左轮转 右轮不转,这就是右转弯啦。这样一个思路就可以让小车前进后退左转右转,PWM可以让小车加速或者减速。百度一下L298N芯片你就一目了然了。追问

用步进电机是不是转向要精确一些呢?

追答

步进机一般不拿来当车轮的,自动开关窗帘这方面更适合步进机。拿来控制车轮跑得太慢了。直流电机更灵活一点。控制PWM值一样可以让小车转到你想要的角度。

本回答被提问者和网友采纳
参考技术B 单片机接收红外信号,根据信号指令判断,控制电机动作。追问

怎么让车向左转啊 电机单片机最多控制转速吧 方向怎么变呢

参考技术C 简单,不过在写毕业论文,没空帮你!追问

说说思路就好了

参考技术D 你好!我这有程序用吗? 有个邮箱!追问

这个可以通过程序实现啊?

追答

你只是知道理论? 不做实物?

矩阵的旋转

一,给定一个矩阵,用二维数组表示,不一定是方阵(N*N),求矩阵的转置(向右),和向左转置。比如:

1 2 3

4 5 6

7 8 9

向右转置:

1 4 7

2 5 8

3 6 9

 

再比如:

1 2 3

4 5 6

向 左转置

3 6

2 5

1 4

 

二,实现思路

假设原来的矩阵是M*N,转置后变成了 N*M。设原矩阵是arr[M][N],创建一个新的矩阵 rev[N][M]

对于向右转置而言,就是线性代数里面的求AT,对于arr[M][N]里面的每个元素arr[i][j],将之赋值给 rev[j][i] 即可。

 

对于向左转置,对于arr[M][N]里面的每个元素arr[i][j],将之赋值给 rev[N-j-1][i] 即可。

 

三,完整代码

public class Test{
    
    public static void main(String[] args) {
        int[][] arr1 = {{1,2,3},{4,5,6},{7,8,9}};
        int[][] arr2 = {{1,2,3},{4,5,6}};
        
        reverseRight(arr1);
        System.out.println("---------");
        reverseRight(arr2);
        
        System.out.println("***********");
        reverseLeft(arr1);
        System.out.println("-------------");
        reverseLeft(arr2);
    }
    
    public static void reverseRight(int[][] arr){
        int row = arr.length;
        int col = arr[0].length;
        
        int[][] rev = new int[col][row];
        
        for(int i = 0; i < row; i++)
        {
            for(int j = 0; j < col; j++)
                rev[j][i] = arr[i][j];
        }
        
        StringBuilder sb = new StringBuilder();
        //打印旋转后的矩阵--有col行和 row 列
        for(int i = 0; i < col; i++)
        {
            for(int j = 0; j < row; j++)
            {
                //System.out.print(rev[i][j]+" ");
                sb.append(rev[i][j] + " ");
            }
            sb.deleteCharAt(sb.length()-1);
            sb.append("\n");
//            System.out.println();
        }
        System.out.println(sb.toString());
    }
    
    public static void reverseLeft(int[][] arr)
    {
        int row = arr.length;
        int col = arr[0].length;
        
        int[][] rev = new int[col][row];
        
        for(int i = 0; i < row; i++)
        {
            for(int j = 0; j < col; j++)
            {
                rev[col-j-1][i] = arr[i][j];
            }
        }
        
        //打印旋转后的矩阵--有col行和 row 列
        for(int i = 0; i < col; i++)
        {
            for(int j = 0; j < row; j++)
            {
                System.out.print(rev[i][j] + " ");
            }
            System.out.println();
        }
    }
}

 

以上是关于怎么利用单片机 红外遥控 实现小车向左转和向右转的主要内容,如果未能解决你的问题,请参考以下文章

AD中PCB里这是怎么打印出来的,只有元件和丝印

使用arduino ps2无线遥控手柄实现 遥控小车

Spring Boot怎么处理上传文件时出现的MultipartException

labview如何获取簇数组中的数据名称、类型和数据值

树莓派视觉小车 -- 物体跟踪(OpenCV)

“ADB”怎样安装使用