littlebot
Published on 2025-04-18 / 0 Visits
0

【源码】基于Arduino和Python Flask框架的WallE机器人复刻系统

项目简介

本项目是一个Wall - E机器人复刻系统,涵盖机器人和控制器代码。Arduino代码用于控制机器人的电机和舵机,实现速度控制、远程控制等功能;Raspberry Pi Web Server基于Python的Flask框架搭建,提供网页界面,用户可通过该界面远程控制机器人运动、播放声音、设置参数等。

项目的主要特性和功能

Arduino部分

  • 实现舵机电机速度控制,使加速和减速更平滑。
  • 采用非阻塞串口解析,支持远程控制机器人运动。
  • 具备电池电量监测功能(待完善),并能控制LED面板显示电池电量。

Raspberry Pi Web Server部分

  • 提供JavaScript操纵杆,方便控制机器人运动。
  • 支持手动控制所有舵机电机。
  • 列出机器人可执行的运动动画列表。
  • 提供可播放的声音列表。
  • 设有设置页面,可修改电机参数、声音音量和视频选项。
  • 支持游戏手柄控制,可使用Xbox或PlayStation控制器。
  • 配备简单登录页面,增强访问安全性。

安装使用步骤

Arduino

基本安装

  1. 确保电子设备接线与图示匹配。
  2. 在Arduino IDE中打开wall - e.ino,相关文件会自动在不同标签页打开。
  3. 安装Adafruit_PWMServoDriver.h库:在Arduino IDE中,依次选择Sketch -> Include Library -> Manage Libraries...,搜索“Adafruit Servo”并安装最新版本。
  4. 用USB线将计算机与微控制器连接,在“Tools”菜单中选择正确的“Board”和“Port”。
  5. 将草图上传到微控制器。

测试主程序

  1. 草图上传到Arduino后,在微控制器仍连接计算机时,开启12V电池电源。
  2. 打开Arduino IDE右上角的“Serial Monitor”,将波特率设置为115200。
  3. 发送字符 'w'、'a'、's'、'd' 分别控制机器人前进、左转、后退、右转,发送 'q' 停止所有运动。
  4. 发送字符 'j'、'l'、'i'、'k' 控制头部左右倾斜和眼睛上下移动。

舵机电机校准

  1. 在Arduino IDE中打开wall - e_calibration.ino
  2. 将草图上传到微控制器,打开串口监视器并将波特率设置为115200。
  3. 根据提示,通过发送字符 'a'、'd'、'z'、'c' 调整舵机位置,发送 'n' 进行校准步骤。
  4. 校准完成后,将输出的校准值数组复制到wall - e.ino的第116 - 122行。

电池电量检测

  1. 按图示连接电阻和线路,推荐电阻值为 R1 = 100kΩR2 = 47kΩ
  2. 取消主Arduino草图wall - e.ino第50行的注释。
  3. 若使用不同电阻值,根据公式 POT_DIV = R2 / (R1 + R2) 修改第54行的电位器分压增益因子。

添加自定义舵机动画

  1. 打开与主Arduino草图同一文件夹下的animations.ino文件。
  2. switch语句中插入新的case部分,添加动画指令。
  3. 时间单位为毫秒,舵机位置命令为0 - 100的整数,可使用 -1 禁用特定电机。

Raspberry Pi Web Server

基本安装

  1. 设置Raspberry Pi运行最新版本的Raspberry Pi OS(Raspbian) - Full。
  2. 打开Raspberry Pi的命令行终端。
  3. 更新软件包列表:sudo apt update
  4. 安装Flask:
    • 确保pip已安装:sudo apt install python3 - pip
    • 安装Flask及其依赖项:sudo pip3 install flask
  5. (可选)若使用非Full版本的Raspbian,运行以下命令: shell sudo apt install git libsdl1.2 libsdl - mixer1.2 sudo pip3 install pygame serial pyserial
  6. 将仓库复制到Raspberry Pi的主目录: shell cd ~
  7. 设置Web服务器密码:
    • 打开app.pynano ~/walle - replica/web_interface/app.py
    • 在第20行的 put_password_here 处插入所需密码。
  8. (可选)修改默认音频目录和视频流脚本位置。
  9. 连接到Arduino微控制器:
    • 将Arduino插入Raspberry Pi的USB端口。
    • 若要在Web界面中默认选择Arduino使用的串口,在app.py第21行将“ARDUINO”替换为设备名称。
    • CTRL + O 保存,按 CTRL + X 退出nano编辑器。

使用Web服务器

  1. 确定Raspberry Pi在网络中的当前IP地址:hostname - I
  2. 启动服务器:python3 ~/walle - replica/web_interface/app.py
  3. 在同一网络的计算机或设备上打开浏览器,输入Raspberry Pi的IP地址,后跟 :5000,如 192.168.1.10:5000
  4. CTRL + C 停止服务器。
  5. 若要开始控制机器人,先在Web界面的“Settings”选项卡中选择正确的串口,然后点击“Reconnect”按钮。

添加摄像头流

  1. 确保管理脚本名称和路径正确:/home/pi/mjpg - streamer.sh,若保存位置不同,需更新app.py第22行。
  2. 使脚本可由Web服务器执行:chmod +x /home/pi/mjpg - streamer.sh

开机自动启动服务器

  1. 创建.service文件:nano ~/walle.service
  2. 粘贴以下内容: ```text [Unit] Description=Start Wall - E Web Interface After=network.target

[Service] WorkingDirectory=/home/pi/walle - replica/web_interface ExecStart=/usr/bin/python3 app.py Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier=walle User=pi

[Install] WantedBy=multi - user.target `` 3. 按CTRL + O保存,按CTRL + X退出nano编辑器。 4. 将文件复制到启动目录:sudo cp ~/walle.service /etc/systemd/system/walle.service5. 启用自动启动:sudo systemctl enable walle.service6. 可使用sudo systemctl start walle.servicesudo systemctl stop walle.service` 手动启动和停止服务。

添加新声音

  1. 确保音频输出到耳机插孔:amixer cset numid=3 1
  2. 确保所有声音文件为 *.ogg 格式。
  3. 修改文件名格式为 [组名]_[文件名]_[时长(毫秒)].ogg
  4. 将声音文件上传到Raspberry Pi的 ~/walle - replica/web_interface/static/sounds/ 文件夹。
  5. 若文件未显示,可更改文件夹访问权限:sudo chmod -R 755 ~/walle - replica/web_interface/static/sounds

设置Raspberry Pi为WiFi热点

参考 此网站 的步骤1 - 5进行设置。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】